概述
Stm32 使用定时器实现PWM可调脉宽和脉冲的一种简单易行方法
https://download.csdn.net/download/u010923814/12678378
平台:cubeMX
芯片:stm32f103
1.时钟配置 工作频率48M
2. 定时器选择 TIM3
3. TIM3 配置
4. 程序封装
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
if (htim == &htim3)
{
/* Configure the OPM Mode */
htim->Instance->CR1 |= TIM_CR1_OPM;
}
}/**
* @brief
*
* @param Hz PWM频率
* @param duty PWM占空比 0~100
* @param pul PWM脉冲数
*
* @retval
*/
void Drv8825_PWM(int Hz, int duty, int pul)
{
int arr;
assert_param(duty < 100);
arr = 1000000 / Hz;
htim3.Instance->ARR = arr - 1;
htim3.Instance->CCR1 = arr * (100 - duty) / 100;
htim3.Instance->CR1 &= ~TIM_CR1_OPM;
HAL_TIM_PWM_Start_DMA(&htim3, TIM_CHANNEL_1, &htim3.Instance->CCR1, pul);
}
5.使用方式
//频率1k,10%脉宽,10个脉冲。
Drv8825_PWM(1000, 50, 10);//程序不是阻塞!重复调用记得延时
经过测试10k以下频率都是ok,如果要高点,需要在DMA完成中断调用以下语句:
htim->Instance->CR1 |= TIM_CR1_OPM;
HAL_TIM_PWM_PulseFinishedCallback(...)可以去掉。
最后
以上就是体贴大地为你收集整理的Stm32 使用定时器实现PWM可调脉宽和脉冲的一种简单易行方法的全部内容,希望文章能够帮你解决Stm32 使用定时器实现PWM可调脉宽和脉冲的一种简单易行方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复