Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
STM32F407
串口
STM32F407VGT6上使用serialX
发布于 2022-11-25 12:29:40 浏览:572
订阅该版
在论坛上看到@出出啊分享的serialX驱动,想自己试用一下,具体步骤如下: 前期准备:下载serialX相关代码,参考[https://club.rt-thread.org/ask/article/bfd92159ba11aef6.html](https://club.rt-thread.org/ask/article/bfd92159ba11aef6.html) RT-Thread Studio版本: 2.2.5,RT-Thread v4.1.0 , 1. 新建RTthread STM32F407VGT6项目。打开CUBEMAX配置调试口,外部时钟,串口1(控制台),串口3,串口开启中断,生成代码。 2. 删除掉原来的serial.c; serial.h; serialV2.c; serialV2.h; drv_uart.c; drv_uart.h; drv_uart_V2.c; drv_uart_V2.h; 并使用serialX.c; serialX.h; drv_usartX.c; drv_usartX.h 替换 3. 修改/rt-thread[4.1.0]/components/drivers路径下的Kconfig文件,找到if RT_USING_SERIAL修改一段代码,使setting页面可以配置serialX。 ```c if RT_USING_SERIAL choice prompt "Choice Serial version" default RT_USING_SERIAL_X config RT_USING_SERIAL_X bool "RT_USING_SERIAL_X" endchoice config RT_SERIAL_USING_DMA bool "Enable serial DMA mode" default n endif ``` 4.修改/rt-thread[4.1.0]/components/drivers/serial 文件夹下的SConscript文件代码,以使用serialX.c文件 ```c from building import * cwd = GetCurrentDir() CPPPATH = [cwd + '/../include'] group = [] if GetDepend(['RT_USING_SERIAL']): if GetDepend(['RT_USING_SERIAL_X']): src = Glob('serialX.c') group = DefineGroup('DeviceDrivers', src, depend = ['RT_USING_SERIAL_X'], CPPPATH = CPPPATH) Return('group') ``` 5.找到rt_device.h文件的SERIAL部分,修改代码,使之 可以包含serialX.h 文件。 ```c #ifdef RT_USING_SERIAL #ifdef RT_USING_SERIAL_X #include "drivers/serialX.h" #endif #endif /* RT_USING_SERIAL */ ``` 6.打开uart_config.h文件,找到#define UART1_CONFIG部分 删除掉结构体中.tx_pin_name和 .rx_pin_name成员。 而且后续使用哪个串口就必须修改相对应的结构体宏定义。 7.打开drv_usartX.c文件,按需求增加自己所需要的串口代码 比如用到串口3中断,不使用DMA, 则需要添加串口3 中断函数。 ```c #if defined(BSP_USING_UART3) void USART3_IRQHandler(void) { /* enter interrupt */ rt_interrupt_enter(); uart_isr(&(uart_obj[UART3_INDEX].serial)); /* leave interrupt */ rt_interrupt_leave(); } #endif /* BSP_USING_UART3 */ ``` 8.找到drv_common.c文件的串口部分,修改代码 ```c #ifdef RT_USING_SERIAL #ifdef RT_USING_SERIAL_X #include "drv_usartX.h" #endif /* RT_USING_SERIAL */ #endif /* RT_USING_SERIAL_X */ ``` 9.使用下载来的文件替换掉rtdef.h文件,并且将新的文件中rt_mutex结构体定义中的value成员的注释关掉 10.打开components.c文件,修改rit_end函数 这里必须修改,否则控制台shell线程不会自启动 ```c static int rti_end(void) { return 0; } INIT_EXPORT(rti_end, "7.end"); ``` 11.如果关于serialX的相关文件已经按以上步骤修改了,但是依找不到文件,可以尝试在setting中更新配置(比如开关串口DMA选项)。 board.h中添加 ```c #define BSP_USING_UART1 #define BSP_USING_UART3 ``` main函数中打开串口 ```c rt_device_open(u3_dev, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_INT_TX | RT_DEVICE_OFLAG_NONBLOCKING); ``` 完成! 
13
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
阿富汗老嬴政
这家伙很懒,什么也没写!
文章
1
回答
0
被采纳
0
关注TA
发私信
相关文章
1
串口DMA发送数据时,数据被覆盖
2
关于串口DMA模式下rt_device_close问题
3
利用stm32f427实现usb转串口,电脑端什么也没有识别到
4
finsh 控制台 适配 RS 485请大神指点????
5
uart_sample.c 中,读串口设备时偏移量pos要设置为-1而不是0?
6
【结贴】at_device软件包中对串口接收数据缺少判断导致数据接收异常
7
串口无法接受数据,但可以发送
8
串口如何有效的清除掉接收缓冲,而不必一个一个的去读取
9
串口接收使用方式问题
10
雅特力FINSH问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
五分钟玩转RT-Thread新社区
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
6
国产MCU移植系列教程汇总,欢迎查看!
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
LWIP
SPI
Env
AT
FinSH
ART-Pi
Bootloader
CAN总线
Hardfault
文件系统
USB
DMA
RT-Thread
线程
stm32
RT-Thread Nano
SCons
MQTT
ESP8266
ota
packages_软件包
UART
rtthread
RTC
freemodbus
I2C
flash
cubemx
W5500
rt-smart
定时器
FAL
PWM
ADC
BSP
SDIO
msh
AB32VG1
Debug
C++_cpp
socket
SFUD
中断
编译报错
MicroPython
keil
LVGL
dfs
本月问答贡献
出出啊
1424
个答案
315
次被采纳
小小李sunny
1327
个答案
262
次被采纳
crystal266
490
个答案
144
次被采纳
whj467467222
1210
个答案
141
次被采纳
张世争
581
个答案
131
次被采纳
本月文章贡献
出出啊
4
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
crystal266
1
篇文章
1
次点赞
whj467467222
2
篇文章
2
次点赞
张世争
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部