用的KEIL5。用的芯片是STM32F103VET6。PCB是自己画的。模块没有问题,在别人板子上测试过。
跑的是例程。我不存在引脚没改对的问题。可能有问题的就是寄存器有没有写对。我用的是C1。如下所示,应该没写错?
#define DHT11_IO_IN() {GPIOC->CRL&=0XFFFFFF0F;GPIOC->CRL|=8<<4;}
#define DHT11_IO_OUT() {GPIOC->CRL&=0XFFFFFF0F;GPIOC->CRL|=3<<4;}程序死在下面。也就是无法检测到模块。
u8 DHT11_Check(void)
{
u8 retry=0;
DHT11_IO_IN();//SET INPUT
while (DHT11_DQ_IN&&retry<100)//DHT11»áà-μí40~80us
{
retry++;
delay_us(1);
};
if(retry>=100)return 1;
else retry=0;
while (!DHT11_DQ_IN&&retry<100)//DHT11à-μíoó»áÔù′Îà-¸ß40~80us
{
retry++;
delay_us(1);
};
if(retry>=100)return 1;
return 0;
}
猜测可能是时序问题,但时序不是模块自带的?我也不会改。
模块没有问题,代码是示例,引脚什么都改了,所以可能是板子的问题?
希望有大佬能看看。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
以我上面的程序来说,那些延时多少微秒延时多少毫秒必须是准的,这个是建立在系统时钟基础上的,具体你可以搜索一下我的有关延时的帖子。
http://www.openedv.com/forum.php?mod=viewthread&tid=275994可以试用一下此帖4楼的代码
一周热门 更多>