Proteus HX711 stm32仿真
·
在使用proteus仿真HX711模块,使用stm32单片机控制的过程中,遇到了很多的问题。
首先网站上很少使用原始模块的,然后就是很多都使用51,因此,本人踩了不少坑。
现在打算记录一下,至少能够正常显示了,以后有问题再慢慢修改。
首先,硬件电路,一定要记得是5V供电,然后VFB引脚的电阻记得修改成一个20k,一个8.2k。,
DOUT、PD_SCK只需配置通用io口即可。
下面是初始化函数:(标准库)
void HX711_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC ,ENABLE);
// 配置HX711引脚
// PC0: DOUT (输入)
// PC1: PD_SCK (输出)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 下拉输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
// 4. 初始化HX711时钟线为低电平
GPIO_ResetBits(GPIOC, GPIO_Pin_1);
}
然后就是激动人心的称重函数!
int32_t HX711_Read_Weight(void)
{
uint32_t data = 0;
uint8_t i;
HX711_SCK_CLR();
for (i = 0; i < 24; i++)
{
HX711_SCK_SET(); // 时钟上升沿
HX711_Delay();
data <<= 1; // 左移一位
HX711_SCK_CLR();
if (GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0))
{
data++;
}
// 时钟下降沿
HX711_Delay();
}
HX711_SCK_SET();
HX711_Delay();
data = data^0x00800000; // 如果是负数(最高位为1)
HX711_SCK_CLR();
HX711_Delay();
return (int32_t)data;
}
至此,已经可以显示在LCD屏幕上了。

主函数:
float current_weight;
char weight_buffer[16];
LCD1602_Init();
HX711_Init();
while(1){
current_weight=HX711_Read_Weight();
sprintf(weight_buffer, "W:%.2fg", current_weight/83886.08); // 纯数字
LCD1602_Show_Str(7, 1, weight_buffer);
delay_ms(100); }
ok,睡觉
更多推荐


所有评论(0)