void TIM3_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);
时间: 2023-06-23 18:09:48 浏览: 231
这是一个用于初始化 TIM3 的 PWM 输出的函数。具体来说,它会配置 GPIOB 的 Pin 5 为复用功能,并将其配置为 TIM3_CH2 的输出,同时设置 ARR 和 PSC 为传入的参数值。代码中使用了 HAL 库的相关函数。
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE):使能 TIM3 的时钟。
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE):使能 GPIOB 和 AFIO 的时钟。
- GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE):将 TIM3_CH2 映射到 GPIOB Pin 5 上。
- GPIO_InitStructure:GPIO 初始化结构体,配置 Pin 5 为复用功能,推挽输出模式,速度为 50MHz。
- TIM_TimeBaseStructure:TIM 基本定时器初始化结构体,设置 ARR 和 PSC 的值。
- TIM_OCInitStructure:TIM 输出比较初始化结构体,设置 PWM 模式、输出极性、占空比等参数。
相关问题
void TIM4_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_Initstructure; TIM_TimeBaseInitTypeDef TIM_TimeBasestructure; TIM_ocInitTypeDef TIM_OCInitStructure; //TIM4/GPIOA/AFIO CLK enable RCC_APB1PeriphclockCmd (RCC_APBlPeriph_TIM4,ENABLE); Rcc_APB2PeriphclockCmd(Rcc_APB2Periph_GPIOB , ENABLE); Rcc_APB2PeriphClockCmd (RCC_APB2Periph_AFIO ,ENABLE); //set PB6(TIM4_CHl) PB7(TIM4_CH2) as AF output mode for PRM output GPIO_Initstructure.GPIO_Pin = GPIO_Pin_6 l GPIO_Pin_7; GPIO_Initstructure.GPIO_Mode = GPIo_Mode_AF_PP; GPIO_Initstructure.GPIo_Speed = GPIo_Speed_5OMHz; GPIO_Init(GPIOB,&GPIO_Initstructure); //TIM4 base config TIM_TimeBasestructure.TIM_Period = arr; TIM_TimeBasestructure.TIM_Prescaler = psc; TIM_TimeBasestructure.TIM_C1ockDivision = 0; TIM_TimeBasestructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit (TIM4,&TIM_TimeBasestructure) ; //PWM of TIM4_CHl config TIM_OCInitstructure.TIM_OCMode = TIM_OcMode_PWM1; TIM_OCInitstructure.TIM_Outputstate = TIM_Outputstate_Enable; TIM_OcInitstructure.TIM_Pulse = 0; TIM_OCInitstructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init (TIM4,&TIM_OCInitStructure) ; TIM_OClpreloadConfig(TIM4,TIM_OCPreload_Enable); // PWM of TIM4_CH2 config TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWMl; TIM_OCInitstructure.TIM_Outputstate = TIM_Outputstate_Enable; TIM_OCInitStructure.TIM_Pulse =0; TIM_OCInitstructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC2Init (TIM4,&TIM_OCInitStructure) ; TIM_OC2PreloadConfig(TIM4,TIM_OCPreload_Enable) ; //TIM4 preload enable TIM_ARRPreloadconfig (TIM4,ENABLE); //MOE enable for advanced TIMl or TIM8 TIM_Ctr1PWMOutputs (TIM4,ENABLE); //TIM4 enable TIM_Cmd (TIM4,ENABLE);
这是一段STM32的代码,用于初始化TIM4定时器和PWM输出。其中,通过GPIO_InitTypeDef结构体初始化GPIOB的PB6和PB7引脚,将它们设置为复用推挽输出模式(AF_PP)。通过TIM_TimeBaseInitTypeDef结构体初始化TIM4的时基参数,包括周期(arr)、预分频器(psc)、时钟分频等。接下来通过TIM_ocInitTypeDef结构体初始化TIM4的PWM输出参数,包括输出模式(TIM_OcMode_PWM1)、输出使能(TIM_Outputstate_Enable)、PWM脉宽(TIM_Pulse)、极性(TIM_OCPolarity_High)等。最后通过TIM_Cmd函数使能TIM4定时器,并通过TIM_Ctr1PWMOutputs函数使能定时器的PWM输出。
void TIM4_PWM_Init(u32 arr,u32 psc) { //此部分需手动修改IO口设置 GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM12,ENABLE); //TIM14时钟使能 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); //使能PORTF时钟 GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_TIM12); //GPIOF9复用为定时器12 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; //GPIOF9 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉 GPIO_Init(GPIOB,&GPIO_InitStructure); //初始化PF9 TIM_TimeBaseStructure.TIM_Prescaler=psc; //定时器分频 TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式 TIM_TimeBaseStructure.TIM_Period=arr; //自动重装载值 TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseInit(TIM12,&TIM_TimeBaseStructure);//初始化定时器14 //初始化TIM14 Channel1 PWM模式 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式 PWM输出高电平1模式靠左还是2模式靠右 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性 High输出高电平 Low 反转 比较结果是输出高电平还是低电平 TIM_OC1Init(TIM12, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM12 OC1 TIM_OC1PreloadConfig(TIM12, TIM_OCPreload_Enable); //使能TIM12在CCR1上的预装载寄存器 TIM_ARRPreloadConfig(TIM12,ENABLE);//ARPE使能 TIM_Cmd(TIM12, ENABLE); //使能TIM14 什么意思 }
这段代码是用来初始化定时器 TIM12 的 PWM 模式,并控制 GPIOB 的 Pin14 输出 PWM 信号。其中,arr 和 psc 分别表示自动重装载寄存器的值和定时器分频系数。GPIOB 的 Pin14 被设置为复用模式,并与 TIM12 的第一个通道相连。TIM12 被设置为向上计数模式,并使用 PWM1 模式输出高电平。最后,使能 TIM12 和预装载寄存器。
阅读全文