NRF52芯片模拟物理串口

本文介绍了NRF52芯片如何通过硬件模拟UART串口,包括纯软件和硬件+软件两种模拟方法,详细阐述了硬件模拟发送(PWM+DMA)和接收(GPIOTE+PPI+SAADC+DMA)的工作原理。此外,讨论了模拟串口的功耗、波特率支持以及驱动程序的初始化和关闭。提供了典型应用代码示例。
摘要由CSDN通过智能技术生成

什么是UART

UART — Universal asynchronous receiver/
transmitter,通用异步数据接收/发送器。
UART典型使用三根线,TX,RX,GND,此处不涉及到RTS,CTS。NRF52芯片只有一个物理串口,如果需要NRF52芯片同时连接两个以上的串口外设就需要模拟更多的串口出来。

模拟串口方法

纯软件模拟

通常可以采用GPIO中断和定时判断高低电平这类纯软件的方式去模拟接收,使用延时控制IO口高低电平的方式去模拟发送,这种方法的缺点很明显,那就是在BLE功能开启的情况下,GPIO和定时器中断都会被延迟,从而导致无法正确接收和发送数据位。即使在无BLE开启的情况下,由于CPU处理中断的延时也会导致正常传输数据的波特率不会太高。

硬件+软件的模拟方法

本文着重讲一种纯硬件方式去模拟串口的方法,模拟发送数据使用NRF52的PWM+DMA的方式,高位1的点空比为0,低为0的点空比为每位的总时长;模拟接收数据采用NRF52的GPIOTE+PPI+SAADC+DMA的方式,当接收到数据流的起始位时GPIOTE中断会触发ADC开始按每位时长进行采样,采样值超过门限值为1,反之为0,DMA将ADC的每位采样值存储到指定内存空间,当采集完成后,CPU参与解析接收到的每位采样值。
接收数据有三个比较麻烦的地方,一是需要额外增加一个IO口扮演RX的角色,这个IO主要用作判断数据流的起始位,在数据接收过程中,禁止此IO中断,数据接收完成后才重新打开中断监听新的数据流;二是ADC停止采样后,不能在ADC中断中立即设置新的接收BUFFER,需要等ADC完全停止后才能重新设置,否则ADC无法停止采样;三是采样到的数据解析,由于串口每位的时间无法和时钟的TICK完全整除,所以我们采样的时间点一定会有误差,我们做不到精确的在每一位进行一次采样,可以通过变通的方法,每次采样的时间是每位时长的一半多2-5个TICK,那么可以保证每位最多两次采样且至少会有一次采样,解析时如果发现缺少一个相同的采样位,并且与下一个采样位值不同,我们认为此次采样为一个有效的位。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值