STM32最少支持3个串口(usart1,usart2,usart3),STM32的库中提供一个demo例程支持usart1。问题是原理图中,usart1所在的引脚PA0.9,PA.10已被用作USB使能引脚。这种情况下,我有两种选择:1、选择usart2;2:将usart1映射到PB0.6,PB0.7.
一开始我选择的是usart2,因为我对stm32的功能重映射不是非常熟悉,花了一天的时间,在demo的基础上将usart1移植到usart2上,功能没有实现,呵呵,只能换个思路了,毕竟usart1是现成的东西。
STM32支持三个串口,在usart1默认引脚被占用的情况下可以将usart1映射到PB0.6和PB0.7上。实现的方法如下:
1、打开GPIO的AFIO时钟,使用stm32功能模块之前,必须开时钟;
2、使能USART1的映射,
3、配置USART1映射后的GPIO(PB0.6,PB0.7)
具体实现:
1、在set_systm函数中添加如下模块,打开AFIO时钟,使能USART1映射
#ifdef USB_TO_KLINE_USART1_REMAP
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);
#endif
2、在set_systm函数中添加如下模块,配置USART1映射后的GPIO
#ifdef USB_TO_KLINE_USART1_REMAP
/* Configure USART1 Rx (PB.7) as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* Configure USART1 Tx (PB.06) as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
#else
/* Configure USART1 Rx (PA.10) as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure USART1 Tx (PA.09) as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
#endif
有奖活动 | |
---|---|
“我踩过的那些坑”主题活动——第002期 | |
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |