nRF52832出現“APP_UART_COMMUNICATION_ERROR”的錯誤的問題


在調試nRF52832的uart的過程中,發現調試信息會時不時打印“APP_UART_COMMUNICATION_ERROR”這個錯誤,看上去似乎毫無規律。查看SDK的相關說明,可以大致知道打印這個的提示的原因是uart硬件接收到了一些錯誤數據。但是為什么會收到錯誤數據呢?

        經過反復試驗,發現只要用手觸碰到芯片的RX引腳,就會打印這個錯誤提示。由此,可以推測是手觸碰到uart的接收腳,觸發了uart的接收,但是又沒接收到正確數據,所以才導致了這個問題。說到這里,能很自然地想到這一定是和芯片的管腳輸入模式有關。博主之前有寫過一篇文章《觸摸單片機的IO會使單片機死機的問題》,文中所寫的問題,與當前這個問題本質上是一樣的,都是由於輸入管腳浮空造成的。

        通過不斷追蹤uart初始化代碼,發現SDK確實是把RXD引腳默認設置成了浮空輸入。代碼如下:

在“nrf_drv_uart.c”文件的第110行:

__STATIC_INLINE void apply_config(nrf_drv_uart_t const * p_instance, nrf_drv_uart_config_t const * p_config)
{
    if (p_config->pseltxd != NRF_UART_PSEL_DISCONNECTED)
    {
        nrf_gpio_pin_set(p_config->pseltxd);
        nrf_gpio_cfg_output(p_config->pseltxd);
    }
    if (p_config->pselrxd != NRF_UART_PSEL_DISCONNECTED)
    {
        nrf_gpio_cfg_input(p_config->pselrxd, NRF_GPIO_PIN_NOPULL);
    }

        把代碼中的“NRF_GPIO_PIN_NOPULL”,改成“NRF_GPIO_PIN_PULLUP”即可解決這個問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM