提示:这里的使能和上面STM32CubeMX打开串口是不一样的,env配置使能之后实际上是打开一个宏定义,打开之后才能调用RTT串口相关的库函数,而STM32CubeMX使能则是把HAL库串口相关的函数加进来。 如果你不知道env怎么使用,可以在下面这个链接查看。 env使用方法:https://www.rt-thread.org/document/site/programming-manual...
(1)此时我们需要找到RT-Thread官方的驱动代码。首先按照如下方式找到RT-Thread Studio的安装路径。 (2)例如,现在我们RT-Thread Studio的安装路径为D:\RT-Thread_Studio\soft\RT-ThreadStudio,那么我们只需要再这个路径后面加上\repo\Extract\RT-Thread_Source_Code\RT-Thread\4.0.3\bsp\stm32\libraries\HAL_Drivers。
uart_open 函数首先调用 rt_device_find 根据串口名字获得串口句柄,保存在静态全局变量 uart_device 中,后面关于串口的操作都是基于这个串口句柄。这里的名字是在 drv_usart.c 中调用注册函数 rt_hw_serial_register 决定的,该函数将串口硬件驱动和 RT-Thread 设备管理框架联系起来了。 /* register UART2 device *...
1. 下载RT-Thread源码https://github.com/RT-Thread/rt-thread 2. 进入rt-thread\bsp\stm32f4xx-HAL目录,在env命令行中输入menuconfig,进入配置界面,使用menuconfig工具(学习如何使用:https://www.rt-thread.org/qa/forum.php?mod=viewthread&tid=5699&extra=page%3D2)配置工程。 1) 配置shell使用串口1:RT-...
}//串口例程初始化函数voidusr_echo_init() { rt_thread_t thread ; rt_err_t result;//创建消息队列,分配队列存储空间result = rt_mq_init(&rx_mq,"mqt", &msg_pool[0],128-sizeof(void*),sizeof(msg_pool), RT_IPC_FLAG_FIFO);if(result !=RT_EOK) ...
2、使用DMA传输中断接收通信包 3、注意开串口4的中断,应用串口空闲中断实现不定长通信包接收。 4、通过RT-thread的内核互斥信号,防止多个线程同时操作同一个串口外设。 通过RT-thread的内核事件信号,实现中断通知线程完成串口发送或接收操作。 5、先做从机程序,在做主机程序,借助从机调主机程序代码。
UART设备驱动框架源码文件为serial_v2.c,位于RT-Thread源码的components\drivers\serial文件夹中。抽象出的UART设备驱动框架和平台无关,是一层通用的软件层。UART设备驱动框架提供以下功能。 UART设备驱动源码文件为drv_usartv2.c,放在具体bsp目录下,v2表示对接在串口v2版本的设备驱动框架上。UART设备驱动的实现与平台...
RT-Thread SPARK CAN的通信内核详解 CAN发送 1.rt_device_write rt_size_t rt_device_write(rt_device_t dev, rt_off_t pos, const voidbuffer, rt_size_t size) { /parameter check/ RT_ASSERT(dev != RT_NULL); RT_ASSERT(rt_object_get_type(&dev->parent) == RT_Object_Class_Device);...
以串口设备为例,不管下层是 STM32、GD32 还是别的平台的,只要都是串口设备,都对接到 RT-Thread 的串口设备类——如图所绘,多个硬件对象对接同一个父类对象接口。同理,从设备驱动框架层到IO设备管理接口层,又是多对一,又是再一次的屏蔽差异,再一次的抽象。——面向对象的思想贯穿其中。