Receive Polling
该示例演示使用 UART 轮询方式与 PC 终端进行数据通信。
使用 PC 终端程序(如 PUTTY 或 UartAssist)发送数据,SoC 在主程序内循环检测接收数据,并将相同数据发回给 PC 终端,在 PC 终端程序中可观察到 SoC 回复的数据信息。
用户可以通过不同的宏配置改变示例中的引脚配置,是否开启硬件流控等功能,具体宏配置详见 配置选项。
环境需求
该示例的环境需求,可参考 环境需求。
此外,需要在 PC 终端安装 PuTTY 或 UartAssist 等串口助手工具。
配置选项
可配置如下宏选择是否开启硬件流控功能。
#define UART_CONFIG_HW_FLOW_CTRL 1 /*< Set this macro to 1 to enable the hardware flow control. */
可配置如下宏修改引脚定义。
#define UART_TX_PIN P3_0 #define UART_RX_PIN P3_1 #define UART_CTS_PIN P2_4 #define UART_RTS_PIN P2_5
硬件连线
连接 P3_0(UART TX Pin)和 FT232 的 RX,P3_1(UART RX Pin) 和 FT232 的 TX。
若 UART_CONFIG_HW_FLOW_CTRL
配置为 1
,则还需要连接 P2_4(UART CTS Pin)和 FT232 的 RTS,连接 P2_5(UART RTS Pin)和 FT232 的 CTS。
编译和下载
该示例的编译和下载流程,可参考 编译和下载。
测试验证
准备阶段
启动 PuTTY 或 UartAssist 等 PC 终端,连接到使用的 COM 端口,并进行以下 UART 设置:
波特率: 115200
8 数据位
1 停止位
无校验
无硬件流控
测试阶段
当 EVB 启动后,在 Debug Analyzer 工具内观察如下 log。
Start uart rx polling test!
Soc 开始发送
### Uart demo polling read uart data ####\r\n
,观察 PC 终端上出现的字符串。在 PC 终端上输入字符串并向 SoC 发送,SoC 收到数据后会向 PC 端回复相同的数据。观察 PC 终端上是否出现相同的字符串。
代码介绍
该章节主要介绍示例中的初始化和相应功能实现的代码和流程说明。
源码路径
工程文件和源码路径如下:
工程路径:
sdk\samples\peripheral\uart\rx_polling\proj
源码路径:
sdk\samples\peripheral\uart\rx_polling\src
初始化
外设的初始化流程可参考 General Introduction 中的 初始化流程 部分。
调用
Pad_Config()
与Pinmux_Config()
,配置对应引脚的 PAD 和 PINMUX。若UART_CONFIG_HW_FLOW_CTRL
配置为1
,则仍需要对 CTS 和 RTS 引脚进行配置。void board_uart_init(void) { Pad_Config(UART_TX_PIN, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_UP, PAD_OUT_DISABLE, PAD_OUT_HIGH); Pad_Config(UART_RX_PIN, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_UP, PAD_OUT_DISABLE, PAD_OUT_HIGH); Pinmux_Config(UART_TX_PIN, UART3_TX); Pinmux_Config(UART_RX_PIN, UART3_RX); #if UART_CONFIG_HW_FLOW_CTRL Pad_Config(UART_CTS_PIN, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_UP, PAD_OUT_DISABLE, PAD_OUT_HIGH); Pad_Config(UART_RTS_PIN, PAD_PINMUX_MODE, PAD_IS_PWRON, PAD_PULL_UP, PAD_OUT_DISABLE, PAD_OUT_HIGH); Pinmux_Deinit(UART_CTS_PIN); Pinmux_Deinit(UART_RTS_PIN); Pinmux_Config(UART_CTS_PIN, UART3_CTS); Pinmux_Config(UART_RTS_PIN, UART3_RTS); #endif }
调用
RCC_PeriphClockCmd()
,开启 UART 时钟。对 UART 外设进行初始化:
定义
UART_InitTypeDef
类型UART_InitStruct
,调用UART_StructInit()
将UART_InitStruct
预填默认值。根据需求修改
UART_InitStruct
参数,UART 的初始化参数配置如下表。调用
UART_Init()
,初始化 UART 外设。
UART Hardware Parameters |
Setting in the |
UART |
---|---|---|
UART Baudrate Parameter - div |
|
|
UART Baudrate Parameter - ovsr |
|
|
UART Baudrate Parameter - ovsr_adj |
|
|
Hardware Flow Control |
|
功能实现
执行
uart_senddata_continuous
,发送### Uart demo polling read uart data ###\r\n
到 PC 终端。在函数uart_senddata_continuous
内,等待 UART TX FIFO 为空时,分批将数据填入 FIFO 中。void uart_senddata_continuous(UART_TypeDef *UARTx, const uint8_t *pSend_Buf, uint16_t vCount) { uint8_t count; while (vCount / UART_TX_FIFO_SIZE > 0) { while (UART_GetFlagStatus(UARTx, UART_FLAG_TX_FIFO_EMPTY) == 0); for (count = UART_TX_FIFO_SIZE; count > 0; count--) { UARTx->UART_RBR_THR = *pSend_Buf++; } vCount -= UART_TX_FIFO_SIZE; } while (UART_GetFlagStatus(UARTx, UART_FLAG_TX_FIFO_EMPTY) == 0); while (vCount--) { UARTx->UART_RBR_THR = *pSend_Buf++; } }
PC 终端发送字符串后,SoC 检测接收到数据且
UART_FLAG_RX_DATA_RDY
状态为 SET 时,调用UART_ReceiveByte()
接收数据,调用UART_SendByte()
把数据发回到 PC 终端。uart_senddata_continuous(UART_DEMO, String_Buf, demoStrLen); while (1) { if (UART_GetFlagStatus(UART_DEMO, UART_FLAG_RX_DATA_AVA) == SET) { rx_byte = UART_ReceiveByte(UART_DEMO); UART_SendByte(UART_DEMO, rx_byte); } }