关于HX711返回值为8388607
在沁恒板上用HX711来测重时,返回值一直是8388607。
换用F407时,也是如此,上网搜索发现,可能是延时不够精确,导致返回值错误。
8388608或8388607,换算为十六进制就是80000和7FFFFF,就是表示采集值无效,可以理解为0,如果始终出现,表示传感器输出或电路出错。
换了一个延时函数,测重正常了。
下面是代码
延时函数
‘’’
uint32_t fac_us;
void HAL_Delay_us_init(uint8_t SYSCLK)//里面参数为自己单片机的时钟主频,我的项目目前为168MHZ,即填写169即可
{
fac_us=SYSCLK;
}
void HAL_Delay_us(uint32_t nus)
{
uint32_t ticks;
uint32_t told,tnow,tcnt=0;
uint32_t reload=SysTick->LOAD;
ticks=nus*fac_us;
told=SysTick->VAL;
while(1)
{
tnow=SysTick->VAL;
if(tnow!=told)
{
if(tnow<told)tcnt+=told-tnow;
else tcnt+=reload-tnow+told;
told=tnow;
if(tcnt>=ticks)break;
}
};
}
‘’’
总结:
如果使用GPIO模拟高低电平变化实现传输协议时,要保证延迟函数精确,从而使得芯片正常工作
后面去研究一下延迟函数
参考文章:
STM32 hx711电子称老出现8388608或8388607的原因和调试记录
STM32F407VET6可用HAL库Delay延时函数
关于STM32单片机延时微妙(delay_us)函数-hal库
HAL 库 uS 延时的 3 种实现方式
基于stm32f103c8t6的HX711称重传感器快速上手