nrf52840的uart0与uart1双串口使用

nrf52840的uart0与uart1双串口使用

项目原使用nrf52832,后面由于项目需要用到双串口,改用nrf52840,官方的例程没看到使用uart1的,找遍全网都没找到uart1的使用资料,有些不负责任的网文居然说40也只有一个uart,吓得俺赶紧又查看了一次datesheet,O得K、木鸭梨
nrf52840的uart0与uart1双串口使用
SDK代码uart驱动中,搜索到uart1的驱动部分,说明官方驱动有uart1支持的
nrf52840的uart0与uart1双串口使用
自己动手,丰衣足食吧,下面以nRF5_SDK_17.0.0_9d13099版本,在examples\ble_peripheral\ble_app_uart\pca10056的例程上修改
1:在配置文件中,启用下面两项,如果没有的加上
// UART1_ENABLED - Enable UART1 instance
//==========================================================
#ifndef UART1_ENABLED
#define UART1_ENABLED 1
#endif
// UART1_CONFIG_USE_EASY_DMA - Default setting for using EasyDMA
#ifndef UART1_CONFIG_USE_EASY_DMA
#define UART1_CONFIG_USE_EASY_DMA 1
#endif
2:修改app_uart库,主要修改了app_uart_fifo.c文件,官方的APP层,原来只支持单个uart0的操作,改为支持多instance
nrf52840的uart0与uart1双串口使用
app_uart.h中,定义obj
nrf52840的uart0与uart1双串口使用

代码上传到https://download.csdn.net/download/chhen168/12688127,把我上传的‘nrf52840的uart0与uart1双串口_uart’替换到nRF5_SDK_17.0.0_9d13099\components\libraries\uart里的文件即可,可用对比软件对比旧的,查看修改项
3:使用就简单了,定义两个uart实例
nrf52840的uart0与uart1双串口使用
调用初始化,完事
nrf52840的uart0与uart1双串口使用
注意1:官方例程里的uart0初始化要去掉
nrf52840的uart0与uart1双串口使用
注意2:APP层的代码,只修改了FIFO的文件,如果不使用FIFO,app_uart.c要参照app_uart_fifo.c修改里面的几个函数

注意3:需要在uart定义文件里,定义下面两个函数,printf需要用到,原来的app_uart_get改为支持多uart,不适用了
uint32_t _app_uart_get(uint8_t * p_byte)
{
return app_uart_get(&uart1, p_byte);
}

uint32_t _app_uart_put(uint8_t byte)
{
return app_uart_put(&uart1, byte);
}

测试结果,木鸭梨
nrf52840的uart0与uart1双串口使用
不会编辑,将就看吧