这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » STM32的USART1引脚重映射

共1条 1/1 1 跳转至

STM32的USART1引脚重映射

助工
2014-11-14 00:42:43     打赏
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


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]