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

发布时间:2023-08-23  

使用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 改变输出占空比,然后延时一定时间即可达到呼吸灯的效果。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    控制风扇的速度或灯的强度。在这种情况下,使用了PWM 技术,所以在这里我们将学习如何使用 Arduino 生成的 PWM 来控制 Arduino 的交流风扇速度。 在这个项目中,我们将演示使用 TRIAC ......
    人员可以使用一个完整系统(原型板和开源软件)来模拟超声设备子系统的操作,从而降低超声设备制造商的开发成本并加快上市时间。 基于ArduinoTxDAC®评估板和开源Mbed软件 图1.支持Mbed......
    、片内flash和ram很大,flash有448KB,ram有520KB。而模块上直接挂了一个4MBflash。大的不像话! 3、速度快!虽然外接晶体的频率只有40MHZ,但通......
    Due的比较,后者是ARM Cortex-M3。我在视频中使用了此模型:带驱动器TB6600Nema 23步进电机和Arduino Due,以及SpeedTest:Arduinos-ESP32......
    器向接收器端发送两个值:使用超声波传感器测量的距离和电位计ADC值(0 到 4096),该值映射为(0 到 100)之间的数字。ArduinoRF 接收器接收这两个值并以无线方式在16x2 LCD 显示......
    值存储到传感器值变量中,接下来我们将传感器值映射到 0 -255 因为 atmega PWM 定时器只有 8 位,接下来我们使用 ArduinoanalogWrite()函数设置PWM 信号。最后,我们......
    = 1V):   相反,80%的占空比将产生4V的输出(80%5V = 4V):   提高PWM频率也会降低输出的抖动:   请注意,这反过来意味着可以使用相对较低的电阻和/或电容值,因此......
    基于STM32F103C8T6+L298N通过PWM控制直流电机;01 前言 原来做的差速小车是基于Arduino控制的,感觉有些简单,也有些基础,Arduino方便简单的同时,可操......
    Arduino 推出新款开发板 GIGA R1 WiFi,提供 76 个 GPI;IT之家 3 月 6 日消息, 家族又添新成员,其新推出的 GIGA R1 WiFi 开发板基于双核 Arm 架构......
    构成储能电路,二极管 D1 用于防止电流返回 PWM 信号源,电阻 560 欧姆用于限制通过电路的电流。在这里,我使用我的Arduino 生成了可变频率PWM 波形,如果你有一个函数发生器,你可......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>