衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32G0開發(fā)筆記:用PWM來實現(xiàn)LED呼吸燈效果

CHANBAEK ? 來源:電子技術(shù)攻城獅 ? 作者:MakerInChina.cn ? 2023-01-16 15:15 ? 次閱讀

使用Platformio平臺的libopencm3開發(fā)框架來開發(fā)STM32G0,下面使用PWM來實現(xiàn)LED呼吸燈效果。

1 新建項目

  • PIO主頁新建項目pwm,框架選擇libopencm3,開發(fā)板選擇 MonkeyPi_STM32_G070RB;
  • 新建完成后在src目錄新建主程序文件main.c;
  • 然后更改項目文件platformio.ini的燒寫和調(diào)試方式:
1upload_protocol = cmsis-dap
2debug_tool = cmsis-dap

2 PWM配置

  • GPIO設(shè)置為復(fù)用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}

先配置定時器的預(yù)分頻和周期,這里設(shè)置到周期為5KHz,可以參考定時器章節(jié)的說明;

然后使用timer_set_oc_value 設(shè)置占空比,占空比根據(jù)定時器周期計算,比如這里設(shè)置為30%占空比;

  • 將程序燒寫到開發(fā)板后可以測量引腳的輸出PWM波形如下:

image-20220912105400109

3 呼吸燈效果

實現(xiàn)呼吸燈效果就是更改占空比,讓其從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 改變輸出占空比,然后延時一定時間即可達(dá)到呼吸燈的效果。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • led
    led
    +關(guān)注

    關(guān)注

    242

    文章

    23355

    瀏覽量

    663156
  • PWM
    PWM
    +關(guān)注

    關(guān)注

    114

    文章

    5198

    瀏覽量

    214872
  • STM32
    +關(guān)注

    關(guān)注

    2272

    文章

    10923

    瀏覽量

    357544
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5121

    瀏覽量

    98189
  • 呼吸燈
    +關(guān)注

    關(guān)注

    10

    文章

    111

    瀏覽量

    42808
收藏 人收藏

    評論

    相關(guān)推薦

    PWM驅(qū)動LED實現(xiàn)呼吸效果

    C51 利用pwm 驅(qū)動LED 實現(xiàn)呼吸效果
    的頭像 發(fā)表于 04-24 15:29 ?3909次閱讀
    <b class='flag-5'>PWM</b>驅(qū)動<b class='flag-5'>LED</b><b class='flag-5'>實現(xiàn)</b><b class='flag-5'>呼吸</b><b class='flag-5'>燈</b><b class='flag-5'>效果</b>

    使用PWM控制LED實現(xiàn)呼吸效果

    本文主要講解使用PWM控制LED實現(xiàn)呼吸效果
    的頭像 發(fā)表于 02-08 17:50 ?1.4w次閱讀
    使用<b class='flag-5'>PWM</b>控制<b class='flag-5'>LED</b><b class='flag-5'>實現(xiàn)</b><b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>的<b class='flag-5'>效果</b>

    STM32 使用PWM實現(xiàn)呼吸

    STM32 PWM實現(xiàn)呼吸使用STM32F103ZET6 定時器4 CH2通道產(chǎn)生
    發(fā)表于 12-24 19:41 ?55次下載
    <b class='flag-5'>STM32</b> 使用<b class='flag-5'>PWM</b><b class='flag-5'>實現(xiàn)</b><b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>

    STM32G0開發(fā)筆記:FreeRTOS和FreeModbus庫使用

    使用Platformio平臺的libopencm3開發(fā)框架開發(fā)STM32G0,以下為FreeRTOS和FreeModbus庫使用。
    的頭像 發(fā)表于 01-16 14:44 ?5967次閱讀
    <b class='flag-5'>STM32G0</b><b class='flag-5'>開發(fā)筆記</b>:FreeRTOS和FreeModbus庫使用

    STM32G0開發(fā)筆記:FreeRTOS和CLI組件使用

    使用Platformio平臺的libopencm3開發(fā)框架開發(fā)STM32G0,以下為FreeRTOS和CLI組件使用。
    的頭像 發(fā)表于 01-16 14:47 ?3810次閱讀
    <b class='flag-5'>STM32G0</b><b class='flag-5'>開發(fā)筆記</b>:FreeRTOS和CLI組件使用

    STM32G0開發(fā)筆記:使用FreeRTOS系統(tǒng)的隊列Queue

    使用Platformio平臺的libopencm3開發(fā)框架開發(fā)STM32G0,下面為使用FreeRTOS系統(tǒng)的隊列Queue。
    的頭像 發(fā)表于 01-16 14:50 ?1488次閱讀

    STM32G0開發(fā)筆記:使用FreeRTOS系統(tǒng)

    使用Platformio平臺的libopencm3開發(fā)框架開發(fā)STM32G0,下面為使用FreeRTOS系統(tǒng)。
    的頭像 發(fā)表于 01-16 15:07 ?2531次閱讀
    <b class='flag-5'>STM32G0</b><b class='flag-5'>開發(fā)筆記</b>:使用FreeRTOS系統(tǒng)

    STM32G0開發(fā)筆記:使用ADC進(jìn)行NTC溫度采集

    使用Platformio平臺的libopencm3開發(fā)框架開發(fā)STM32G0,以下使用ADC進(jìn)行NTC溫度采集。
    的頭像 發(fā)表于 01-16 15:12 ?9978次閱讀
    <b class='flag-5'>STM32G0</b><b class='flag-5'>開發(fā)筆記</b>:使用ADC進(jìn)行NTC溫度采集

    STM32G0開發(fā)筆記:EEPROM M24C02的使用方法

    使用Platformio平臺的libopencm3開發(fā)框架開發(fā)STM32G0,以下為EEPROM M24C02的使用方法。
    的頭像 發(fā)表于 01-16 15:19 ?2973次閱讀
    <b class='flag-5'>STM32G0</b><b class='flag-5'>開發(fā)筆記</b>:EEPROM M24C02的使用方法

    STM32G0開發(fā)筆記:SD卡模塊的使用方法

    使用Platformio平臺的libopencm3開發(fā)框架開發(fā)STM32G0,下面介紹SD卡模塊的使用方法。
    的頭像 發(fā)表于 01-19 16:27 ?2452次閱讀
    <b class='flag-5'>STM32G0</b><b class='flag-5'>開發(fā)筆記</b>:SD卡模塊的使用方法

    STM32G0開發(fā)筆記:SPI接口的基本使用

    使用Platformio平臺的libopencm3開發(fā)框架開發(fā)STM32G0,下面介紹SPI接口的基本使用。
    的頭像 發(fā)表于 01-17 10:38 ?3239次閱讀
    <b class='flag-5'>STM32G0</b><b class='flag-5'>開發(fā)筆記</b>:SPI接口的基本使用

    STM32G0開發(fā)筆記:多通道ADC與DMA的使用

    使用Platformio平臺的libopencm3開發(fā)框架開發(fā)STM32G0,以下為多通道ADC與DMA的使用。
    的頭像 發(fā)表于 01-17 10:41 ?7265次閱讀
    <b class='flag-5'>STM32G0</b><b class='flag-5'>開發(fā)筆記</b>:多通道ADC與DMA的使用

    STM32G0開發(fā)筆記:串口中斷的使用

    使用Platformio平臺的libopencm3開發(fā)框架開發(fā)STM32G0,以下為串口中斷的使用。
    的頭像 發(fā)表于 01-17 10:46 ?2454次閱讀

    STM32G0開發(fā)筆記:GPIO接按鍵的使用方式

    使用Platformio平臺的libopencm3開發(fā)框架開發(fā)STM32G0,下面為GPIO接按鍵的使用方式。
    的頭像 發(fā)表于 01-17 10:48 ?1844次閱讀

    STM32G0開發(fā)筆記LED示例

    使用Platformio平臺的libopencm3開發(fā)框架開發(fā)STM32G0,下面為LED
    的頭像 發(fā)表于 01-17 10:52 ?1470次閱讀
    <b class='flag-5'>STM32G0</b><b class='flag-5'>開發(fā)筆記</b>:<b class='flag-5'>LED</b><b class='flag-5'>燈</b>示例
    百家乐透明牌靴| 仕达屋娱乐城| 利博百家乐官网的玩法技巧和规则| 百家乐网址| 百家乐官网真人游戏投注网| 真人百家乐蓝盾娱乐平台| 百家乐官网代理占成| 百家乐代打是真的吗| 成都市| 百家乐投注五揽式| 太和县| 百家乐龙虎台布| 真钱百家乐官网游戏大全| 先锋百家乐的玩法技巧和规则| 昆明百家乐官网装修装潢有限公司| 真人百家乐试玩账号| 百家乐官网千术道具| 菲律宾百家乐娱乐平台| 百家乐官网大赢家客户端| 百家乐赚水方| 百家乐官网如何看| 顶级赌场dj| 百家乐稳赚秘籍| 禄丰县| 百家乐押注方法| 网页百家乐官网官网| 1737棋牌游戏中心| 属虎和属龙合伙做生意| 本溪市| 威尼斯人娱乐城正规吗| 百家乐官网之对子的技巧| 新全讯网网站112| 太阳百家乐官网路单生| 宜春市| 百家乐红桌布| 百家乐赢家公式| 百家乐官网筹码多少钱| 大发888游戏平台 送1688元礼金领取lrm | 网上百家乐是真是假天涯论坛| 真人百家乐官网送钱| 皇冠网社区|