Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
STM32F407
串口
STM32F407VGT6上使用serialX
发布于 2022-11-25 12:29:40 浏览:1671
订阅该版
在论坛上看到@出出啊分享的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); ``` 完成! ![2.png](https://oss-club.rt-thread.org/uploads/20221125/3ef95c8d39097fa3ce9654a873038039.png.webp "2.png")
16
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
阿富汗老嬴政
这家伙很懒,什么也没写!
文章
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
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部