STM32关于定时器输出多路PWM波的持续跟进___day2

紧接上文,这里要修改PWM波的频率,则需要修改定时器的重装载值。
可以使用
TIM3_PWM_Init(arr,18);
函数来修改装载值arr 。
修改完频率后
TIM_SetCompare2(TIM3,seg[1]); //设置通道2比较值
下面展示一些 内联代码片

// An highlighted block
extern arr;
static u16 seg[4]={200,400,600,800};  //保存各路占空比
 int main(void)  //多个定时器同一通道实现多路PWM(同频率,不同占空比)
 {		
     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    delay_init();
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 	 //设置NVIC中断分组2
 	TIM3_PWM_Init(arr,18);	 //18分频。设置频率
    TIM_SetCompare1(TIM3,seg[0]);  //设置定时器3通道的比较值
     TIM_SetCompare2(TIM3,seg[1]);  
     TIM_SetCompare3(TIM3,seg[2]);  
     TIM_SetCompare4(TIM3,seg[3]); 
    delay_ms(30);  //延迟30ms
      arr=1199;//修改定时器预装载值来修改频率
    TIM3_PWM_Init(arr,18);
     TIM_SetCompare3(TIM3,seg[2]); 
   	while(1){
     ;
    }	 
 }

此处在之前的基础上,增加了延迟后设定定时器装载值来修改频率。修改后重新设定比较值,从而能看到占空比。
这样一来,知道了PWM波的频率和占空比修改就可以调制出自己想要的多路PWM波。呼吸灯可以视为根据PWM高电平的占空比不断发生变化,从而在一个时间周期内灯的量度也在不断变化形成的。

注意:1、此处的arr变量定义在timer.c文件中。也可以定义在其他用得到的地方,比如串口中断文件中,通过串口数据来修改频率。同样的占空比变量数组也是如此。
2、有些地方会用到波形互补的PWM,这点由定时器PWM功能结构体成员TIM_OCPolarity决定,在ST官方库中的定义如下:

			  uint16_t TIM_OCPolarity;    /*!< Specifies the output polarity.
                                   This parameter can be a value of @ref TIM_Output_Compare_Polarity */

此成员设定PWM输出通道的极性,有两种取值 high或者low。high表示在一个计数周期中小于比较值的范围内输出高电平,大于比较值的范围输出低电平。而low刚好相反,可以用这一点来调制出具有互补的PWM波。
运行效果如下:
在这里插入图片描述
第三路和第四路PWM波形互补。

改天做定时器的输入捕获。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值