CubeMx环境下实现STM32的IO口重映射(以PWM输出通道重映射为例)

本文介绍了如何通过STM32CubeMX来实现TIM3通道2的PWM输出从映射,将默认的PA7管脚重映射到PB5,从而控制PB5端口的LED实现呼吸灯效果。通过 CubeMX 的配置,可以方便地查看并设置TIM3_CH2可用的管脚选项。

1 引言

通过改变PWM占空比实现呼吸灯的效果,硬件上LED连接在PB5端口上,而TIM3的CH2通道的默认IO是PA7,故要使用管脚的从映射。

 

 2 实现方法

TIM3通道2的PWM输出被使能后,我们可以发现默认是PA7管脚被使能,而我们要使用的是PB5管脚,故需要进行管脚的重映射。通过使用STM32CubeMx,我们可以很轻松的实现管脚的重映射。

 点击PB5,选择TIM3_CH2,我们便实现了TIM3通道2的管脚从映射。

 同时我们在搜索框输入TIM3_CH2,我们可以查看那些管脚可以配置为TIM3_CH2的输出。

STM32PWM 输出配置中,尽管 LED 灯通常连接到某个特定的 GPIO 引脚,但 PWM 输出IO 口并不一定需要直接连接到 LED 的 IO 口即可点亮小灯。这主要归因于 STM32 的复用功能(Alternate Function)和灵活的 GPIO 配置机制。 首先,STM32 的 GPIO 引脚可以配置为多种工作模式,其中包括通用输出、输入模式,以及复用功能模式。在复用功能模式下,GPIO 引脚可以作为外设功能的输入或输出通道使用。如,定时器的 PWM 输出功能可以通过配置特定的 GPIO 引脚来实现,即使这些引脚并非默认用于 LED 控制的 IO 口[^2]。 其次,为了将某个 GPIO 引脚配置为 PWM 输出功能,需要进行一系列步骤,包括使能 AFIO(Alternate Function I/O)时钟并设置重映射(Remap)功能。通过 `GPIO_PinRemapConfig()` 函数,可以重新映射定时器的输出通道到不同的 GPIO 引脚上,从而允许将 PWM 输出信号从一个非默认的 GPIO 引脚发出[^2]。 此外,PWM 输出引脚能够驱动 LED 灯的原因还与其输出能力相关。STM32 的 GPIO 引脚通常能够提供一定的电流输出能力,在适当配置下可以直接驱动 LED 灯。因此,即使 LED 被连接到一个原本用于 PWM 输出而非默认 LED 控制的 GPIO 引脚上,只要该引脚支持 PWM 功能并正确配置,LED 依然可以被点亮[^3]。 最后,需要注意的是,虽然 PWM 输出引脚可以用来点亮 LED,但在实际应用中,为了保护 GPIO 引脚免受过载损害,通常建议在 LED 与 GPIO 引脚之间串联一个限流电阻。这样不仅可以确保 LED 正常发光,还能有效延长 STM32 和 LED 的使用寿命[^2]。 ### 示代码 以下是一个简单的示代码片段,展示了如何配置 STM32 的 GPIO 引脚以输出 PWM 信号,并点亮连接到该引脚上的 LED: ```c // 假设使用 TIM3 的通道 2 输出 PWM,且 PB5 被重映射为 TIM3 的 PWM 输出引脚 void PWM_Init(void) { // 使能相关时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); // 配置 GPIOB 的 PB5 引脚为复用推挽输出 GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStruct); // 重映射 TIM3 的通道 2 到 PB5 GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); // 配置 TIM3 的基本参数 TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct; TIM_TimeBaseStruct.TIM_Period = 999; // ARR 值 TIM_TimeBaseStruct.TIM_Prescaler = 71; // PSC 值 TIM_TimeBaseStruct.TIM_ClockDivision = 0; TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStruct); // 配置 TIM3 的通道 2 为 PWM 模式 TIM_OCInitTypeDef TIM_OCStruct; TIM_OCStruct.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCStruct.TIM_OutputState = TIM_OutputState_Enable; TIM_OCStruct.TIM_Pulse = 500; // CCRx 值 TIM_OCStruct.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC2Init(TIM3, &TIM_OCStruct); TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); // 启动 TIM3 TIM_Cmd(TIM3, ENABLE); } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值