找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3159|回复: 1
打印 上一主题 下一主题
收起左侧

[已解决]HX711在STM32F4里面一直显示83688608

[复制链接]
跳转到指定楼层
楼主
50黑币
在论坛里面参考了很多人的HX711模块,可以知道,SCK引脚要设置为推挽输出,50MHZ,DOUT设置为浮空输入,50MHZ。初始化引脚之后是读取转换函数,这个没什么好说的,看着改就好。让我疑惑的是,我自认为程序写的应该没问题,但是串口一直显示83688608,我在上面放置物品,也不见重量发生变化。我看了论坛所有HX711的帖子,发现论坛很多大佬都碰到这个问题了,但是解决办法很多人都不说,有的说引脚接错了,但是我把E+E-引脚接反,DT,SCK都接反来试验过,还是不行,最后又改回原来的。我在探索板上给HX711提供5V,GND,实验过改为3.3V,GND
  1. //HX711
  2. #include "HX711.h"
  3. #include "delay.h"
  4. #include "stm32f4xx.h"

  5. void AD_init(void)
  6. {
  7.                 GPIO_InitTypeDef GPIO_InitStructure;

  8.         RCC_APB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);

  9.         GPIO_InitStructure.GPIO_Pin = CLK ;
  10.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  11.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//CLKòy½Å¶¨òåíÆíìêä3ö
  12.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  13.         //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//éÏà-
  14.         GPIO_Init(ADIO,&GPIO_InitStructure);

  15.         GPIO_InitStructure.GPIO_Pin = DATA;//êy¾Y
  16.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  17.         //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//éÏà-
  18.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //DATAòy½Å¶¨ò帡¿Õêäèë
  19.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  20.         GPIO_Init(ADIO,&GPIO_InitStructure);                 
  21. }


  22. //****************************************************
  23. //3ÆÖØ1
  24. //****************************************************
  25. unsigned long ReadAD(void)  //¶áADD¾Æ¬êä3öμÄêy¾Y¡£
  26. {
  27.         unsigned long count ;
  28.         unsigned char i;
  29.   GPIO_SetBits(ADIO,DATA);        //DOUT=1;
  30.         GPIO_ResetBits(ADIO,CLK);        //CLK=0
  31.   count=0;         
  32.   while(GPIO_ReadInputDataBit(ADIO,DATA)); //μè′yDOUTμèóú0
  33.         delay_us(1);
  34.   for(i=0;i<24;i++)
  35.         {
  36.                   GPIO_SetBits(ADIO,CLK);                        //CLK=1               
  37.                   count=count<<1;
  38.                         delay_us(1);
  39.                         GPIO_ResetBits(ADIO,CLK);                  //CLK=0
  40.                         if(GPIO_ReadInputDataBit(ADIO,DATA))                //èç1ûDOUTμèóú1                        
  41.                                         count++;
  42.                                         delay_us(1);
  43.         }
  44.          GPIO_SetBits(ADIO,CLK);        //CLK =1
  45.   count=count^0x800000;
  46.         delay_us(1);
  47.         GPIO_ResetBits(ADIO,CLK);//CLK =0
  48.   delay_us(1);
  49.         return(count);                 
  50. }


  51. long double filter(void)  //»¬¶ˉ¾ùÖμÂË2¨·¨μÄoˉêy¡£   
  52. {
  53.         unsigned long max=0,min=0,SUM,BUF[12],Average;
  54.         int i=0;        
  55. for(i=0;i<12;i++)
  56.         {
  57.                 BUF[i]=ReadAD();
  58.         //printf("%ld\r\n",BUF[i]);
  59.                 if(i==0)
  60.                 {
  61.                         max=BUF[0];
  62.                         min=BUF[0];
  63.                 }
  64.                 if(i>0)
  65.                 {
  66.                         if(BUF[i]>max) max=BUF[i];
  67.                         if(BUF[i]<min) min=BUF[i];
  68.                 }
  69.         }
  70.         for(i=0;i<12;i++)
  71.         {
  72.                 if(!(BUF[i]==max||BUF[i]==min))
  73.                 {
  74.                         SUM=SUM+BUF[i];        
  75.                 }
  76.         }
  77.         Average=SUM/(12-2);
  78.         return Average;
  79.         
  80. }

  81. //主函数
  82. #include "stm32f4xx.h"
  83. #include "usart.h"
  84. #include "delay.h"
  85. #include "main.h"
  86. #include "HX711.h"


  87.   

  88. int main(void)
  89. {
  90.          unsigned long t=0;

  91.         delay_init(168);
  92.         
  93.         uart_init(9600);
  94.         AD_init();        
  95.         
  96.         while(1)
  97.                 {
  98.                         delay_ms(500);
  99.                         t = ReadAD();
  100.                         printf("t1=%ld\r\n",t);                                
  101.                         delay_ms(500);
  102.                         t = filter();
  103.                         printf("t2=%ld\r\n",t);               

  104. }
  105. }

复制代码

,还是不行。所以请教诸位,看一下我的程序跟原理图,提出解决办法。给个思路或灵感也行啊

QQ截图20180404161045.png (44.73 KB, 下载次数: 66)

QQ截图20180404161045.png

微信图片_20180408121941.jpg (225.93 KB, 下载次数: 62)

微信图片_20180408121941.jpg

评分

参与人数 1黑币 +90 收起 理由
admin + 90 回帖助人的奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:214628 发表于 2018-4-9 15:51 | 只看该作者
问题已解决!好吧其实出现这个问题很简单,我在这里直接说一下,免得很多人都不知道这个解决方法。STM32开发板跟单片机开发板有一点不一样,你在单片机开发板上,随便哪个IO口都可以作为独立的IO口来用,但是在探索者开发板上不行,因为他的IO口都被占用了,你如果用不是开发板上的外设,而是自己的外设去抢占IO口,就会出现操作无反应的状况。我把STM32F4开发指南看了一遍才在1.2.3章节找到IO口分配表,找到了可以独立的IO口,然后重新分配了IO口引脚,然后程序下载烧录,运行完美,没有一点问题。
所以大家记住,在使用相关的开发板时,一定要注意IO口的引脚分配问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表