想写一个stm32驱动hx711模块的程序
初始化:
#define DT PEout(0)
#define SCK PEout(1)
void HX711_Init(void) //???HX711??
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //CLK?????¨??????????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//DATA?????¨??????????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStructure);
}
读取数据值:
u32 DHT11_Read(void)
{
u32 val = 0;
u8 i = 0;
DT=1;
SCK=0;
while(DT);
delay_us(5);
for(i=0;i<24;i++)
{
SCK=1;
val=val<<1;
delay_us(5);
SCK=0;
if(DT) val++;
delay_us(5);
}
SCK=1;
val = val^0x800000;
delay_us(5);
SCK=0;
delay_us(5);
return val;
}
主函数:
while(1)
{
printf("wendusi%f
",DHT11_Read());
delay_ms(500);
}
一共25个脉冲,用A通道采集,VCC用的是3.3v,
结果一直没有打印出数据,好像是DT一直是高电平,陷在while循环那里。这是怎么回事
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
#include <hx711.h>
#include<delay.h>
u8 AMP;
u8 OFFSET;
u8 COEFFICIENT;
void HX711_Init(int amp,double co)
{
RCC->APB2ENR|=1<<3; //PORTB
GPIOB->CRL&=0xFFFFFF00;
GPIOB->CRL|=0x00000083; // PB0=SCK 输出 PB1=DOUT输入
//GPIOB->ODR|=0<<0;
//GPIOB->ODR|=1<<1;
set_amp(amp);
SCK=0;
HX711_read();
}
void set_amp(int amp)
{
switch (amp) {
case 32: AMP = 2; break;
case 64: AMP = 3; break;
case 128: AMP = 1; break;
}
}
long HX711_read()
{
int i;
long val=0;
SCK=0;
while(DOUT==0);
for(i=0;i<24;i++)
{
pulse();
val<<=1;
if(DOUT==1)val++;
}
for(i=0;i<AMP;i++)
{
pulse();
}
return val& (1L << 23) ? val | ((-1L) << 24) : val;
}
void pulse()
{
SCK=1;
delay_us(3);
SCK=0;
delay_us(3);
}
double bias_read()
{
return (HX711_read()-OFFSET)*COEFFICIENT;
}
一周热门 更多>