Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
UART
UART
STM32F030
F030系列芯片UART3~UART6使用问题总结
发布于 2020-08-11 12:47:05 浏览:3043
订阅该版
在调试STM32F030RCT6的过程中,发现使用UART3~UART6时,无论是使用rt-thread Studio(1.1.3) 还是使用BSP(自制的030RCT6 BSP) 如果直接使用rt-thread4.0.2的代码,这几个串口都无法正常工作。但同样的代码在STM32F103VCT6,STM32F407ZGT6 (我只在这两个芯片上测试过,其它未知)却可无修改的正常运行。同时如果直接使用STM32F030RCT6的UART1、UART2则都能正常工作,无问题。 从下面的几个案例看,F030系列使用UART3~UART6时,常见的两个主要问题如下: **问题1、**直接编译rt-thread Studio代码,提示 identifier "UARTX_CONFIG" is undefined,其中的UARTX为你使用的串口,比如"UART3_CONFIG、"UART6_CONFIG [STM32F030RCT6 增加UART6出错](https://club.rt-thread.org/ask/question/425366.html) [STM32F0系列UART3_CONFIG is undefined 错误](https://club.rt-thread.org/ask/question/423607.html) 该问题是在uart_config.h文件中仅默认配置了UART1、UART2。要使用UART3~UART6需要手工在该文件中增加相应配置。比如使用UART6,需手工增加如下代码段: ``` #if defined(BSP_USING_UART6) #ifndef UART6_CONFIG #define UART6_CONFIG \ { \ .name = "uart6", \ .Instance = USART6, \ .irq_type = USART3_6_IRQn, \ } #endif /* UART6_CONFIG */ #endif /* BSP_USING_UART6 */ ``` **问题2、**UART3~UART6可正常输出,但无法输入 典型的错误现象如下: [F030RCT6 UART3 作为console 能输出但无法输入](https://club.rt-thread.org/ask/question/425399.html) [STMF030 控制台选择串口3,控制台无法输出,只能接收](https://club.rt-thread.org/ask/question/424712.html) 经过分析,这个问题的原因是未进入串口的接收中断。 在stm32f030xc.h文件中,定义了如下与串口中断有关的STM32F0 specific Interrupt Numbers,其中UART1、UART2都是独立定义的。但UART3~UART6仅定义了一个中断number  在解决第一个问题时,我们定义的UART6_CONFIG.irq_type = USART3_6_IRQn, 其中的中断number是USART3_6_IRQn,与stm32f030xc.h文件中的定义是一致的。如果这里仅配置UART6_CONFIG.irq_type = USART6_IRQn 是会报错的,因为USART6_IRQn并无定义。 但是在rt-thread 4.0.2的drv_uart.c中,对uart6的中断函数是如下定义的:  其函数名称是USART6_IRQHandler(void),其中的USART6_IRQ需要与stm32f030xc.h文件中定义的中断number名对应起来。通过前面的分析stm32f030xc.h中定义的是USART3_6_IRQn,当UART3~UART6的串口中断发生时,系统会找void USART3_6_IRQHandler(void)函数。但drv_uart.c中却定义的是形如USART3_IRQHandler(void)、USART6_IRQHandler(void)的函数。按名称根本找不到中断函数。 解决办法:将drv_uart.c中使用的串口的中断函数名改为USART3_6_IRQHandler,如下图:  再次编译下载,串口可正常输入了。 这样改动的一个问题是:当同时使用UART3~UART6中的多个串口时,由于其中断响应函数都是同一个,需要自己在中断函数USART3_6_IRQHandler() 中判断是来自哪个串口的中断。 如果直接在stm32f030xc.h中更改,给每个串口定义一个独立的Interrupt Number,这样就无需改动drv_uart.c文件,原理上应该也是可以的,等有时间验证一下。
7
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
pkokoc
这家伙很懒,什么也没写!
文章
1
回答
125
被采纳
4
关注TA
发私信
相关文章
1
rt thread 2.0.2 usart 接收缓存问题
2
关于STM32串口通信的问题
3
STM32F1+RTT串口接收终端数据丢失问题
4
UART TX丢数据?
5
RTT打开串口的时候如何自定义波特率呢?
6
STM32F4的USART数据接收问题
7
串口1234使用问题
8
串口接收回调函数
9
LPC18xx UART问题讨论
10
x1000串口配置的失败问题
推荐文章
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
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
10
个答案
3
次被采纳
xiaorui
3
个答案
2
次被采纳
winfeng
2
个答案
2
次被采纳
三世执戟
8
个答案
1
次被采纳
KunYi
8
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
lizimu
2
篇文章
8
次点赞
swet123
1
篇文章
4
次点赞
Days
1
篇文章
4
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部