STM32学习笔记(六)--引脚重映射详解

STM32F103C8T6引脚定义:

在STM32微控制器中,外设引脚的复用功能(Alternate Function,AF)有时会出现冲突,例如当USART2_CTS和TIM2_CH1同时需要使用相同的引脚时。此时,可以通过引脚重映射功能(Remapping)来解决这个问题。

引脚重映射(Remapping)详解

引脚重映射是STM32提供的一种功能,用于改变外设信号的GPIO引脚,以避免引脚冲突。具体操作如下:

1. 查找引脚重映射表

在STM32的参考手册(Reference Manual)和数据手册(Datasheet)中,有详细的引脚定义表,包含默认复用功能和重定义(重映射)功能。

2. 重映射步骤

以下是一个将TIM2_CH1从PA0重映射到PA15的示例:

初始化外设时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // 使能AFIO时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 使能TIM2时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能GPIOA时钟

配置GPIO引脚

GPIO_InitTypeDef GPIO_InitStructure;

// 配置PA15为复用推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

重映射TIM2_CH1

// 使用AFIO来重映射TIM2_CH1到PA15
GPIO_PinRemapConfig(GPIO_FullRemap_TIM2, ENABLE);

配置定时器参数

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;

TIM_TimeBaseStructure.TIM_Period = 999;
TIM_TimeBaseStructure.TIM_Prescaler = 71;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 499;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM2, &TIM_OCInitStructure);

TIM_Cmd(TIM2, ENABLE);

配置USART2_CTS引脚

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // PA0配置为USART2_CTS
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);

注意事项

  1. 确认重映射功能支持:并非所有引脚都支持重映射,请参考具体型号的参考手册。
  2. 配置正确的AFIO寄存器:不同的引脚重映射配置需要修改不同的AFIO寄存器。
  3. 检查其他外设冲突:确保重映射后的引脚不会与其他已使用的外设产生新的冲突。

总得来说只需要注意如下代码即可,至于配置还是老一套。

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
    GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2, ENABLE);
//  下面这一行主要是观察该引脚的主功能是什么 如果是JTDI之类的加下面这句
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

7yewh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值