mmuyu 发表于 2023-8-8 23:45:17

如何在freertos中使用dht11

    我们知道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的优化
最后使用串口输出一下数据看看

可以看出,已经正常运行了
页: [1]
查看完整版本: 如何在freertos中使用dht11