收藏官网首页
查看: 3357|回复: 0

[经验分享] 如何在freertos中使用dht11

106

主题

107

帖子

7264

积分

论坛元老

Rank: 8Rank: 8

积分
7264
跳转到指定楼层
楼主
 楼主| 发表于 2023-8-8 23:45:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
校园创客福利
    我们知道dht11需要精确的时序,一般都是以来systick来生成精确的延时,机智云提供的cubemx版驱动也是,但是使用freertos系统需要占用STM32的systick用于自身的心跳,这回导致代码配置systick与freertos的systick冲突。那么dht11也无法运行了。因此,我们需要修改一下代码,适配freertos。


首先是定义一下端口和引脚,因为这部分定义本来是在其他文件定义的。


接下来,我们要实现延时微秒和毫秒的函数,毫秒可以使用Hal_delay实现
首先是1us的延时,我们可以执行空指令来实现

50个nop消耗50个周期,大概690多纳秒,再加上i的自减也需要指令周期,再怎么也会大于690ns 因此或许大概接近1us 实际可能要上逻辑分析仪看看
那么接下来实现一个10us的函数 那么就是1us的10倍,因此for循环修改成100即可

然后,我们把代码内使用到延时的地方替换成我们的函数

还要注意,为了避免nop指令被优化,代码应该选择o0的优化
最后使用串口输出一下数据看看

可以看出,已经正常运行了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表