|
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);
- }
- }
復制代碼
,還是不行。所以請教諸位,看一下我的程序跟原理圖,提出解決辦法。給個思路或靈感也行啊
|
評分
-
查看全部評分
|