【外设通道选择指南】定时器TIMx不同通道详解:TIMx_CHx与TIMx_CHxN差异解析,重映射功能通俗解读
如图为STM32高级定时器TIM1的四个不同通道(通用定时器和基础定时器同理)
在配置定时器时,我可以随便使用GPIO口吗?
TIMx_CHx不同通道有什么区别?TIMx_CHx与TIMx_CHxN?
_CHx
字样(函数名或注释除外)这么多通道,如何选择?

USART1_CK
通道使用,那么我就需要将TIM1_CH1换一个GPIO引脚以使用该定时器功能通道,参考《参考手册》的上表,我们可以使用完全重映射将TIM1_CH1重新连接在PE9这一GPIO引脚上,进而使用定时器TIM1的功能。(部分重映射与完全重映射的区别 见下文)GPIO_PinRemapConfig()
函数,虽然函数名带有GPIO字样,但函数配置时,通常以对应外设为主体对象(啥意思?可参考下面部分重映射与完全重映射部分帮助理解)注意
部分重映射与完全重映射?
定时器TIM3_CH2配置重映射参考代码
该函数使用TIM3_CH2用于配置PWM,并将输出管脚从默认引脚映射到了新的引脚PB5上(代码部分参考引用自普中科技)
void TIM3_CH2_PWM_Init(u16 per,u16 psc)
{
//定义结构体变量,用于下面的初始化配置
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/* 开启时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
/* 配置GPIO的模式和IO口 */
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);//改变指定管脚的映射
//时基配置
TIM_TimeBaseInitStructure.TIM_Period=per; //自动装载值
TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //分频系数
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //设置向上计数模式
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
//输出比较配置
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
TIM_OC2Init(TIM3,&TIM_OCInitStructure); //输出比较通道2初始化
//使能
TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable); //使能TIMx在 CCR2 上的预装载寄存器
TIM_ARRPreloadConfig(TIM3,ENABLE);//使能预装载寄存器
TIM_Cmd(TIM3,ENABLE); //使能定时器
}
作者:SUSE_SmartCar