zoukankan      html  css  js  c++  java
  • 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”即可解决这个问题。

    经验再多也只能看作加法,而经过理论升华的经验,就可以看作乘法!
  • 相关阅读:
    fortran imsl 程序库
    使用NET USE将USB端口模拟为LPT1
    Processing鼠标响应(1)
    MATLAB矩阵运算(1)
    Processing中类的定义
    Perl的第二纪
    Processing鼠标响应(2)
    Processing中的图片互动
    gFortran的使用
    用回溯法来产生由0或1组成的2m个二进位串,使该串满足以下要求
  • 原文地址:https://www.cnblogs.com/TorryLong/p/13631540.html
Copyright © 2011-2022 走看看