本帖最后由 zhczlzhang 于 2018-4-9 15:55 编辑
在论坛里面参考了很多人的HX711模块,可以知道,SCK引脚要设置为推挽输出,50MHZ,DOUT设置为浮空输入,50MHZ。初始化引脚之后是读取转换函数,这个没什么好说的,看着改就好。让我疑惑的是,我自认为程序写的应该没问题,但是串口一直显示83688608,我在上面放置物品,也不见重量发生变化。我看了论坛所有HX711的帖子,发现论坛很多大佬都碰到这个问题了,但是解决办法很多人都不说,有的说引脚接错了,但是我把E+E-引脚接反,DT,SCK都接反来试验过,还是不行,最后又改回原来的。我在探索板上给HX711提供5V,GND,实验过改为3.3V,GND,还是不行。所以请教诸位,看一下我的程序跟原理图,提出解决办法。给个思路或灵感也行啊。
[mw_shl_code=c,true]//hx711程序
#include "HX711.h"
#include "delay.h"
#include "stm32f4xx.h"
void AD_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
GPIO_InitStructure.GPIO_Pin = CLK ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//CLKòy½Å¶¨òåíÆíìêä3ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//éÏà-
GPIO_Init(ADIO,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = DATA;//êy¾Y
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
//GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//éÏà-
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //DATAòy½Å¶¨ò帡¿Õêäèë
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(ADIO,&GPIO_InitStructure);
}
//****************************************************
//3ÆÖØ1
//****************************************************
unsigned long ReadAD(void) //¶áADD¾Æ¬êä3öμÄêy¾Y¡£
{
unsigned long count ;
unsigned char i;
GPIO_SetBits(ADIO,DATA); //DOUT=1;
GPIO_ResetBits(ADIO,CLK); //CLK=0
count=0;
while(GPIO_ReadInputDataBit(ADIO,DATA)); //μè′yDOUTμèóú0
delay_us(1);
for(i=0;i<24;i++)
{
GPIO_SetBits(ADIO,CLK); //CLK=1
count=count<<1;
delay_us(1);
GPIO_ResetBits(ADIO,CLK); //CLK=0
if(GPIO_ReadInputDataBit(ADIO,DATA)) //èç1ûDOUTμèóú1
count++;
delay_us(1);
}
GPIO_SetBits(ADIO,CLK); //CLK =1
count=count^0x800000;
delay_us(1);
GPIO_ResetBits(ADIO,CLK);//CLK =0
delay_us(1);
return(count);
}
long double filter(void) //»¬¶ˉ¾ùÖμÂË2¨·¨μÄoˉêy¡£
{
unsigned long max=0,min=0,SUM,BUF[12],Average;
int i=0;
for(i=0;i<12;i++)
{
BUF=ReadAD();
//printf("%ld
",BUF);
if(i==0)
{
max=BUF[0];
min=BUF[0];
}
if(i>0)
{
if(BUF>max) max=BUF;
if(BUF<min) min=BUF;
}
}
for(i=0;i<12;i++)
{
if(!(BUF==max||BUF==min))
{
SUM=SUM+BUF;
}
}
Average=SUM/(12-2);
return Average;
}
//主函数
#include "stm32f4xx.h"
#include "usart.h"
#include "delay.h"
#include "main.h"
#include "HX711.h"
int main(void)
{
unsigned long t=0;
delay_init(168);
uart_init(9600);
AD_init();
while(1)
{
delay_ms(500);
t = ReadAD();
printf("t1=%ld
",t);
delay_ms(500);
t = filter();
printf("t2=%ld
",t);
}
}
[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>