Receive Polling
该示例演示使用 UART 轮询方式与PC终端进行数据通信。
PC终端程序(如PUTTY或UartAssist)发送数据,SoC在主程序内循环检测接收数据,并将相同数据发回给PC终端,在PC中断程序可看到对应信息。
环境需求
该示例支持以下开发套件:
Hardware Platforms |
Board Name |
---|---|
RTL87x2G HDK |
RTL87x2G EVB |
更多信息请参考快速入门。
配置选项
该示例可配置的宏如下:
UART_CONFIG_HW_FLOW_CTRL
:开启该宏可开启UART Hardware Flow Control功能。
硬件连线
连接P3_0和FT232的RX,P3_1和FT232的TX。
若开启 UART_CONFIG_HW_FLOW_CTRL
,连接P2_4和FT232的RTS,连接P2_5和FT232的CTS。
编译和下载
该示例的工程路径如下:
Project file: samples\peripheral\uart\rx_polling\proj\rtl87x2g\mdk
Project file: samples\peripheral\uart\rx_polling\proj\rtl87x2g\gcc
请按照以下步骤操作构建并运行该示例:
打开工程文件。
按照 快速入门 中 编译APP Image 给出的步骤构建目标文件。
编译成功后,在路径
mdk\bin
或gcc\bin
下会生成 app binapp_MP_xxx.bin
文件。按下复位按键,开始运行。
测试验证
准备阶段
启动 PuTTY 或 UartAssist 等PC终端,连接到使用的COM端口,并进行以下UART设置:
波特率: 115200
8 数据位
1 停止位
无校验
无硬件流控
启用
UART_CONFIG_HW_FLOW_CTRL
时,在PC终端上设置硬件流量控制选项。
测试阶段
当EVB启动后,在Debug Analyzer工具内观察如下log。
Start uart rx polling test!
该示例开始发送
### Uart demo polling read uart data ####\r\n
,观察PC终端上出现的字符串。在PC终端上输入字符串,观察PC终端上是否出现相同的字符串。
代码介绍
该章节分为以下几个部分:
源码路径
工程路径:
sdk\samples\peripheral\uart\rx_polling\proj
源码路径:
sdk\samples\peripheral\uart\rx_polling\src
该工程的工程文件代码结构如下:
└── Project: output_toggle
└── secure_only_app
└── Device includes startup code
├── startup_rtl.c
└── system_rtl.c
├── CMSIS includes CMSIS header files
├── CMSE Library Non-secure callable lib
├── lib includes all binary symbol files that user application is built on
└── rtl87x2g_io.lib
├── peripheral includes all peripheral drivers and module code used by the application
├── rtl_pinmux.c
├── rtl_rcc.c
└── rtl_uart.c
└── APP includes the ble_peripheral user application implementation
├── io_uart.c
└── main_ns.c
初始化
初始化流程包括了 board_uart_init
和 driver_uart_init
。
board_uart_init
中包含了PAD与PINMUX设置:
配置PAD:设置引脚、PINMUX模式、PowerOn、内部上拉。
配置PINMUX:分配引脚分别为UART3_TX、UART3_RX功能。
driver_uart_init
包含了对uart外设的初始化:
使能PCC时钟源。
设置波特率为115200。
启用
UART_CONFIG_HW_FLOW_CTRL
时,将UART_HardwareFlowControl
设置为ENABLE。
RCC_PeriphClockCmd(APBPeriph_UART3, APBPeriph_UART3_CLOCK, ENABLE);
...
UART_InitStruct.UART_Div = BaudRate_Table[BAUD_RATE_115200].div;
UART_InitStruct.UART_Ovsr = BaudRate_Table[BAUD_RATE_115200].ovsr;
UART_InitStruct.UART_OvsrAdj = BaudRate_Table[BAUD_RATE_115200].ovsr_adj;
#if UART_CONFIG_HW_FLOW_CTRL
UART_InitStruct.UART_HardwareFlowControl = UART_HW_FLOW_CTRL_ENABLE;
#endif
...
功能实现
执行
uart_senddata_continuous
,发送### Uart demo polling read uart data ###\r\n
到PC终端。PC终端发送字符串后,检测接收到数据且
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);
}
}