李小川希比的个人空间 https://passport2.21ic.com/?1270694 [收藏] [复制] [RSS]

日志

2017-11-13

已有 475 次阅读2017-11-13 13:30 |个人分类:电小二的征程之STM32|系统分类:单片机

PWM概述
一些定时器支持PWM输出功能,通过定时器设定定时周期,还有一个定时中断服务函数配合使用

TIMX_ARR确定频率(周期)、TIMX_CCRX寄存器确定占空比 :这两个寄存器最关键,控制pwm输出,
因为在计数器等于ARR和CCR都会使信号反转。稍微理一下就很清楚了,若要使输出的PWM占空比
变化,需要将CCR值变化(在中断服务程序中更改CCR值)。

pwm设置关键点!也是设置PWM通道的关键点在芯片引脚功能上有标注。
主要文件和函数
文件:
bsp_led.c  //led初始化,看PWM效果
bsp_pwm.c //pwm、定时器、优先级配置
函数定义:
LED_Config()
PWM_Config()  
VCIN_Configure()

void TIM3_Pwm_Init(void)
{
 TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStructure;
 TIM_OCInitTypeDef   TIM_OCInitStructure;
 
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
 
 TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
 TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
 TIM_TimeBaseInitStructure.TIM_Period = 255;
 TIM_TimeBaseInitStructure.TIM_Prescaler = 1999;              //预分频为什么是1999,分频后是多少?
 TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
  
 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure);
 
//PWMÉèÖÃ
 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
 //TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set;
 //TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low ;  //  指互补极性(及电平的有效性)
 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;//TIM_OCPolarity_High; //比较后输出的电平的有效性(TIM_OCPolarity_High:高电平有效)
 //TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; //通道3互补输出使能
 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;    //通道3的输出使能
 TIM_OCInitStructure.TIM_Pulse = 0; 设置占空比
 
 TIM_OC3Init(TIM3, &TIM_OCInitStructure);  //使能通道3 对应PB0 观察引脚图
 
 
 TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);      //使能预装载
 TIM_ARRPreloadConfig(TIM3, ENABLE);              //使能TIM3重载寄存器ARR
 
   /* TIM3 enable counter */
  TIM_Cmd(TIM3, ENABLE);                             //使能定时器3
 
 TIM_ITConfig(TIM3,TIM_IT_Update, ENABLE);          //使能update中断
 
 
 NVIC_Config_PWM();
}

在STM32F103中,只有TIM1和TIM8有互补性输出的设定,一定要注意。
有些定时器可以实现互补输出
就是你在引脚复用里看到的TIM_CH1和TIM_CH1N,
后者是前者的互补输出引脚,它的极性、相位、初相都可以设置



路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)