STM32CubeMX学习教程之五:PWM实现呼吸灯效果

发布者:Howard_Sun最新更新时间:2019-06-15 来源: eefocus关键字:STM32CubeMX  PWM  呼吸灯 手机看文章 扫描二维码
随时随地手机看文章

软件:


STM32CubeMX V4.25.0  


System Workbench V2.4


固件库版本:

STM32Cube FW_F1 V1.6.1


硬件:


OneNet 麒麟座V2.3


在STM32CubeMX中新建项目,选择正确的MCU型号



 


首先设置RCC和SYS,如下图



 


然后根据板子实际情况设置时钟(麒麟座外部晶振是12M,STM32F103x的最高主频是72M),如下图




设置PC7 管脚为TIM3_CH2, 即定时器TIM3的Channel2



然后设置TIM3的Channel2为PWM Generation CH2



 


从上一篇博文我们知道TIM3是挂在APB1总线上的,看时钟树我们知道APB1总线的Timer频率是72MHz。



配置TIM3参数,预分频系数设置为72-1, 自动重载值设置为1000-1,那么PWM频率为72,000,000/72/1000=1000Hz,即1KHz。由于LED是低电平点亮,所以我们把极性设置为low。



Project - setting ,ToolChain/IDE选择 SW4STM32



勾选这里



保存以后,点击任务栏的生成代码图标



生成完毕以后在弹出的对话框点击"Open Project", System Workbench自动打开Eclipse并导入和打开了项目。


在main.c中,先定义一个变量存储我们设置的占空比


  /* USER CODE BEGIN 1 */

uint16_t dutyCycle = 0;

  /* USER CODE END 1 */

然后使能TIM3的PWM Channel2 输出。


  /* USER CODE BEGIN 2 */

  HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);

  /* USER CODE END 2 */

然后在while(1)中改变dutyCycle的值


 /* USER CODE BEGIN WHILE */

  while (1)

  {

  while (dutyCycle < 1000)

  {

  dutyCycle ++;

  __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, dutyCycle);

//   TIM3->CCR2 = dutyCycle;

  HAL_Delay(1);

  }

  while (dutyCycle)

  {

  dutyCycle --;

  __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, dutyCycle);

//   TIM3->CCR2 = dutyCycle;

  HAL_Delay(1);

  }

  HAL_Delay(200);

  /* USER CODE END WHILE */

 


然后右键点击项目,选择Properties, Run-Debug Settings, 点击右侧的New,在弹出对话框中选择Ac6 STM32 Debugging。



然后任务栏上点击Run图,当然会报错的,原因请查看另一篇我的博客(https://blog.csdn.net/toopoo/article/details/79680323),所以需要右键点击  项目名Run.cfg ,给它改个名字,



 


然后右键点击项目树里面的项目名称,选择“Propeties”,然后在Run/Debug Settings-选择项目名-Edit-Main-C/C++Application那里点击“Search Project”,然后选择出现的默认的elf文件:



然后在Debugger-User Defined-Browse 那里选择你自己改名的配置文件:



然后右键点击那个新的cfg文件,选择"Open With - Text Editor", 进行如下更改:


source [find interface/stlink.cfg] 更改为 source [find interface/stlink-v2.cfg]


reset_config srst_only srst_nogate connect_assert_srst 这一行改为 reset_config none 


然后再Run一下,就可以了。


程序实现了呼吸灯效果。


注意 


TIM3->CCR2 = dutyCycle



__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, dutyCycle);


是等效的。

关键字:STM32CubeMX  PWM  呼吸灯 引用地址:STM32CubeMX学习教程之五:PWM实现呼吸灯效果

上一篇:STM32开发笔记19: STM32CubeMX中定时器的配置方法
下一篇:STM32串口USART用法的进阶(HAL库版本)

推荐阅读最新更新时间:2024-11-17 16:57

电流型PWM集成控制器UC3842/UC3843的隔离单端反
开关电源以其高效率、小体积等优点获得了广泛应用。传统的开关电源普遍采用电压型脉宽调制(PWM)技术,而近年电流型PWM技术得到了飞速发展。相比电压型PWM,电流型PWM具有更好的电压调整率和负载调整率,系统的稳定性和动态特性也得以明显改善,特别是其内在的限流能力和并联均流能力使控制电路变得简单可靠。   电流型PWM集成控制器已经产品化,极大推动了小功率开关电源的发展和应用,电流型PWM控制小功率电源已经取代电压型PWM控制小功率电源。Unitrode公司推出的 UC3842 系列控制芯片是电流型PWM控制器的典型代表。    DC/DC转换器 转换器是开关电源中最重要的组成部分之一,其有5种基本类型:单端正激式、
[电源管理]
电流型<font color='red'>PWM</font>集成控制器UC3842/UC3843的隔离单端反
AVR单片机相位修正PWM定时器0发生模式试验程序
/*AVR相位修正PWM定时器0发生模式*/ /*PWM波的产生机理是定时器0的TCNT0由0到255,在由255到0,不断地计数,当在0-255计数时TCNT0=OCR0时在OC0引脚上出现低电平,*/ /*当在255-0计数时TCNT0=OCR0时在OC0引脚上出现高电平,当由0加到255,再由255减到0时,产生溢出中断,可以再终端服务中修改OCR0的值,以改变占空比,比用引脚模拟要准确*/ /*另外值得说的是相位修正PWM很适合用在电机控制的场合,他比快速PWM慢,因此它的最大频率要比快速PWM低的多*/ /* 相位修正PWM实验 20110416 天津第四项目部宿舍 王均伟 */ #include iom16v.
[单片机]
stm32 PWM呼吸灯
使用定时器产生PWM输出,PWM就像是Arduino的~输出引脚,电压是可以控制的, PWM的原理:通过调节脉冲宽度来调节电压,它把时间拆成很多个时间点,通过控制时间点的开关,平均出来想要模拟的电压,官方一点就是:对外输出脉冲可调节的方波信号,信号的频率是由自动重装寄存器ARR的值决定,占空比是由比较寄存器CCR的值决定 stm32 的pwm模式根据计数器CNT的计数方式,可分为边沿对齐模式和中心对齐模式 PWM边沿对齐模式:当TIMx_CR1寄存器中的DIR位为低时执行递增计数,计数器CNT从0计数到自动重载值(TIMx_ARR寄存器的内容),然后重新从0开始计数并生成计数器上溢事件。 PWM中心对齐模式:在中心对齐模式
[单片机]
STM8L之timer2产生PWM - CSDN博客
一、简介 本文介绍STM8L系列如何使用timer2产生38K频率的PWM。 其中,本文使用的是timer2的第1通道(PB0)。 二、实验平台 编译软件:IAR for STM8 1.42.2 硬件平台:stm8l101f3p6开发板 仿真器:ST-LINK 库函数版本:STM8L_STMTouch_Lib_V1.1.0 三、版权声明 原文地址:http://blog.csdn.NET/feilusia 四、实验步骤 1、工程中添加自己写的定时器2的驱动 1)写一个驱动GUA_Timer2_PWM.c (存放在工程的USER文件夹中) //************
[单片机]
基于STM32CUBEMX驱动TOF模块VL53l0x(3)----驱动多个VL53L0X
概述 在本章中,我们将探讨如何同时驱动多个VL53L0X传感器进行距离测量。我们将介绍如何有效地管理多个传感器之间的通信和控制,以确保它们能够同时进行准确的距离测量。通过本章的学习,将能够了解如何利用多个VL53L0X传感器的优势,为应用程序提供更全面的环境感知能力。 视频教学 样品申请 源码下载 修改设备地址 VL53L0X使用I²C总线进行通信。默认情况下,VL53L0X的7位地址为0x29。然而,为了避免地址冲突并允许多个传感器共享相同的I2C总线,用户可以通过向寄存器I2C_SLAVE_DEVICE_ADDRESS(寄存器地址为0x8A)写入自定义的7位地址来修改传感器的地址。 修改后如下所示。 /
[单片机]
基于<font color='red'>STM32CUBEMX</font>驱动TOF模块VL53l0x(3)----驱动多个VL53L0X
PWM电流模式控制器【安森美】
    2010年3月9日 – 安森美半导体(ON Semiconductor)扩充了应用于家用电子产品的交流-直流 (AC-DC)电源方案阵容,推出NCP1234和NCP1236系列固定频率脉宽调制(PWM)电流模式控制器。这些方案针对膝上型/笔记本电脑、LCD显示器、打印机及家用消费电子产品的AC-DC适配器应用。         安森美半导体将在美国Applied Power Electronics Conference(APEC)的展台上展示针对连接至智能电网的应用及各种家用电子产品的多种高能效方案。现场将展示针对智能电表、家用办公及消费产品以及多种住宅和商业照明应用的LED照明方案的电源管理应用方案。     
[电源管理]
<font color='red'>PWM</font>电流模式控制器【安森美】
MAX15569 PWM控制器,串行I2C接口
MAX15569降压控制器由一个多相稳压器。多相CPU稳压器采用Maxim的独特的2相QuickTune-PWM常数“时间”的体系结构。两相CPU稳压器运行180°的相对于真正的交错式操作,最大限度地降低输入电容。 该设备的VR控制写入相应的数据转换成一个函数映射寄存器文件。输出电压的动态变化,快速通过2线I²C接口(时钟,数据),允许进行编程,以适应不同电压的开关稳压器。摆率控制器,可控制的电压转换和控制的软启动。该稳压器运行在一个独特的智能,低功耗的脉冲跳跃状态算法在整个负载范围内的效率和最佳的瞬态响应,相对于常见的脉冲跳跃的方法。 该设备包括多种故障保护功能:输出过压保护(OVP),欠压保护(UVP),和热保护。当这些故
[模拟电子]
MAX15569 <font color='red'>PWM</font>控制器,串行I2C接口
飞思卡尔XS128系列(二) PWM模块
为有别于其他讲解PWM模块的文章,本文不打算拿出大篇幅对PWM模块各个寄存器进行详细讲解,因为那些东西网上、书店到处都是。如果英语好的话,可以参考datasheet,762页的PDF文档,可惜了我那可怜的英文水平…… 本文将结合着实际智能小车的控制来写点东西,多写点控制策略上的东西。 如在寄存器方面有何疑问,都可以留言,我都尽力解答。 首先我电磁车上关于PWM的代码: //PWM.C void Steering_PWM_Init(void) { PWMCTL_CON67 = 1; //PWM通道67级联,B或SB作为时钟源 PWME_PWME7 = 0; PWMPRCLK_PCKB = 0x3; //
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved