【蓝桥杯嵌入式】四、各种外设驱动(六)生成PWM波——呼吸灯

温馨提示:本文不会重复之前提到的内容,如需查看,请参考附录

【蓝桥杯嵌入式】附录

目录

理论知识:

一、需求分析

1、需要的外设资源分析:

 2、外设具体分析:

3、软件分析:

二、软件配置

三、代码编写

分析:

四、运行测试

总结:


理论知识:

        由于本文章针对蓝桥杯比赛,所以原理性的部分不再赘述。当然,了解原理会更好,不过不了解原理也可以操作,只要按照套路来就行。原理可参考以下文章:

STM32—PWM原理及配置(入门详解)_stm32pwm配置详解-CSDN博客

        要生成一个确定的PWM波,需要三个元素,周期、占空比、极性。只要会设置和改变这三个量,就可以玩转PWM波输出。

        我们可以动态改变脉宽值的方式来改变占空比

使用函数:

__HAL_TIM_SET_COMPARE(设备句柄地址,通道号,脉宽值);

        下面要求编写一个呼吸灯例程,由于板载的LED是由外部芯片控制的,所以这里用PA6引脚来控制外加的LED(如果你会玩蜂鸣器的话,可以它用来代替LED)

一、需求分析

1、需要的外设资源分析:

  • 选择TIM16作为PWM输出定时器,TIM16只有一个通道——PA6。
  • 外加材料:面包板一块、双向公头杜邦线两根、LED一颗、300~500R的电阻一个。

LED负极连接PA6,正极接3.3V电源,连线如下图所示:

 2、外设具体分析:

查看原理图,和手册

        由手册可知:

  • 通过设置 Counter Period   来设置周期
  • 通过设置 Pulse                   来设置占空比
  • 通过设置 CH Polarity         来设置极性

3、软件分析:

要求分析:使LED灯产生呼吸灯的效果。

功能分析:需要不断改变PWM的占空比让占空比进入先增大再减小然后再增大的循环,这一操作可以在PWM的中断回调函数里实现。

二、软件配置

建PWM_Out_Demo”的项目。

时钟配置:将APB1设置为50MHz

按照分析配置TIM16:

  • 设置 Prescaler              为49999
  • 设置 Counter Period    为199
  • 设置 Pulse                    为5
  • 设置 CH Polarity          为High

结果如图:

然后打开TIM16全局中断,设置优先级为1。

生成项目文件后,打开MDK。

三、代码编写

分析:

进入主循环之前以中断方式启动TIM16。

使用函数:

HAL_TIM_Base_Start_IT(设备句柄地址);

然后以中断方式启动生成PWM。

使用函数:

HAL_TIM_PWM_Start_IT(设备句柄地址,通道号);

 代码如下:

main.c

  /* USER CODE BEGIN WHILE */HAL_TIM_Base_Start_IT(&htim16);HAL_TIM_PWM_Start_IT(&htim16,TIM_CHANNEL_1);while (1){/* USER CODE END WHILE */

然后找到中断回调函数,在stm32g4xx_it.c文件用Find中搜索:TIM16

找到TIM16的中断服务函数:

void TIM1_UP_TIM16_IRQHandler(void)

全局定义一个表示脉宽的变量,初始化为50。定义一个标志位。

在中断服务函数中实现:利用连续中断的特性(相当于循化),让脉宽递增到195然后递减到5,之后再递增到195,每次都改变PWM波脉宽的值从而改变占空比。

代码如下:

stm32g4xx_it.c

/*** @brief This function handles TIM1 update interrupt and TIM16 global interrupt.*/
void TIM1_UP_TIM16_IRQHandler(void)
{/* USER CODE BEGIN TIM1_UP_TIM16_IRQn 0 *//* USER CODE END TIM1_UP_TIM16_IRQn 0 */HAL_TIM_IRQHandler(&htim16);/* USER CODE BEGIN TIM1_UP_TIM16_IRQn 1 */if(flag){pulseWidth++;if(pulseWidth >= 195)flag=0;}else{pulseWidth--;if(pulseWidth <= 5)flag=1;}__HAL_TIM_SET_COMPARE(&htim16,TIM_CHANNEL_1,pulseWidth);/* USER CODE END TIM1_UP_TIM16_IRQn 1 */
}

四、运行测试

编译、下载。

运行结果:这个"呼吸的比较急促",不过你可以尝试改变参数让它缓慢一些。

PWM呼吸灯实验现象

总结:

PWM输出很简单,只需要记住CubeMX中3个具体量的设置,以及使用三个函数就可以玩转PWM输出。

配置:

  •  通过设置 Counter Period   来设置周期
  • 通过设置 Pulse                   来设置占空比
  • 通过设置 CH Polarity         来设置极性

函数:

 在进入主循环之前以中断方式启动TIM16。

使用函数:

HAL_TIM_Base_Start_IT(设备句柄地址);

然后以中断方式启动生成PWM。

使用函数:

HAL_TIM_PWM_Start_IT(设备句柄地址,通道号);

 我们可以动态改变脉宽值的方式来改变占空比

使用函数:

__HAL_TIM_SET_COMPARE(设备句柄地址,通道号,脉宽值);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/543111.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows11企业版安装WSL2和Ubuntu发布版(避坑)

背景 win10企业版升级win11企业版后&#xff0c;安装WSL2&#xff0c;最后安装WSL的Ubuntu发布版&#xff0c;尝试网上各种方法&#xff0c;还是出现文章第三节所写的问题&#xff0c;差点被这问题搞放弃了&#xff0c;全网少有针对这个问题的答案&#xff0c;有也不顶用&…

开源漏扫工具:DependencyCheck

开源漏扫工具&#xff1a;DependencyCheck Dependency-Check 是 OWASP&#xff08;Open Web Application Security Project&#xff09;的一个实用开源程序&#xff0c;用于识别项目依赖项并检查是否存在任何已知的&#xff0c;公开披露的漏洞。 DependencyCheck是一个开源的…

景联文科技:提供通用多模态数据,助力AI多模态领域实现飞跃式发展

回顾2023年&#xff0c;以ChatGPT为代表的通用人工智能大模型在全球范围内掀起了新一轮人工智能产业发展浪潮&#xff0c;我国人工智能大模型市场呈现百“模”争鸣、日新月异的迅猛发展态势。 根据大模型之家、钛媒体数据&#xff0c;2023年中国大模型市场规模达到147亿人民币&…

《古滇传说水龙吟》反派敖诀

2024年2月28日&#xff0c;演员李亚云参演新剧古滇传说原创系列剧第一部《水龙吟》在浙江横店影视城开机拍摄。该剧由中共昆明市西山区委宣传部、石林县委宣传部、昆明滇池国家旅游度假区管委会文旅投促局、云南民族电影制片厂、云南卫视、昆明影视拍摄服务中心支持&#xff0c…

如何在CasaOS系统玩客云中安装内网穿透工具实现远程访问内网主机下载资源

文章目录 1. CasaOS系统介绍2. 内网穿透安装3. 创建远程连接公网地址4. 创建固定公网地址远程访问 2月底&#xff0c;玩客云APP正式停止运营&#xff0c;不再提供上传、云添加功能。3月初&#xff0c;有用户进行了测试&#xff0c;局域网内的各种服务还能继续使用&#xff0c;但…

T01.springboot入门

1.第一步&#xff1a; 2.第二步&#xff1a; 添加后&#xff0c;再启动一下

Python-GIS分析之地理数据空间聚类

地理空间数据聚类是空间分析和地理信息系统(GIS)领域的一项关键技术。这种方法对于理解地理数据固有的空间模式和结构、促进城市规划、环境管理、交通和公共卫生等各个领域的决策过程至关重要。本文探讨了地理空间数据聚类的概念、方法、应用、挑战和未来方向。 当模式出现…

cdn尝试(减少打包体积)

如果是vue-cli创造的工程&#xff0c;在build后面加上 --report&#xff0c;就会在dist文件夹下出现report.html用于分析打包后个文件的体积 也可以使用插件&#xff1a; webpack使用webpack-bundle-analyzer进行分析&#xff1b; vite使用rollup-plugin-visualizer进行分析…

QT下跨平台库实现及移植经验分享

最近在移植公司一个QT桌面软件到android上&#xff0c;有一些公司自定义的库&#xff0c;用了很多windows的api&#xff0c;移植过程很是曲折&#xff0c;在此有一些感悟分享一下~ 一.自编写跨平台库 1.有时候为了程序给第三方用需要编译一些qt封装库&#xff0c;并可能跨平台…

Mac上使用M1或M2芯片的设备安装Node.js时遇到一些问题,比如卡顿或性能问题

对于Mac上使用M1或M2芯片的设备可能会遇到在安装Node.js时遇到一些问题&#xff0c;比如卡顿或性能问题。这可能是因为某些软件包或工具在M1或M2芯片上的兼容性不佳。为了解决这个问题&#xff0c;您可以尝试以下方法&#xff1a; 1. 使用Rosetta模式 对于一些尚未适配M1或M2…

Python 蜂窝六边形分析

在本文中,我们将使用 Wildland Fire Interagency Geospatial Services (WFIGS) 2022 数据集,并仅关注新墨西哥州的 Hermits Peak / Calf Canyon 火灾。这场野火是该州历史上规模最大的野火,烧毁面积超过 30 万英亩。大火位于陶斯和圣达菲之间,烧毁了桑格雷德克里斯托山脉的…

元分析_学习笔记

目录 1.元分析的基本作用 2.元分析的步骤 2.1文献检索 2.2数据编录 2.3数据分析 3.元分析的基本模型 4.元分析拓展趋势 5.元分析注意事项 6.总结 1.元分析的基本作用 传统作用&#xff1a;针对某一具体的相关关系&#xff0c;对来自不同样本的研究结果进行整合&#xf…