• 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”即可解决这个问题。

    经验再多也只能看作加法,而经过理论升华的经验,就可以看作乘法!
  • 相关阅读:
    [Angualr 2] Watch for changes
    [Angular 2] Custom Validtors
    [Angular 2] The form export from NgFormControl
    [Angular 2] Validation
    [Angualr 2] Using FormBuilder
    [Angular 2] ng-control & ng-control-group
    [Angular 2] NgNonBindable
    [Ruby] LEVEL 2 Methods and Classes
    [Rails Level 2] Ground up
    [AngularJS] 5 simple ways to speed up your AngularJS application
  • 原文地址:https://www.cnblogs.com/TorryLong/p/13631540.html
Copyright © 2020-2023  润新知