STM32F103调试DMA+PWM 实现占空比逐渐增加的软启效果

2024-09-07 08:36

本文主要是介绍STM32F103调试DMA+PWM 实现占空比逐渐增加的软启效果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实现效果:DMA+PWM 实现PWM输出时,从低电平到输出占空比逐渐增加再到保持高电平的效果,达到控制 MOS 功率开关软启的效果。

1.配置时钟

2.TIM 的 PWM 功能配置

选择、配置 TIM

注意:选择 TIM 支持 DMA 控制输出 PWM 功能的通道,有的TIM通道支持PWM 但不支持PWM注意选择。

PWM参数设置

Counter Period : 设置了 720 ,这样在72M 的主频下出来的PWM频率就是100K.

配置 TIM 通道对应的 DMA 通道,有的TIM通道不支持DMA.

3.生成工程代码

代码输出配置

生成代码

4.实现功能

//一些PWM操作的库函数,在这里做个记录	
//HAL_TIM_Base_Start( &htim4 );
//HAL_TIM_PWM_Start( &htim4, TIM_CHANNEL_2);      //启动PWM通道
//HAL_TIM_PWM_Stop(&htim4,TIM_CHANNEL_2);         //停止PWM通道 //HAL_TIM_PWM_Start_DMA(&htim2, TIM_CHANNEL_2, pwm_data1, 720);  //DMA输出开启
//HAL_TIM_PWM_Stop_DMA(&htim4,TIM_CHANNEL_2);     //DMA输出关闭//__HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_2,0);  //设置输出占空比,设置为 0  时输出低电平,设置值超过配置的 Counter Period 时输出高电平。//PWM软启的数据  
uint32_t pwm_data1[720] = {0};//PWM定时器初始化,PWM数据初始化
void pwm_ctrl_Init( void )
{MX_TIM4_Init(); //初始化定时器for(uint32_t i = 0;i < 720 ;i++) //初始化软启数据,根据需求自定义{pwm_data1[i] = i*3 +30;if(pwm_data1[i] > 719){pwm_data1[i] = 730;}}//启动DMA控制输出PWM,输出数据从pwm_data1取,控制输出数量720个,到最后PWM会保持最后一个值的占空比输出。if(HAL_TIM_PWM_Start_DMA(&htim4, TIM_CHANNEL_2, pwm_data1, 720) != HAL_OK) {/* Starting Error */Error_Handler();}
}/*** @brief This function handles DMA1 channel4 global interrupt.*/
void DMA1_Channel4_IRQHandler(void)
{/* USER CODE BEGIN DMA1_Channel4_IRQn 0 *//* USER CODE END DMA1_Channel4_IRQn 0 */HAL_DMA_IRQHandler(&hdma_tim4_ch2);/* USER CODE BEGIN DMA1_Channel4_IRQn 1 *//* USER CODE END DMA1_Channel4_IRQn 1 */
}//PWM 输出完成回调函数,DMA控制输出,按指定好的占空比序列输出完后,PWM并不会停止,但会进入这个中断,这里可以做一些需要的控制。
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{extern TIM_HandleTypeDef htim2;extern TIM_HandleTypeDef htim3;extern TIM_HandleTypeDef htim4;//HAL_TIM_PWM_Stop(&htim4,TIM_CHANNEL_2);//HAL_TIM_PWM_Stop_DMA(&htim4,TIM_CHANNEL_2);
}

4.实现波形效果

这篇关于STM32F103调试DMA+PWM 实现占空比逐渐增加的软启效果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144582

相关文章

golang版本升级如何实现

《golang版本升级如何实现》:本文主要介绍golang版本升级如何实现问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录golanwww.chinasem.cng版本升级linux上golang版本升级删除golang旧版本安装golang最新版本总结gola

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分

MySQL 定时新增分区的实现示例

《MySQL定时新增分区的实现示例》本文主要介绍了通过存储过程和定时任务实现MySQL分区的自动创建,解决大数据量下手动维护的繁琐问题,具有一定的参考价值,感兴趣的可以了解一下... mysql创建好分区之后,有时候会需要自动创建分区。比如,一些表数据量非常大,有些数据是热点数据,按照日期分区MululbU

MySQL中查找重复值的实现

《MySQL中查找重复值的实现》查找重复值是一项常见需求,比如在数据清理、数据分析、数据质量检查等场景下,我们常常需要找出表中某列或多列的重复值,具有一定的参考价值,感兴趣的可以了解一下... 目录技术背景实现步骤方法一:使用GROUP BY和HAVING子句方法二:仅返回重复值方法三:返回完整记录方法四:

IDEA中新建/切换Git分支的实现步骤

《IDEA中新建/切换Git分支的实现步骤》本文主要介绍了IDEA中新建/切换Git分支的实现步骤,通过菜单创建新分支并选择是否切换,创建后在Git详情或右键Checkout中切换分支,感兴趣的可以了... 前提:项目已被Git托管1、点击上方栏Git->NewBrancjsh...2、输入新的分支的

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2