|
50黑币
在论坛里面参考了很多人的HX711模块,可以知道,SCK引脚要设置为推挽输出,50MHZ,DOUT设置为浮空输入,50MHZ。初始化引脚之后是读取转换函数,这个没什么好说的,看着改就好。让我疑惑的是,我自认为程序写的应该没问题,但是串口一直显示83688608,我在上面放置物品,也不见重量发生变化。我看了论坛所有HX711的帖子,发现论坛很多大佬都碰到这个问题了,但是解决办法很多人都不说,有的说引脚接错了,但是我把E+E-引脚接反,DT,SCK都接反来试验过,还是不行,最后又改回原来的。我在探索板上给HX711提供5V,GND,实验过改为3.3V,GND- //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[i]=ReadAD();
- //printf("%ld\r\n",BUF[i]);
- if(i==0)
- {
- max=BUF[0];
- min=BUF[0];
- }
- if(i>0)
- {
- if(BUF[i]>max) max=BUF[i];
- if(BUF[i]<min) min=BUF[i];
- }
- }
- for(i=0;i<12;i++)
- {
- if(!(BUF[i]==max||BUF[i]==min))
- {
- SUM=SUM+BUF[i];
- }
- }
- 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\r\n",t);
- delay_ms(500);
- t = filter();
- printf("t2=%ld\r\n",t);
- }
- }
复制代码
,还是不行。所以请教诸位,看一下我的程序跟原理图,提出解决办法。给个思路或灵感也行啊
|
评分
-
查看全部评分
|