用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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
void Huadong_BUFInit(void)
{
uint8_t j;
for(j=0;j<N;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<N;j++)
{
if(max<BUF[j])
{
max=BUF[j];//找出当前数组中的最大值
}
if(min>BUF[j])
{
min=BUF[j];//找出当前数组中的最小值
}
}
return (SUM-max-min)/(N-2);
}
一周热门 更多>