当前位置: 首页 > article >正文

STM32-PWM驱动呼吸灯——HAL库

(根据B站up主keysking的STM32教程视频的笔记)

【STM32】动画讲解轻松学会STM32的PWM_哔哩哔哩_bilibili

什么是PWM?

        PWM,全称为脉冲宽度调制(Pulse Width Modulation),是一种调制技术,用于控制模拟电路中的电源输出。

        它通过调节信号的占空比(即高电平持续的时间与整个周期的比率)来控制电流或电压,从而实现对设备的控制。

        PWM 的优点是可以通过数字信号实现对模拟输出的精确控制,并且由于它在开关之间切换,效率较高。(以下是三种占空比不同的PWM波形)

        因为数字信号只有高低电平两种状态,只要不是太强的干扰,都不会影响对电平的判断,因此数字信号传输数据的速度就更快更稳定。

PWM的几个关键参数为:

  • 频率(Frequency):即高低电平切换的速度,切换的速度越快则频率越高,1000Hz的PWM波意味着1秒钟有1000个脉冲

  • 占空比(Duty Cycle):即每个周期内,高电平所占的宽度

    • 例如图中 50% duty cycle,即高/低电平的时间各占50%

    • 图中的75% duty cycle高电平占75%,低电平占25%

    • 图中的25% duty cycle高电平占25%,低电平占75%;

操作步骤:

将SYS设置为Serial Wire模式

 然后设置高速时钟源为晶振

 

 在时钟设置里,将HCLK设置为72MHz,然后回车,让其自动设置

 

 接着将TIM3设置为内部时钟,通道1设置为PWM模式(其中,定时器TIM3的通道1为PA6口)

 

 

将PSC设置为71、ARR设置为99——则此时PWM的频率为  Freq=72MHz/(72*100)=10000Hz

,此时PWM的周期为0.1ms

点击保存生成代码。

然后,启动PWM—使用代码HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);

因为PWM的占空比由比较寄存器决定,因此,我们调用设置比较寄存器的函数

   __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,i);

HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  for(int i=0;i<100;i++)
	  {
		  __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,i);
		  HAL_Delay(20);
	  }
	  for(int i=99;i>=0;i--)
	  	  {
	  		  __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,i);
	  		  HAL_Delay(20);
	  	  }
    
}

 


http://www.kler.cn/a/286826.html

相关文章:

  • SpringBoot集成Flink-CDC,实现对数据库数据的监听
  • OpenEuler学习笔记(九):安装 OpenEuler后配置和优化
  • 重新理解tech lead角色
  • 人工智能之深度学习_[4]-神经网络入门
  • vue3 通用svg组件
  • 将UI界面交给第三方库
  • 详解JavaScript
  • springboot配置两个MongoDB
  • 手搓 Java hashmap
  • vscode解决运行程序无法从控制台输入问题
  • Unity(2022.3.41LTS) - 视频
  • 深度解读并发安全集合的原理及源码
  • net_device数据结构简单总结
  • Day 1 : 数据结构
  • nginx配置ssl证书
  • JSON处理库 -- Fastjson
  • 堆《数据结构》
  • 【Unity小工具】Image组件宽度、高度自适应
  • 【大数据算法】时间亚线性算法之:串相等判定算法。
  • Python 全栈系列266 Kafka服务的Docker搭建
  • ctfshow之web58~web71
  • Android --- transaction.commitAllowingStateLoss();和transcation.commit 有什么区别
  • J.U.C Review - volatile / synchronized / 锁 深入剖析
  • Java网络编程概述
  • 【maven】阿里云和apache仓库配置
  • Java 流过滤器是否足够智能,可以忽略有序流中不必要的项目吗?