完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
用STM32单片机写程序驱动hx711,无论传感器上是否放重物,输出的AD值一直在增加,我用的是单片机内部时钟,配置为8MHz,程序如下:
uint32_t HX711_Read(void) //读HX711芯片输出的数据。 { uint32_t val = 0; uint8_t i = 0; GPIO_SetBits(GPIOA,ADDO); //DOUT=1 GPIO_ResetBits(GPIOA,ADSK); //SCK=0 while(GPIO_ReadInputDataBit(GPIOA,ADDO)); //等待DOUT=0 delay_us(1); for(i=0;i<24;i++) { GPIO_SetBits(GPIOA,ADSK); //SCK=1 val=val<<1; delay_us(1); GPIO_ResetBits(GPIOA,ADSK); //SCK=0 if(GPIO_ReadInputDataBit(GPIOA,ADDO)) val++; //DOUT=1 delay_us(1); } GPIO_SetBits(GPIOA,ADSK);//25次脉冲 val = val^0x800000; delay_us(1); GPIO_ResetBits(GPIOA,ADSK); delay_us(1); return val; } |
|
相关推荐
5个回答
|
|
你的驱动有问题,读取没问题
最佳答案
|
|
|
|
这个一直在增加是i什么么意思?
|
|
|
|
我就用了一个滑动滤波函数,得到的Huadong_filter()直接用于计算重量了,读取滤波后的ad值就是一直增加,程序如下:
void Huadong_BUFInit(void) { uint8_t j; for(j=0;j BUF[j] = HX711_Read(); SUM+=BUF[j]; } } long double Huadong_filter(void) //滑动均值滤波法的函数。 { uint32_t temp=0,max=0,min=0; uint8_t j; temp = HX711_Read(); SUM = SUM+temp-BUF[M];//添加一个最新值,去掉一个最老值 BUF[M]=temp;//将最老值替换成最新值 M++; if(M == N) { M=0; } max=BUF[0]; min=BUF[0]; for(j=0;j if(max max=BUF[j];//找出当前数组中的最大值 } if(min>BUF[j]) { min=BUF[j];//找出当前数组中的最小值 } } return (SUM-max-min)/(N-2); } |
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1441 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1373 浏览 3 评论
3018 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1519 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1949 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 01:34 , Processed in 0.766804 second(s), Total 84, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号