babyfeng 发表于 2014-4-10 08:21:05

【MCU实战经验】STM32F051通过DHT11做温湿度采集

之前申请过STM32F05Discovery套件,做过一些实验,虽然第一次接触STM32单片机,感觉非常好用,项目里现在已经在用STM32F051替代NXP的M0,这个是DHT11温湿度采集的例程,因为有外设库,配置起来还是比较容易的。
 
 #include
 
uint8_t buf={0x00,0x00,0x00,0x00};
uint8_t crc;
 
GPIO_TypeDef* dht11Port = GPIOA;
const uint16_t dht11Pin = GPIO_Pin_10;
const uint32_t dht11Clock = RCC_AHBPeriph_GPIOA;
 
void Dht11SetPinIn(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Pin = dht11Pin ;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; 
        GPIO_Init(dht11Port,&GPIO_InitStructure);
}
void Dht11SetPinOut(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Pin = dht11Pin ;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;        
        GPIO_Init(dht11Port,&GPIO_InitStructure);
}
unsigned char Dht11Start(void)
{
        Dht11SetPinOut();
        GPIO_ResetBits(dht11Port,dht11Pin);        
        Delay_ms(20);       
        GPIO_SetBits(dht11Port,dht11Pin);
        Delay_5us(4);    
       
   Dht11SetPinIn();
   Delay_5us(1); 
   if(!GPIO_ReadInputDataBit(dht11Port,dht11Pin))
   {
         while(!GPIO_ReadInputDataBit(dht11Port,dht11Pin));
         while(GPIO_ReadInputDataBit(dht11Port,dht11Pin));        
         return 1;   
   }
  return 0;
}
uint8_t Dht11ReadByte(void)
{
        uint8_t i;
        uint8_t buf=0;
        for(i = 0;i

1407W 发表于 2015-1-23 11:45:23

楼主可以加个好友探讨一下吗 最近需要这个代码

数码小叶 发表于 2015-1-23 17:52:49

学习学习,谢谢分享

AndyYau-268557 发表于 2015-1-23 20:53:01

挺好的,恭喜楼主:)
页: [1]
查看完整版本: 【MCU实战经验】STM32F051通过DHT11做温湿度采集