基于stm32f4的hx711一直称不出来重量

2019-07-14 18:54发布

本帖最后由 夜孤影 于 2018-4-8 12:38 编辑

手头有一块HX711模块,一直在用51开发,开发的很好,突发奇想移植到STM32F4上面去,于是就写了代码,现在问题是编译通过了,下载到板子上去后一直称不出来重量,东西放在上面也不显示加减,很苦恼,调试了2天没结果,网上也没有相应的文章,请大家帮帮忙。代码如下。串口显示结果。
  1. //主函数
  2. #include "stm32f4xx.h"
  3. #include "usart.h"
  4. #include "delay.h"
  5. #include "main.h"
  6. #include "HX711.h"


  7.   

  8. int main(void)
  9. {
  10.          unsigned long t=0;

  11.         delay_init(168);
  12.        
  13.         uart_init(9600);
  14.         AD_init();       
  15.        
  16.         while(1)
  17.                 {
  18.                         delay_ms(500);
  19.                         t = ReadAD();
  20.                         printf("t1=%ld ",t);                               
  21.                         delay_ms(500);
  22.                         t = filter();
  23.                         printf("t2=%ld ",t);               

  24. }
  25. }

  26. //HX711
  27. #include "HX711.h"
  28. #include "delay.h"
  29. #include "stm32f4xx.h"

  30. void AD_init(void)
  31. {
  32.                 GPIO_InitTypeDef GPIO_InitStructure;

  33.         RCC_APB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);

  34.         GPIO_InitStructure.GPIO_Pin = CLK ;
  35.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  36.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//CLKÒý½Å¶¨ÒåÍÆÍìÊä³ö
  37.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  38.         //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ­
  39.         GPIO_Init(ADIO,&GPIO_InitStructure);

  40.         GPIO_InitStructure.GPIO_Pin = DATA;//Êý¾Ý
  41.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  42.         //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ­
  43.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //DATAÒý½Å¶¨Ò帡¿ÕÊäÈë
  44.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  45.         GPIO_Init(ADIO,&GPIO_InitStructure);                 
  46. }


  47. //****************************************************
  48. //³ÆÖØ1
  49. //****************************************************
  50. unsigned long ReadAD(void)  //¶ÁADоƬÊä³öµÄÊý¾Ý¡£
  51. {
  52.         unsigned long count ;
  53.         unsigned char i;
  54.   GPIO_SetBits(ADIO,DATA);        //DOUT=1;
  55.         GPIO_ResetBits(ADIO,CLK);        //CLK=0
  56.   count=0;         
  57.   while(GPIO_ReadInputDataBit(ADIO,DATA)); //µÈ´ýDOUTµÈÓÚ0
  58.         delay_us(1);
  59.   for(i=0;i<24;i++)
  60.         {
  61.                   GPIO_SetBits(ADIO,CLK);                        //CLK=1               
  62.                   count=count<<1;
  63.                         delay_us(1);
  64.                         GPIO_ResetBits(ADIO,CLK);                  //CLK=0
  65.                         if(GPIO_ReadInputDataBit(ADIO,DATA))                //Èç¹ûDOUTµÈÓÚ1                       
  66.                                         count++;
  67.                                         delay_us(1);
  68.         }
  69.         GPIO_SetBits(ADIO,CLK);        //CLK =1
  70.   count=count^0x800000;
  71.         delay_us(1);
  72.         GPIO_ResetBits(ADIO,CLK);//CLK =0
  73.   delay_us(1);
  74.         return(count);                
  75. }


  76. long double filter(void)  //»¬¶¯¾ùÖµÂ˲¨·¨µÄº¯Êý¡£   
  77. {
  78.         unsigned long max=0,min=0,SUM,BUF[12],Average;
  79.         int i=0;       
  80. for(i=0;i<12;i++)
  81.         {
  82.                 BUF[i]=ReadAD();
  83.         //printf("%ld ",BUF[i]);
  84.                 if(i==0)
  85.                 {
  86.                         max=BUF[0];
  87.                         min=BUF[0];
  88.                 }
  89.                 if(i>0)
  90.                 {
  91.                         if(BUF[i]>max) max=BUF[i];
  92.                         if(BUF[i]<min) min=BUF[i];
  93.                 }
  94.         }
  95.         for(i=0;i<12;i++)
  96.         {
  97.                 if(!(BUF[i]==max||BUF[i]==min))
  98.                 {
  99.                         SUM=SUM+BUF[i];       
  100.                 }
  101.         }
  102.         Average=SUM/(12-2);
  103.         return Average;
  104.        
  105. }

复制代码

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