称重模块HX711,在stm32上的实现。
#include "stm32f10x.h"
#include "hx711.h"
#include "delay.h"
#include "usart.h"
//需要两根线通讯,一个时钟线,一个数据线。
#define ADIO GPIOA
#define DATA GPIO_Pin_0 //数据线,输入模式
#define CLK GPIO_Pin_1 //时钟线,输出模式
#define ADCLK RCC_APB2Periph_GPIOA //时钟线
void ADInit(void) //初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(ADCLK,ENABLE);
GPIO_InitStructure.GPIO_Pin = CLK;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推完输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(ADIO,&GPIO;_InitStructure);
GPIO_InitStructure.GPIO_Pin = DATA;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(ADIO,&GPIO;_InitStructure);
}
unsigned int HX711_Read(void) //时钟配置
{
unsigned int val=0;
unsigned int val1=0;
unsigned char i = 0;
GPIO_SetBits(ADIO,DATA);//高
GPIO_ResetBits(ADIO,CLK);//低
while(GPIO_ReadInputDataBit(ADIO,DATA));//等
for(i=0;i<24;i++)
{
GPIO_SetBits(ADIO,CLK);
val=val<<1;
GPIO_ResetBits(ADIO,CLK);
if(GPIO_ReadInputDataBit(ADIO,DATA))
val++;
}
GPIO_SetBits(ADIO,CLK);
val = val^0x800000;
GPIO_ResetBits(ADIO,CLK);
return val;
}
2021-05-07 21:24:53
2MB
HX711
1