Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
UART
STM32F103
stm32F103VET6 HAL 库USART3 串口重映射
发布于 2018-09-18 16:57:27 浏览:6329
订阅该版
[tocm] 今天将我们之前项目植为rt-thread 系统进行学习,之前的板子因为usart3 为了方便走线,用的是PC10,PC11 。rt-thred 里usart3 默认是PB10,PB11。 ### 首先第一步: 在drv_usart.c 里找到 ``` void HAL_UART_MspInit(UART_HandleTypeDef *uartHandle) ``` 函数找到usart 配置部分`else if (uartHandle->Instance == USART3)` ### 第二步: 之前的`__HAL_RCC_GPIOB_CLK_ENABLE(); `注释掉,更改为`__HAL_RCC_GPIOC_CLK_ENABLE();` ### 第三步: 对usart 引脚进行重映射:添加 `__HAL_AFIO_REMAP_USART3_PARTIAL(); // 将USART 3 更换到PC10,PC11 默认是PB10,PB11` ### 第四步: 修改TX 引脚的配置 : 由`HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); ` 改为 `HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);` ### 第五步: 修改RX 引脚的配置: 由`HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); ` 改为 `HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);` 经过以上5步编译后验证OK! 部分代码如下: ```c else if (uartHandle->Instance == USART3) { /* USER CODE BEGIN USART3_MspInit 0 */ /* USER CODE END USART3_MspInit 0 */ /* USART3 clock enable */ __HAL_RCC_USART3_CLK_ENABLE(); // __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_AFIO_REMAP_USART3_PARTIAL(); // GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, ENABLE); // 将USART 3 更换到PC10,PC11 默认是PB10,PB11 /**USART3 GPIO Configuration PB10 ------> USART3_TX PB11 ------> USART3_RX */ GPIO_InitStruct.Pin = GPIO_PIN_10; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_11; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; // HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); /* USART3 interrupt Init */ HAL_NVIC_SetPriority(USART3_IRQn, 5, 0); HAL_NVIC_EnableIRQ(USART3_IRQn); /* USER CODE BEGIN USART3_MspInit 1 */ /* USER CODE END USART3_MspInit 1 */ } ``` ## 重点总结一下 重`__HAL_AFIO_REMAP_USART3_PARTIAL()`,因为之前一直是用的标准库,用的`GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, ENABLE);`函数, 发现在编译不过,发现rt-thread 用的HAL 库, 所以在HAL 库中找看有没有重映射的接口,先是找到的是找到sm32f1xx_hal.conf.h 里 ``` #define AFIO_MAPR_USART3_REMAP_PARTIALREMAP AFIO_MAPR_USART3_REMAP_PARTIALREMAP_Msk /*!< Partial remap (TX/PC10, RX/PC11, CK/PC12, CTS/PB13, RTS/PB14) */ ``` 以为这个就是的,修改后发现没有用。后来又找到stm32f1xx_hal_gpio_ex.h里发现这里面才是的: ```c /** * @brief Enable the remapping of USART3 alternate function CTS, RTS, CK, TX and RX. * @note PARTIAL: Partial remap (TX/PC10, RX/PC11, CK/PC12, CTS/PB13, RTS/PB14) * @retval None */ #define __HAL_AFIO_REMAP_USART3_PARTIAL() do{ CLEAR_BIT(AFIO->MAPR, AFIO_MAPR_USART3_REMAP); \ SET_BIT(AFIO->MAPR, AFIO_MAPR_USART3_REMAP_PARTIALREMAP); \ }while(0U) ``` 修改后测试有数据输出!
查看更多
1
个回答
默认排序
按发布时间排序
gaolong
2025-07-18
这家伙很懒,什么也没写!
感谢啊,这个问题困扰了我好久啊。因为用studio的可以直接改。这个不可以。感谢感谢。
撰写答案
登录
注册新账号
关注者
0
被浏览
6.3k
关于作者
tcsun
这家伙很懒,什么也没写!
提问
19
回答
62
被采纳
0
关注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
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
6
五分钟玩转RT-Thread新社区
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
【RSOC25】Day5 课程笔记:软件包相关知识
2
RT-Thread 夏令营 第五天笔记
3
【RSOC25】Day5 课程笔记:软件包和网络组件
4
【RSOC25】Day4 课程笔记:I/O设备和驱动框架
5
【RSOC25】Day3 课程笔记:线程间同步和通信
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
Bootloader
AT
Hardfault
CAN总线
ART-Pi
FinSH
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
FAL
RTC
rt-smart
cubemx
I2C_IIC
UART
WIZnet_W5500
BSP
ESP8266
PWM
ota在线升级
packages_软件包
flash
freemodbus
GD32
潘多拉开发板_Pandora
编译报错
ADC
keil_MDK
flashDB
rt_mq_消息队列_msg_queue
ulog
socket
MicroPython
msh
中断
Debug
SFUD
at_device
SDIO总线
本月问答贡献
Ryan_CW
3
个答案
3
次被采纳
D1sguIse_
6
个答案
2
次被采纳
用户名由3_15位
6
个答案
1
次被采纳
三世执戟
4
个答案
1
次被采纳
xiaorui
2
个答案
1
次被采纳
本月文章贡献
出出啊
1
篇文章
1
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
2
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部