STM32G0开发笔记:用PWM来实现LED呼吸灯效果

发布者:as8849402最新更新时间:2023-08-23 来源: elecfans关键字:STM32G0  PWM  LED  呼吸灯 手机看文章 扫描二维码
随时随地手机看文章

使用Platformio平台的libopencm3开发框架来开发STM32G0,下面使用PWM来实现LED呼吸灯效果。


1 新建项目

在PIO主页新建项目pwm,框架选择libopencm3,开发板选择 MonkeyPi_STM32_G070RB;

新建完成后在src目录新建主程序文件main.c;

然后更改项目文件platformio.ini的烧写和调试方式:

1upload_protocol = cmsis-dap

2debug_tool = cmsis-dap

2 PWM配置

GPIO设置为复用PWM输出

1/**

 2 * @brief gpio config 

 3 * 

 4 */

 5static void gpio_setup(void)

 6{

 7    rcc_periph_clock_enable(RCC_GPIOC);

 8

 9    gpio_mode_setup(GPIOC,

10                    GPIO_MODE_AF,

11                    GPIO_PUPD_NONE,

12                    GPIO12);

13

14    gpio_set_output_options(GPIOC,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO12);

15

16    //TIM14_CH1 , AF2

17    gpio_set_af(GPIOC,GPIO_AF2,GPIO12);

18}


PWM配置

1/**

 2 * @brief pwm channel setup

 3 * 

 4 */

 5static void pwm_setup(void)

 6{

 7    rcc_periph_clock_enable(RCC_TIM14);

 8

 9    /* Timer global mode:

10     * - No divider

11     * - Alignment edge

12     * - Direction up

13     */

14    timer_set_mode(TIM14, TIM_CR1_CKD_CK_INT, TIM_CR1_CMS_EDGE, TIM_CR1_DIR_UP);

15

16    /*

17     * APB1 PRE = 1, TIMPCLK = PCLK

18     * APB1 PRE != 1, TIMPCLK = PCLK * 2

19     */

20    timer_set_prescaler(TIM14, (rcc_apb1_frequency/100000-1)); //100KHz

21

22    /* Disable preload. */

23    timer_disable_preload(TIM14);

24    timer_continuous_mode(TIM14);

25

26    /* Timer Period */

27    timer_set_period(TIM14, 20-1);  /* 100kHz /20 = 5 KHz */

28

29    /* Set the initual output compare value for OC1. */

30    timer_set_oc_mode(TIM14, TIM_OC1, TIM_OCM_PWM1);

31    timer_set_oc_value(TIM14, TIM_OC1, 20*0.3); //duty = 0.3

32

33    /* Enable output */

34    timer_enable_oc_output(TIM14, TIM_OC1);

35    timer_enable_counter(TIM14);

36}


先配置定时器的预分频和周期,这里设置到周期为5KHz,可以参考定时器章节的说明;



然后使用timer_set_oc_value 设置占空比,占空比根据定时器周期计算,比如这里设置为30%占空比;

3 呼吸灯效果

实现呼吸灯效果就是更改占空比,让其从0-100变化在从100-0变化即可;


1int duty = 0;

 2

 3while(1){

 4

 5        //from 0 - 100

 6        for(duty=0; duty <= 100; duty++){

 7            duty = duty + 1;

 8            timer_set_oc_value(TIM14,TIM_OC1, 20*duty/100);

 9

10            //delay some time

11            for(int i=0; i<600000; i++){

12                __asm__("nop");

13            }

14        }

15

16        //from 100-0

17        for(duty=100;duty>=0; duty--){

18            duty = duty - 1;

19            timer_set_oc_value(TIM14,TIM_OC1, 20*duty/100);

20

21            //delay some time

22            for(int i=0; i<600000; i++){

23                __asm__("nop");

24            }

25

26        }

27

28}


通过 timer_set_oc_value 改变输出占空比,然后延时一定时间即可达到呼吸灯的效果。


关键字:STM32G0  PWM  LED  呼吸灯 引用地址:STM32G0开发笔记:用PWM来实现LED呼吸灯效果

上一篇:STM32G0开发笔记:EEPROM M24C02的使用方法
下一篇:STM32L051上使用RT-Threa (三、I2C通讯)

推荐阅读最新更新时间:2024-11-01 23:55

LED照明助力绿色机场起航
中国民用航空发展第十二个五年规划(2011-2015年)中,民用机场将达到230个,中西部新建机场83个,改扩建机场101个。而绿色照明是实现绿色机场的有效手段,绿色和智能化也是今后机场发展方向之一。从香港赤腊角机场、瑞典的Arlanda机场、英国曼彻斯特机场、新西兰的基督城机场、新加坡樟宜机场等,我们看到一系列的著名机场都进行照明改造。     LED 照明助力绿色机场起航   机场是一个巨大的能耗单位,建设绿色机场是时代发展的必然选择。而在诸多的节能手段和措施中,应用绿色高效照明成了机场节能降耗、发挥最大效应的一个重大突破口。民航干部管理学院教授田保华如是说。据了解,目前大部分机场使用的主要白炽灯丝灯泡,白炽灯标准工作寿命
[电源管理]
基于MAX16834大功率高亮HB LED驱动方案
基于MAX16834大功率高亮HB LED驱动方案 Maxim 公司的MAX16834是电流模式大功率高亮度LED(HB LED)驱动器,可组成升压,升-降压,SEPIC和高边降压拓扑.除了用开关PWM控制器驱动N沟功率MOSFET外,还能驱动N沟PWM调光开关. MAX16834输入电压从4.75V 到28V,3000:1 PWM调光/模拟调光,工作频率从100kHz 到1MHz可编程,主要用在单串LED LCD背光,汽车前后照明,精密系统RGB LED光源,DC/DC升压/升-降压转换器等.本文介绍MAX16834主要特性,方框图,多种应用电路以及MAX16834评估板主要特性,电路图,材料清单和PCB元件布局图.
[电源管理]
基于MAX16834大功率高亮HB <font color='red'>LED</font>驱动方案
双降压式DC/DC转换器LM2717-ADJ的设计
LM2717-ADJ是国半公司推出的产品,是一种由两个PWM降压式转换器组成的双输出、电压可调的IC。该器件主要特点:第1路降压式转换器的内部开关管的开关电流可达 2.2A(R DS(ON) =0.16Ω);第2路降压式转换器的内部开关管的开关电流可达? 3.2A(RDS(ON)=0.16Ω);输入电压范围4~20V;输出电压可由两外设电阻设定,最低电压为1.267V;开关频率可设定在300~600kHz范围内;内部有输入欠压保护及过热保护;24引脚TSSOP封装;工作温度范围-40℃~+125℃。 该器件组成的双电源主要应用于TFT-LCD显示器、手持式电子装置、便携式电子产品及膝上计算机等产品。 引脚排列与功能 LM2
[模拟电子]
stm32定时器的pwm1模式和pwm2模式的区别
在参考手册中,对两种模式的描述为 pwm1: 向上计数时,一旦TIMx_CNT TIMx_CCR1时通道1为有效电平,否则为 无效电平;在向下计数时,一旦TIMx_CNT TIMx_CCR1时通道1为无效电平(OC1REF=0),否 则为有效电平(OC1REF=1)。 pwm2: 在向上计数时,一旦TIMx_CNT TIMx_CCR1时通道1为无效电平,否则为 有效电平;在向下计数时,一旦TIMx_CNT TIMx_CCR1时通道1为有效电平,否则为无效电 平。 这里的一个关键点就是通道有效电平和输出电平有什么关系呢? 通道有效电平与OCxREF有关系,而经过我的实验研究和资料查找,发现这个OCxREF和CCX
[单片机]
士兰微电子1A大功率迟滞型LED驱动近日亮相
    士兰微电子近期推出了6~36V输入,1A大功率迟滞型LED驱动芯片SD42525。该芯片为降压、恆流型LED驱动电路,具有很高的转换效率,适合于MR16等多种LED照明领域。     SD42525采用滞环模式控制,具有快速的瞬态响应,只需极少的外部元器件,不需要另外的环路补偿设计,降低了应用成本。滞环控制模式的LED驱动电路会由于内部比较器和整个系统的延时,从而造成输出电流随输入电压和LED负载个数变化而变化,输入电压在6V~36V范围内变化时,输出电流会有10%~15%的变化。SD42525采用士兰微电子的输出电流补偿专利技术,可以减小输出电流随输入电压的变化,使得输出电流变化范围控制在±3%以内。滞环控制模式的佔
[电源管理]
采用NCL30000的单段式CrM TRIAC调光LED驱动器设计
为了促进节能,世界各地的政府机构或规范组织制定了不同LED照明规范,主要体现在对功率因数(PF)的要求方面。如欧盟的国际电工联盟(IEC)规定了功率大于25 W照明应用的总谐波失真性能,某些地区的其它国际标准也适用这规定。   另外,美国能源部制定及发布了针对固态照明灯具的“能源之星”标准。这项自愿性标准包含针对常见住宅和商业照明灯具(如嵌灯、橱柜灯和台灯)的系列要求,涵盖最低流明输出、总体光效、可靠性目标、光色温及一系列其它关键系统级要求。值得注意的是,这个标准中并不直接包含电源能效要求,但包含功率因数要求,即不论是何种功率等级,住宅应用要求的PF大于0.7,商业应用要求的PF大于0.9,而集成LED灯光的要求是PF
[电源管理]
采用NCL30000的单段式CrM TRIAC调光<font color='red'>LED</font>驱动器设计
针对不同LED照明应用的电源解决方案
  与传统的光源相比,发光二极管(LED)具备众多的优点,如工作电压低,能效高,很小巧并产生定向光。它们能够提供极宽广的色彩以及白光,不产生红外(IR)或紫外(UV)辐射,而且由于它们是固态器件,在机械上很强固,并且不含汞,在恰当设计和使用时能够具有超过5万小时的工作寿命,远长于标准白炽灯的1千小时寿命。此外,它们还完全可调光。这些优点使得LED的应用越来越广泛,如今已拥有众多的应用市场,如建筑景观照明、交通信号灯、显示屏、零售、中小尺寸液晶显示屏(LCD)背光、汽车和太阳能等,并在街道照明、住宅照明乃至中大尺寸LCD背光方面拥有越来越大的发展空间。   高亮度LED对于照明设计、全球能源节省和创新产品具有重大意义,对催生固态照
[安防电子]
针对不同<font color='red'>LED</font>照明应用的电源解决方案
LED市场高速增长汽车应用潜力不容小觑
  Strategies Unlimited近日发表了高亮度LED的市场分析报告。该报告指出,LED市场在2007年~2011年将以每年17.6%的速度扩大,2006年仅为41亿8000万美元的市场规模预计将在2011年扩大至94亿美元。便携式DVD影碟机和车载导航仪使用的5~10英寸液晶面板用背照灯光源、笔记本电脑使用的10~17英寸液晶面板用背照灯光源、汽车前照灯光源使用的白色LED都将成为市场扩大的推动力。2008~2009年,市场扩大的速度虽然迟缓,但在此之后,新推动力的效果将会趋于显著。另一方面,此前高亮度LED市场的主角——手机的地位将会逐年下降。   报告认为,高亮度LED市场将再次进入成长状态。这是因为近来市场规
[焦点新闻]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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