【已解决】HX711在STM32F4里面一直显示83688608

2019-07-20 03:17发布

本帖最后由 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))                //è&#231;1&#251;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)  //&#187;&#172;&#182;ˉ&#190;ù&#214;μ&#194;&#203;2¨·¨μ&#196;oˉêy&#161;£   
{
        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]

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。