基于CubeMX-STM32F103RCT6_单通道单路PWM输出
简介
脉冲宽度调制模式可以产生一个由TIMx_ARR(自动重装载寄存器)寄存器确定频率、由TIMx_CCRx(捕获、比较寄存器)寄存器确定占空比的信号。 在TIMx_CCMRx(捕获、比较模式寄存器)寄存器中的OCxM位写入’110’(PWM模式1)或’111’(PWM模式2),能够独立地设置每个OCx输出通道产生一路PWM。必须通过设置TIMx_CCMRx寄存器的OCxPE位使能相应的预装载寄存器,最后还要设置TIMx_CR1寄存器的ARPE位, (在向上计数或中心对称模式中)使能自动重装载的预装载寄存器。仅当发生一个更新事件的时候,预装载寄存器才能被传送到影子寄存器,因此在计数器开始计数之前,必须通过设置TIMx_EGR寄存器中的UG位来初始化所有的寄存器。 OCx的极性可以通过软件在TIMx_CCER寄存器中的CCxP位设置,它可以设置为高电平有效或低电平有效。 OCx的输出使能通过(TIMx_CCER和TIMx_BDTR寄存器中)CCxE、 CCxNE、MOE、 OSSI和OSSR位的组合控制。详见TIMx_CCER寄存器的描述。 在PWM模式(模式1或模式2)下, TIMx_CNT和TIMx_CCRx始终在进行比较, (依据计数器的计数方向)以确定是否符合TIMx_CCRx≤TIMx_CNT或者TIMx_CNT≤TIMx_CCRx。根据TIMx_CR1寄存器中CMS位的状态,定时器能够产生边沿对齐的PWM信号或中央对齐的PWM信号。
CubeMX-TIM配置详情
功能模式 | 选项 |
---|
从模式 | 1、禁用 2、外部时钟模式1 3、复位模式 4、门模式 5、触发模式 | 触发源 | 1、禁用 2、ITR0 3、ITR1 4、ITR2 5、ITR3 6、ETR1 7、TI1_ED 8、TI1FP1 9、TI2FP2 | 时钟源 | 1、禁用 2、内部时钟1 3、ETR2 | 通道1 | 1、禁用 2、输入捕获直接模式 3、输入捕获简介模式 4、输入捕获有TRC触发 5、输出比较无输出 6、输出比较通道1输出 7、输出比较通道1互补通道输出 8、输出比较通道1和通道1互补通道输出 9、PWM产生无输出 10、PWM产生通道1输出 11、PWM产生通道1互补通道输出 12、PWM产生通道1和通道1互补通道输出 13、通道1强制输出 14、通道1互补通道强制输出 15、通道1和通道1互补通道强制输出 | 通道2 | 同通道1 | 通道3 | 同通道1 | 通道4 | 1、禁用 2、输入捕获直接模式 3、输入捕获简介模式 4、输入捕获有TRC触发 5、输出比较无输出 6、输出比较通道4输出 7、PWM产生无输出 8、PWM产生通道4输出 9、通道4强制输出
| 联合通道 | 1、禁用 2、编码器模式 3、PWM输入在通道1 4、PWM输入在通道2 5、异或和霍尔传感器模式 | 刹车输入功能 | | 使用ETR作为清除源 | | 异或功能 | | 单脉冲模式 | |
单通道单路 PWM 输出配置
在通道1选择 PWM generation CH1
参数设置
按如下截图配置:
主配置 | 配置选项 | 参数 |
---|
计数器设置 | | | | 预分频 | | | 计数模式 | 1、向上 2、向下 3、中心对齐模式1 4、中心对齐模式2 4、中心对齐模式3 | | 计数周期(自动重装载寄存器) | — | | 内部时钟分配 | 1、0分频 2、2分频 3、4分频 | | 重复计数器 | | | 自动重装载预加载 | | 触发输出模式 | | | | 主从模式 | 1、禁用(触发输入效果不延迟) 2、使能(主从同步启动延迟触发) | | 触发事件选择 | 1、复位(TIMx_EGR寄存器的UG位) 2、使能(CNT_EN) 3、更新事件 4、比较脉冲(OC1) 5、输出比较(OC1REF) 6、输出比较(OC2REF) 7、输出比较(OC3REF) 8、输出比较(OC4REF) | 刹车和死区管理-刹车配置 | | | | 刹车状态 | 1、禁用 2、使能 | | 刹车极性 | 1、极性高 2、极性低 | 刹车和死区管理-输出配置 | | | | 自动输出状态 | 1、禁用 2、使能 | | 运行模式的关闭状态选择(OSSR) | 1、禁用 2、使能 | | 空闲模式下的关闭状态选择(OSSI) | 1、禁用 2、使能 | | 锁定配置 | 1、关闭 2、锁定等级1 3、锁定等级2 4、锁定等级3 | PWM产生通道1 | | | | 模式 | 1、模式1 2、模式2 | | 脉冲宽度 | — | | 输出比较预加载 | 1、禁用 2、使能 | | 快速模式 | 1、禁用 2、使能 | | 通道极性 | 1、极性高 2、极性低 | | 通道空闲状态 | 1、置位 2、复位 |
时钟配置
工程管理
最后点击界面右上角的 CREATE CODE(生产代码)
修改代码
在tim.c文件中的MX_TIM1_init() 函数中添加
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
实现呼吸灯
在主函数中添加如下代码:
注意添加变量 uint32_t PluseWidch
__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_1,PluseWidch);
while(PluseWidch<999)
{
PluseWidch++;
__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_1,PluseWidch);
HAL_Delay(1);
}
while(PluseWidch)
{
PluseWidch--;
__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_1,PluseWidch);
HAL_Delay(1);
}
|