串行通信(Serial Communication)是一种常见的通信方式,指的在发送或接收数据时逐位传输,一次只传输一位;与此相对的是并行通信,一次可传输多个数据位。相比于并行通信,串行通信虽然数据传输速率较慢,但其占用资源少、成本低、实现简单,因此在嵌入式系统中应用十分广泛,而UART(通用异步收发器)则是众多串行通信协议中最典型的一种。本期内容将通过PC主机与RV-STAR开发板间的三个通信小实验,简单讲解UART串口通信的应用方法。
系统环境
Windows 10-64bit
软件平台
NucleiStudio IDE 202102版或 PlatformIO IDE
CoolTerm
硬件需求
RV-STAR开发板
在之前的文章中介绍过,RV-STAR的开发板上使用了一个双端口的FT2232 USB设备芯片,一个端口用于JTAG调试,另一个端口可建立开发板到电脑的串口连接,其电路原理图如下:
从电路原理图可知,RV-STAR是通过UART4_TX(PC12)和UART4_RX(PD2)连接到FT2232芯片,进而和电脑建立连接的,了解了这个才便于我们稍后编写实验代码。
void uart_init()
{
rcu_periph_clock_enable(RCU_GPIOC);
rcu_periph_clock_enable(RCU_GPIOD);
rcu_periph_clock_enable(RCU_UART4);
// UART4_TX - PC12
gpio_init(GPIOC, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_12);
// UART4_RX - PD2
gpio_init(GPIOD, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_2);
usart_deinit(UART4);
usart_baudrate_set(UART4, 115200U);
usart_word_length_set(UART4, USART_WL_8BIT);
usart_stop_bit_set(UART4, USART_STB_1BIT);
usart_parity_config(UART4, USART_PM_NONE);
usart_hardware_flow_rts_config(UART4, USART_RTS_DISABLE);
usart_hardware_flow_cts_config(UART4, USART_CTS_DISABLE);
usart_receive_config(UART4, USART_RECEIVE_ENABLE);
usart_transmit_config(UART4, USART_TRANSMIT_ENABLE);
usart_enable(UART4);
}
int main()
{
uart_init();
ECLIC_Register_IRQ(UART4_IRQn, ECLIC_NON_VECTOR_INTERRUPT, ECLIC_LEVEL_TRIGGER, 1, 0, NULL);
__enable_irq();
usart_interrupt_enable(UART4, USART_INT_RBNE);
while (1);
}
主程序中只进行外设初始化和中断使能,接收字符和回传因为时间极短,可以都在中断服务程序中处理:使用字符型变量c保存使用usart_data_receive()接收到的数据,然后再使用usart_data_transmit()发送出去(每次发送数据帧,需要等待USART_FLAG_TBE置位后再发送下一帧)。
void UART4_IRQHandler(void)
{
if (RESET != usart_interrupt_flag_get(UART4, USART_INT_FLAG_RBNE))
{
uint8_t c = usart_data_receive(UART4);
usart_data_transmit(UART4, c);
while (SET != usart_flag_get(UART4, USART_FLAG_TBE));
}
}
完成代码编写后,连接开发板,编译并上传代码。为了屏蔽不同IDE的串口终端的差异,我们使用通用的PC串口软件CoolTerm来观察串口实验的现象,它是一个免费而功能强大的串口调试软件。
下载链接:
https://coolterm.sooftware.com/windows
首先打开Windows设备管理器,查看RV-STAR开发板的串口端口号(笔者的电脑上是COM15,读者的电脑上可能不同)。
(设备管理器查看端口)
然后打开CoolTerm,点击“Options”按钮进行串口配置,选择COM15端口,设置波特率为115200,其他采用默认设置(和代码中对UART4串口的配置一致),点击下方的“OK”按钮后,点击“Connect”按钮,即可连接到RV-STAR的串口上。
(配置CoolTerm)
(打开发送窗口)
(在发送窗口中输入字符)
也可以不使用“Send String”,直接将光标移动到终端窗口中,然后键入字符,也可正常回显。
(直接在终端窗口中键入字符)
完整代码请参考:
https://gitee.com/Nuclei-Software/nuclei-board-labs/tree/master/rvstar/uart/uart_return_char
由于涉及的内容较多,这里不做过多的介绍,欢迎感兴趣的读者在社区中交流,完整代码请参考:
https://gitee.com/Nuclei-Software/nuclei-board-labs/tree/master/rvstar/uart/uart_return_string