美文网首页
2019-04-18 FreeRTOS and DB18B20

2019-04-18 FreeRTOS and DB18B20

作者: yango3 | 来源:发表于2019-04-18 10:52 被阅读0次

描述:

去年做的一个项目用到了STM32F103, FreeRTOS, DB18B20来读取温度参数。

发现时不时会发生读取温度参数的CRC校验错误,发生概率不高。大部分情况会将0误读为1。后来采取了再读一遍的方式克服这个问题。

本质原因:

FreeRTOS使用了1000Hz的定时器来做Scheduler的任务调度,虽然我们设定任务切换方式为抢占式的,但是任务调度还是要进行的,而且就由这个1ms一次的定时器任务来实现,所以会影响DB18B20的读写时序。毕竟18B20的读窗口只有12us,有一定的概率被定时器任务影响。

解决办法:

增加下面两个函数来设置关键区域,防止被中断打扰:taskENTER_CRITICAL(),  taskEXIT_CRITICAL()。 使用下来效果不错,CRC不出错了。

uint8_t ReadBit(uint16_t pin){

    GPIO_PinState bit;

    taskENTER_CRITICAL();

    Enable_TX(pin);

    Wire_Off(pin);

    DelayUs(DELAY_PULL_LOW);

    //Wire_On(pin);

    //DelayUs(DELAY_PULL_LOW);

    Enable_RX(pin);

    DelayUs(12);

    bit =  Wire_Read( pin);

    LED1_Off();

    taskEXIT_CRITICAL();

    return bit;   

}

Refer:

请参考上面的代码,链接:
github上的代码示例

相关文章

网友评论

      本文标题:2019-04-18 FreeRTOS and DB18B20

      本文链接:https://www.haomeiwen.com/subject/lbrzwqtx.html