TIM输出比较理论知识 —— PWM一. 常用库函数RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIMx, ENABLE); // 开启定时器时钟TIM_InternalClockConfig(TIMx); // 定时器内部时钟配置TIM_TimeBaseInit(TIMx, TIM_TimeBaseInitStruct); // 时基单元初始化决定 PWM 频率TIM_ARRPreloadConfig(TIMx, ENABLE); // ARR 预装载使能让 PWM 更稳定必加TIM_Cmd(TIMx, ENABLE); // 使能定时器启动 PWMvoid TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);TIM_OCStructInit(TIM_OCInitStruct); // 输出比较结构体初始化防止野值规范写法TIM_OCxInit(TIMx, TIM_OCInitStruct); // 通道 x PWM 初始化TIM_SetComparex(TIMx, Compare); // 设置通道 x CCR占空比TIM_OCxPreloadConfig(TIMx, TIM_OCPreload_Enable); // 通道 x CCR 预装载使能二. 初始化void PWM_Init(void) { /*开启时钟*/ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /*GPIO初始化*/ GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); /*配置时钟源*/ TIM_InternalClockConfig(TIM2); /*时基单元初始化*/ TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_TimeBaseInitStructure.TIM_ClockDivision TIM_CKD_DIV1; TIM_TimeBaseInitStructure.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInitStructure.TIM_Period 100 - 1; TIM_TimeBaseInitStructure.TIM_Prescaler 720 - 1; TIM_TimeBaseInitStructure.TIM_RepetitionCounter 0; TIM_TimeBaseInit(TIM2, TIM_TimeBaseInitStructure); TIM_ARRPreloadConfig(TIM2, ENABLE); // ARR预装载使能 /*输出比较初始化*/ TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCStructInit(TIM_OCInitStructure); TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse 0; TIM_OC1Init(TIM2, TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); // CCR预装载使能 /*TIM使能*/ TIM_Cmd(TIM2, ENABLE); }分频可选择范围为 0 - 65535 (16位)计数器的时钟频率 分频的输入频率 / (PSC 1)模式可选TIM_CounterMode_Up //定时器向上计数模式TIM_CounterMode_Down //定时器向下计数模式TIM_CounterMode_CenterAligned1 //定时器向中心对齐模式TIM_CounterMode_CenterAligned2TIM_CounterMode_CenterAligned3重装载值可选范围为 0 - 65535定时器的时钟频率为1MHz, 因此每 1us 计数一次, 那么要 1ms 中断一次需要计数 1000 次TIM_ClockDivisionTIM_CKD_DIV1 // 用于数字滤波通用定时器 PWM 直接写 DIV1配置比较模式 TIM_OCModeTIM_OCMode_PWM1有效电平设置 TIM_OCPolarityHigh输出有效电平为高电平Low输出有效电平为低电平初始占空比 TIM_Pulse三. 函数用法TIM_SetCompare1TIM_SetComparex(TIMx, Compare); // 设置通道 x CCR占空比参数1: TIM1参数2: 数字0 - 100作用: 改变占空比
TIM输出比较代码部分(PWM)
发布时间:2026/5/29 3:08:17
TIM输出比较理论知识 —— PWM一. 常用库函数RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIMx, ENABLE); // 开启定时器时钟TIM_InternalClockConfig(TIMx); // 定时器内部时钟配置TIM_TimeBaseInit(TIMx, TIM_TimeBaseInitStruct); // 时基单元初始化决定 PWM 频率TIM_ARRPreloadConfig(TIMx, ENABLE); // ARR 预装载使能让 PWM 更稳定必加TIM_Cmd(TIMx, ENABLE); // 使能定时器启动 PWMvoid TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);TIM_OCStructInit(TIM_OCInitStruct); // 输出比较结构体初始化防止野值规范写法TIM_OCxInit(TIMx, TIM_OCInitStruct); // 通道 x PWM 初始化TIM_SetComparex(TIMx, Compare); // 设置通道 x CCR占空比TIM_OCxPreloadConfig(TIMx, TIM_OCPreload_Enable); // 通道 x CCR 预装载使能二. 初始化void PWM_Init(void) { /*开启时钟*/ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /*GPIO初始化*/ GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); /*配置时钟源*/ TIM_InternalClockConfig(TIM2); /*时基单元初始化*/ TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_TimeBaseInitStructure.TIM_ClockDivision TIM_CKD_DIV1; TIM_TimeBaseInitStructure.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInitStructure.TIM_Period 100 - 1; TIM_TimeBaseInitStructure.TIM_Prescaler 720 - 1; TIM_TimeBaseInitStructure.TIM_RepetitionCounter 0; TIM_TimeBaseInit(TIM2, TIM_TimeBaseInitStructure); TIM_ARRPreloadConfig(TIM2, ENABLE); // ARR预装载使能 /*输出比较初始化*/ TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCStructInit(TIM_OCInitStructure); TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse 0; TIM_OC1Init(TIM2, TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); // CCR预装载使能 /*TIM使能*/ TIM_Cmd(TIM2, ENABLE); }分频可选择范围为 0 - 65535 (16位)计数器的时钟频率 分频的输入频率 / (PSC 1)模式可选TIM_CounterMode_Up //定时器向上计数模式TIM_CounterMode_Down //定时器向下计数模式TIM_CounterMode_CenterAligned1 //定时器向中心对齐模式TIM_CounterMode_CenterAligned2TIM_CounterMode_CenterAligned3重装载值可选范围为 0 - 65535定时器的时钟频率为1MHz, 因此每 1us 计数一次, 那么要 1ms 中断一次需要计数 1000 次TIM_ClockDivisionTIM_CKD_DIV1 // 用于数字滤波通用定时器 PWM 直接写 DIV1配置比较模式 TIM_OCModeTIM_OCMode_PWM1有效电平设置 TIM_OCPolarityHigh输出有效电平为高电平Low输出有效电平为低电平初始占空比 TIM_Pulse三. 函数用法TIM_SetCompare1TIM_SetComparex(TIMx, Compare); // 设置通道 x CCR占空比参数1: TIM1参数2: 数字0 - 100作用: 改变占空比