OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6273|回复: 3

nRF官方SDK使用串口时的小bug解决分享

[复制链接]

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2021-4-12 22:36:20 | 显示全部楼层 |阅读模式
本帖最后由 八度空间 于 2021-4-12 22:46 编辑

最近用nRF52832进行蓝牙开发,用到串口,无意中发现,连接UART的两个IO悬空,也就是断开外设连接,程序居然死机,通过log进行分析,追踪到程序跑到APP_UART_COMMUNICATION_ERROR或APP_UART_FIFO_ERROR这两个事件中去了,官方在这两个事件中直接做了出错处理APP_ERROR_HANDLER,如果打开debug功能的话,mcu就会重启
经过测量,发现rx管教在悬空的时候,电平不是很稳定,从这个现象出发,追查sdk源码,发现配置io的时候,使用的是标准的上下拉,貌似强度不够
这是官方调用的接口初始化 1.png
查看nrf_gpio_cfg_input()函数如下
2.png
用的是标准方式,想到这里,明白了,立马修改成强推进行测试,居然可以了,修改代码如下
3.png
tx和rx我都改了,在实际的测试中,这样修改就比较好了,没有出现进入前面两个事件中的任何一个了
这个函数apply_config()有两处,我都修改了,分别是nrfx_uart.c文件和nrfx_uarte.c文件



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2021-4-14 08:41:08 | 显示全部楼层
官方的板Rx引脚有上拉电阻,所以不需要配置上拉。

针对你的板子,应该只需要把原来的NRF_GPIO_PIN_NOPULL改成NRF_GPIO_PIN_PULLUP就可以了,其他的都不需要改。这个跟是否强推没有任何关系。
Rx是输入管脚,没有输出属性,所以你设置是否强推不会有任何效果。这个pin最好还是使用原来的nrf_gpio_cfg_input接口去初始化更规范一些。
坚决不用寄存器,拒绝重复造轮子。
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2023-11-24 23:30:13 | 显示全部楼层
xkwy 发表于 2021-4-14 08:41
官方的板Rx引脚有上拉电阻,所以不需要配置上拉。

针对你的板子,应该只需要把原来的NRF_GPIO_PIN_NOPUL ...

是的,使用原始的,做稳定性压测,偶尔还是出现接收出错的情况,修改后就没出啥幺蛾子,稳定运行了好几年
硬件上没有加上拉,所以配置成推了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

0

主题

451

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3316
金钱
3316
注册时间
2016-3-19
在线时间
815 小时
发表于 2023-12-18 14:45:46 | 显示全部楼层
谢谢分享  学习了
Nothing is impossible
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 09:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表