【蓝桥杯嵌入式】PWM的设置,原理图解析与代码实现(第十一届省赛为例)——STM32

简介: 【蓝桥杯嵌入式】PWM的设置,原理图解析与代码实现(第十一届省赛为例)——STM32

目录


题目

设置STM32CubeMX

手搓代码

开启PWM函数

PWM占空比可调函数


正文


题目


第十一届省赛关于PWM的题目要求如下:

要求我们用PA6和PA7输出两种不同频率的占空比可调节的脉冲信号,频率的设置是由定时器中的预分频系数和重装载值来决定的


设置STM32CubeMX


   首先我们要给PA6和PA7引脚选一个定时器,下图中我们可以看到PA6由四个定时器可选,分别是TIM16_CH1,TIM1_BKIN,TIM3_CH1,TIM8_BKIN,但是我们只能选择后缀为CH1的定时器,至于为什么可以点此了解。因为我们在前几篇文章中给按键设置的定时器为TIM3_CH1,所以在这里我们给PA6选择TIM16_CH1,同样的,我们给PA7选择TIM17_CH1。

543.png

引脚设置完成后,我们转到左边来,如下图,先给定时器使能,选择通道Output Compare CH1,

       TIM16是PA6的定时器,要求是100Hz,时钟原本的频率是80MHz,计算出分频系数和重装载值后填入即可(如何计算上面有相关链接)。

如何往下翻,找到Pulse,设置占空比,为20.这样PA6的脉冲信号解设置好啦,PA7同理设置即可。


手搓代码


开启PWM函数


以下是打开PWM的函数,第一个参数是定时器,第二个参数是通道。

  HAL_TIM_PWM_Start(&htim16,TIM_CHANNEL_1);   //开启PWM
  HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1); 


PWM占空比可调函数


这里使用按键来对PWM的占空比进行改变,每按一次占空比加10,等于100时跳转回10。


PWM的占空比改变的实现函数如下,第一个参数是定时器,第二个参数是通道,第三个参数是占空比的比例,如10就是10%的高电平。


_HAL_TIM_SetCompare(&htim16,TIM_CHANNEL_1,pa6_duty);

以下就是完整的改变PWM的完整函数

if(key[1].key_flag == 1)
{
    pa6_duty+=10;
  if(pa6_duty > 90)
  {
    pa6_duty=10;
  }
  _HAL_TIM_SetCompare(&htim16,TIM_CHANNEL_1,pa6_duty);    //设置占空比pa6_duty
  key[1].key_flag = 0;
}
if(key[2].key_flag == 1)
{
  pa7_duty+=10;
  if(pa7_duty > 90)
  {
    pa7_duty=10;
  }
  __HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,pa7_duty);   //设置占空比pa6_duty
  key[2].key_flag = 0;
}
目录
打赏
0
0
0
0
161
分享
相关文章
嵌入式C++、STM32、MySQL、GPS、InfluxDB和MQTT协议数据可视化
通过本文的介绍,我们详细讲解了如何结合嵌入式C++、STM32、MySQL、GPS、InfluxDB和MQTT协议,实现数据的采集、传输、存储和可视化。这种架构在物联网项目中非常常见,可以有效地处理和展示实时数据。希望本文能帮助您更好地理解和应用这些技术,构建高效、可靠的数据处理和可视化系统。
267 82
CRUD操作实战:从理论到代码实现的全面解析
【7月更文挑战第4天】在软件开发领域,CRUD代表了数据管理的四个基本操作:创建(Create)、读取(Read)、更新(Update)和删除(Delete)。这四个操作构成了大多数应用程序数据交互的核心。本文将深入讲解CRUD概念,并通过一个简单的代码示例,展示如何在实际项目中实现这些操作。我们将使用Python语言结合SQLite数据库来演示,因为它们的轻量级特性和易用性非常适合教学目的。
991 2
深入解析xLSTM:LSTM架构的演进及PyTorch代码实现详解
xLSTM的新闻大家可能前几天都已经看过了,原作者提出更强的xLSTM,可以将LSTM扩展到数十亿参数规模,我们今天就来将其与原始的lstm进行一个详细的对比,然后再使用Pytorch实现一个简单的xLSTM。
464 2
【嵌入式软件工程师面经】STM32单片机
【嵌入式软件工程师面经】STM32单片机
366 1
数据结构学习记录——堆的删除(思路图解、代码实现、逐段解析)
数据结构学习记录——堆的删除(思路图解、代码实现、逐段解析)
153 1
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
397 29
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

推荐镜像

更多
  • DNS
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等