//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Òý½Å¶¨ÒåÍÆÍìÊä³ö GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ GPIO_Init(ADIO,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = DATA; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //DATAÒý½Å¶¨Ò帡¿ÕÊäÈë GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(ADIO,&GPIO_InitStructure); } //**************************************************** //³ÆÖØ1 //**************************************************** unsigned long ReadAD(void) //¶ÁADоƬÊä³öµÄÊý¾Ý¡£ { unsigned long count; unsigned char i; GPIO_SetBits(ADIO,DATA); //delay_us(2); GPIO_ResetBits(ADIO,CLK); //delay_us(2); count=0; //delay_us(2); while(GPIO_ReadInputDataBit(ADIO,DATA)); //delay_us(2); for(i=0;i<24;i++) { GPIO_SetBits(ADIO,CLK); //delay_us(2); count=count<<1; //delay_us(2); GPIO_ResetBits(ADIO,CLK); //delay_us(2); if(GPIO_ReadInputDataBit(ADIO,DATA)) //delay_us(2); count++; //delay_us(2); } GPIO_SetBits(ADIO,CLK); //delay_us(2); count=count^0x800000; delay_us(2); GPIO_ResetBits(ADIO,CLK); //delay_us(2); return(count); } long double filter(void) //»¬¶¯¾ùÖµÂ˲¨·¨µÄº¯Êý¡£ { 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) { long t=0; delay_init(168); AD_init(); uart_init(115200); while(1) { delay_ms(500); t = ReadAD(); printf("t1=%ld\r\n",t); delay_ms(500); t = filter(); printf("t2=%ld\r\n",t); } }
太巧了吧,我也是一直是8388607,用的是MSP430,你解决了吗
你的delay是自己写的吗?51那个是用for循环做的软件延时,延时时间在stm32上会差很多的。
stm32的HAL库里有systick的用法,你可以使用stm32的delay函数
延时应该不对,要看一下HX711的时序要求
我看你程序里面把所有的delay都删了,这个应该是不行的