rt-thread中的串口初始化过程

嵌入式系统:rt-thread

开发板:STM32F429

上了嵌入式操作系统的程序结构复杂,所以串口初始化的过程也不如裸机程序直观明了,在需要根据实际情况修改串口时,就会存在找不到相关程序位置的现象,所以接下来,对rt-thread中的串口初始化过程进行一下梳理。

1.首先在rt-thread的内核Kernelcomponents.c文件中,有一个rtthread_startup()函数,该函数被$Sub$$main()__low_level_init()entry()三个函数中均有调用,而这三个函数中,具体执行哪个,取决于宏定义,而三个函数前对应的宏定义__CC_ARM__CLANG_ARM__ICCARM____GNUC__是MDK中使用的编译器来选择的。这里推测应该是使用的$Sub$$main()函数。而该函数中$Sub$$的作用就是在main函数执行前,先执行以下这个函数中的代码,即rtthread_startup()函数。

2.rtthread_startup()函数中,主要是rt-thread进行板级的一些初始化,如打印rt-thread的logo信息,系统时钟的初始化,系统调度初始化,空闲进程的初始化等。其中rt_hw_board_init()函数中,就是对一些板级硬件的初始化,该函数的定义位于drv_common.c

  • 13
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
RT-Thread Studio 使用串口设备,可以按照以下步骤进行: 1. 在设备管理器找到串口设备,并记录下其名称和端口号。 2. 在 RT-Thread Studio 创建一个名为 uart 的设备对象,并设置好其配置参数,如波特率、数据位、停止位和校验位等。 3. 在应用程序调用相应的 API 函数来进行串口通信,如发送数据、接收数据等。 以下是一个使用串口设备的示例代码: ```c #include <rtthread.h> #include <rthw.h> #define UART_NAME "uart1" // 串口设备名称 #define UART_BUFSZ 128 // 缓冲区大小 static rt_device_t uart_dev; // 串口设备对象 static char uart_buffer[UART_BUFSZ];// 串口数据缓冲区 static void uart_thread_entry(void *parameter) { rt_size_t rx_len; while (1) { rt_memset(uart_buffer, 0, UART_BUFSZ); // 从串口设备读取数据 rx_len = rt_device_read(uart_dev, 0, uart_buffer, UART_BUFSZ); if (rx_len > 0) { // 处理接收到的数据 rt_kprintf("Received: %s\n", uart_buffer); } // 延时一段时间 rt_thread_mdelay(10); } } int main(void) { // 初始化串口设备 uart_dev = rt_device_find(UART_NAME); rt_device_open(uart_dev, RT_DEVICE_FLAG_RDWR); // 创建串口线程 rt_thread_t tid = rt_thread_create("uart", uart_thread_entry, RT_NULL, 1024, 25, 5); rt_thread_startup(tid); return 0; } ``` 在上述代码,首先通过 rt_device_find() 函数找到名为 uart1 的串口设备,并通过 rt_device_open() 函数打开该设备。然后创建一个名为 uart 的线程,该线程不断从串口设备读取数据,并进行处理。可以根据实际需要修改线程的优先级、堆栈大小等参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值