简介
本文将基于STM32F407VET芯片介绍如何在RT-Thread Studio开发环境下使用UART1、UART2、UART3和UART6多个串口。
使能UART1
在新建RT-Thread项目时,可以直接选择控制台串口为UART1,见RT-Thread Studio学习之使用外部时钟系统–>新建RT-Thread项目
新增串口
修改board.h宏,添加相关串口的宏定义 BSP_USING_UARTx 及修改引脚信息即可,如下图所示
编译并下载程序,在控制台输入 list_device 命令即可看到已经注册了四个串口。
测试
在application
目录下新建uart_sample.c
源文件,如下所示
uart_sample.c
文件内容如下:
/*
* 程序清单:这是一个 串口 设备使用例程
* 例程导出了 uart_sample 命令到控制终端
* 命令调用格式:uart_sample uart2
* 命令解释:命令第二个参数是要使用的串口设备名称,为空则使用默认的串口设备
* 程序功能:通过串口输出字符串"hello RT-Thread!"
*/
#include <rtthread.h>
#define SAMPLE_UART_NAME "uart2"
static rt_device_t serial;
static int uart_sample(int argc, char *argv[])
{
rt_err_t ret = RT_EOK;
char uart_name[RT_NAME_MAX];
char str[] = "hello RT-Thread!\r\n";
if (argc == 2)
{
rt_strncpy(uart_name, argv[1], RT_NAME_MAX);
}
else
{
rt_strncpy(uart_name, SAMPLE_UART_NAME, RT_NAME_MAX);
}
/* 查找系统中的串口设备 */
serial = rt_device_find(uart_name);
if (!serial)
{
rt_kprintf("find %s failed!\n", uart_name);
return RT_ERROR;
}
/* 以中断接收及轮询发送模式打开串口设备 */
ret = rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);
if (ret != RT_EOK)
{
rt_kprintf("open device failed\r\n");
return -RT_ERROR;
}
/* 发送字符串 */
rt_size_t send_len = 0;
send_len = rt_device_write(serial, 0, str, (sizeof(str) - 1));
if (send_len != sizeof(str) - 1)
{
rt_kprintf("send data failed\r\n");
return -RT_ERROR;
}
/* 关闭设备 */
ret = rt_device_close(serial);
if (ret != RT_EOK)
{
rt_kprintf("close device failed\r\n");
return -RT_ERROR;
}
rt_kprintf("serial device test successful\r\n");
return RT_EOK;
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(uart_sample, uart device sample);
编译并下载程序。
在控制台中输入uart_sample
命令,即可在UART2收到hello RT-Thread!
。
在控制台中输入uart_sample uart3
命令,即可在UART3收到hello RT-Thread!
。