STM32端口复用和重映射

端口复用

STM32有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。
简单易懂的说,就是某些普通的外设引脚也可以用来其它功能。比如说串口1 的发送接收引脚是PA9,PA10,当我们把PA9,PA10不用作普通的GPIO口,而用做复用功能串口1的发送接收引脚的时候,叫端口复用。

重映射

我们知道每个内置外设都有若干个输入输出引脚,一般这些引脚的输出脚位都是固定不变的,为了让设计工程师可以更好地安排引脚的走向和功能,在STM32中引入了外设引脚重映射的概念,即一个外设的引脚除了具有默认的脚位外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其它的脚位。

STM32的端口重映射有三种模式:

  • 没有重映射
  • 部分重映射
  • 完全重映射

以TIM3为例,没有重映射就是使用复用端口引脚,如下图,没有重映射4个输出通道引脚分别是在PA6、PA7、PB0、PB1;部分重映射,从字面上理解就是只改变一部分输出或输入引脚的端口,部分重映射后,TIM3的通道1和通道2从原先的PA6、PA7引脚改变到PB4、PB5了,而通道3、通道4还是在PB0、PB1保持不变;完全重映射,引脚全部改变了,通道1到通道4从原先的PA6、PA7、PB0、PB1变为PC6~PC9。

重映射编程步骤

  1. 打开重映射时钟和重映射后的I/O口引脚时钟;
  2. I/O口重映射开启;
  3. 配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置。

还是以TIM3为例

/*TIM3默认4个通道:PA6,PA7,PB0,PB1*/
/*部分重映射到:   PB4,PB5,PB0,PB1*/
/*完全重映射到:   PC6,PC7,PC8,PC9*/

/**/
void TIM_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    
    //开启时钟  
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);    /*开启TIM3时钟*/
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);    /*开启重映射时钟*/
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);   /*开启GPIOB时钟*/
    
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);/*JTAG-DP 禁用 + SW-DP 使能,没有这一句PB4不能用*/
    GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3 , ENABLE);    /*TIM3部分重映射*/
    
    //配置引脚
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /* 复用推挽输出模式 */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5;    
    
    GPIO_Init(GPIOB,&GPIO_InitStructure);   /*初始化*/ 
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容