TIM_Cmd(TIM3, ENABLE); /*使能TIM3:使能控制寄存器CR的第0位:CEN, counter enable*/
关于配置CCMR1、CCER寄存器
关于配置CCMR1、CCER寄存器
CCMR1:
CCER:
TIM_OC1Init
函数对应于输入通道的初始化,其实就是操作
CCMR1
、
CCER
等寄存器:
void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)
{
uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0;
TIMx->CCER &= (uint16_t)~TIM_CCER_CC1E;/* 关闭通道1: 复位CC1E位 */
tmpccer = TIMx->CCER;/* 获取 TIMx CCER 寄存器的值 */
tmpcr2 = TIMx->CR2; /* 获取 TIMx CR2 寄存器的值 */
tmpccmrx = TIMx->CCMR1;/* 获取TIMx CCMR1 寄存器的值 */
tmpccmrx &= (uint16_t)~TIM_CCMR1_OC1M; /* 复位输出比较模式OC1M位 */
tmpccmrx &= (uint16_t)~TIM_CCMR1_CC1S;
tmpccmrx |= TIM_OCInitStruct->TIM_OCMode;/* 设置为输出比较模式 */
tmpccer &= (uint16_t)~TIM_CCER_CC1P; /* 复位输出极性CC1P */
tmpccer |= TIM_OCInitStruct->TIM_OCPolarity; /* 设置输出极性 */
tmpccer |= TIM_OCInitStruct->TIM_OutputState; /* 设置输出状态 */
if((TIMx == TIM1) || (TIMx == TIM8)) /*高级定时器的特殊配置*/
{
//省略。。。
}
TIMx->CR2 = tmpcr2; /* 写数据到TIMx的CR2寄存器 */
TIMx->CCMR1 = tmpccmrx; /* 写数据到TIMx的CCMR1寄存器 */
TIMx->CCR1 = TIM_OCInitStruct->TIM_Pulse;/* 设置CCR1寄存器 */
TIMx->CCER = tmpccer; /* 写数据到TIMx的CCER寄存器 */
}
4.2 动态改变占空比
占空比是通过修改CCR寄存器的值进行修改的,如果定时器初始化时只设置了1次CCR的值,那么会输出恒定占空比的PWM波;如果在定时器运行的时候,动态修改CCR的值,则可以实现PWM占空比的动态调整。
如下程序,实现了每隔10ms对占空比进行一次修改,每次将高电平计数值增加5,当增大道500(占空比100%)时,再逐渐减小到0(占空比0%),不断循环。
u16 led0pwmval=0;
u8 dir=1;
TIM3_PWM_Init(500-1,84-1); //84M/84=1Mhz的计数频率,重装载值500,所以PWM频率为 1M/500=2Khz.
while(1) //实现比较值从0-500递增,到500后从500-0递减,循环
{
delay_ms(10);
if(dir)
{
led0pwmval+=5; //dir==1 led0pwmval递增
}
else
{
led0pwmval-=5; //dir==0 led0pwmval递减
}
if(led0pwmval>500)
{
dir=0; //led0pwmval到达500后,方向为递减
}
if(led0pwmval==0)
{
dir=1; //led0pwmval递减到0后,方向改为递增
}
TIM_SetCompare1(TIM3,led0pwmval); /*CCR 修改比较值(占空比)*/
}
5 测试效果
将程序下载到板子,我用的一块STM32F407的板,A6引脚上接了一个LED灯,实际效果的LED逐渐变凉,在逐渐变暗,依次循环。
再通过逻辑分析仪来查看实际的输出波形,如下图,测得的pwm周期0.5ms(频率2kHz),与软件中设定的一致。
在某一时刻,脉宽55us。
在另一时刻,脉宽0.365ms,即实现了PWM脉宽的动态调整。
上一篇:使用FSMC接口来驱动8080接口LCD屏的问题
下一篇:低功率马达控制板STEVAL-IHM036V1的性能特性及应用电路分析
推荐阅读最新更新时间:2024-11-13 19:28
设计资源 培训 开发板 精华推荐
- DC1338A,使用 LTC2990 I2C 温度电压和电流监视器的演示板
- LT1074,负升压转换器
- CMWX1ZZABZ-078 射频收发器 - 应用电路
- 基于涂鸦BT5S制作的雨水传感器
- DC2143A-A,使用 2x LTM4677 降压模块和数字 PSM 的演示板,4.5V = VIN = 20V,Vout = 0.5V 至 1.8V @ 72A
- VM801P43A-PL,FT801 显示系统的嵌入式视频引擎 Plus 开发模块,ATMEG328P at 5V/16MHz,Micro-SD 插座,4.3 - 480x272 分辨率 TFT LCD,带电容式触摸屏,珍珠壳
- AD8601WARTZ-RL 作为 DAC 输出缓冲器驱动重负载的典型应用
- AM2LS-1515SH30-NZ 15V 2瓦DC-DC转换器的典型应用
- LT1117CM-3.3 用于改善纹波抑制的低压差正稳压器的典型应用
- 使用 MaxLinear, Inc 的 SPX2950 的参考设计