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

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

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

GD32F303固件庫(kù)開發(fā)(12)----輸出PWM及修改PWM頻率與占空比

嵌入式單片機(jī)MCU開發(fā) ? 來(lái)源:嵌入式單片機(jī)MCU開發(fā) ? 作者:嵌入式單片機(jī)MCU開 ? 2022-11-30 15:36 ? 次閱讀

概述

本章STM32CUBEMX配置STM32F103,并且在GD32F303中進(jìn)行開發(fā),同時(shí)通過開發(fā)板內(nèi)進(jìn)行驗(yàn)證。 本章主要配置定時(shí)器輸出PWM,同時(shí)演示PWM頻率與占空比。 查閱手冊(cè)可以得知,PB11為定時(shí)器1的通道3,對(duì)應(yīng)ST的為定時(shí)器2的通道4。 需要GD樣片的可以加QUN申請(qǐng):615061293 。

在這里插入圖片描述

生成例程

這里準(zhǔn)備了自己繪制的開發(fā)板進(jìn)行驗(yàn)證。

使用PB11進(jìn)行驗(yàn)證。

在這里插入圖片描述

工作過程

在ST中查看下面工作原理圖可以得知,時(shí)鐘可以由內(nèi)部Internal clock產(chǎn)生或者外部ETR。 同時(shí)可以設(shè)置復(fù)位,使能,向上/向下,計(jì)數(shù)。

在這里插入圖片描述

在GD中,內(nèi)部時(shí)鐘源 TIMER_CK。

在這里插入圖片描述

同時(shí)分頻只能為1、2、4。

在這里插入圖片描述

查看ST下列文檔可以得知,定時(shí)器主要有TIMx_CNT、TIMx_PSC、TIMx_ARR控制。 同時(shí)預(yù)分頻器(TIMx_PSC)范圍位1-65535。

在這里插入圖片描述

查看TIMx_PSC說明,可以得知定時(shí)器頻率為 fCK_PSC / (PSC[15:0] + 1)

在這里插入圖片描述

可以看到,當(dāng)psc設(shè)置為不同的值的時(shí)候,計(jì)數(shù)頻率也會(huì)發(fā)生改變。

在這里插入圖片描述

查看GD的文檔,可以得知,控制 PSC_CLK可以進(jìn)行分頻,定時(shí)器頻率為 fPSC_CLK / (PSC+ 1)。

。

在這里插入圖片描述

在這里插入圖片描述

在ST中,同時(shí)ARR可以改變計(jì)數(shù)值,當(dāng)寫入的arr越大,他的頻率越低,計(jì)數(shù)周期是ARR+1。

在這里插入圖片描述

同時(shí)周期由TIMERx_CAR決定,pwm占空比由TIMERx_CHxCV決定。

在這里插入圖片描述

ARR計(jì)數(shù)值如下所示。

在這里插入圖片描述

在這里插入圖片描述

占空比定義如下所示。

在這里插入圖片描述

PWM頻率計(jì)算如下所示。 其中ARR在GD中中用CAR去定義了。

在這里插入圖片描述

配置TIM參數(shù),預(yù)分頻系數(shù)設(shè)置為120-1, 自動(dòng)重載值設(shè)置為1000-1,那么PWM頻率為120,000,000/((120-1+1)*(1000-1+1))=1000Hz,即1KHz。

初始化代碼

/*使能TIMER1時(shí)鐘 */
        rcu_periph_clock_enable(RCU_TIMER1);
        /*使能GPIOB時(shí)鐘 */
        rcu_periph_clock_enable(RCU_GPIOB);
        /*使能復(fù)用時(shí)鐘 */
    rcu_periph_clock_enable(RCU_AF);

        /*設(shè)置io口,設(shè)置為復(fù)用模式 */
    gpio_init(GPIOB,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_11);
        /*TIMER1全部重映射*/
        gpio_pin_remap_config (GPIO_TIMER1_FULL_REMAP, ENABLE);




        timer_oc_parameter_struct timer_ocintpara;
    timer_parameter_struct timer_initpara;


        /*定時(shí)器復(fù)位 */
    timer_deinit(TIMER1);

    /* TIMER1 configuration */
        /*時(shí)鐘分頻系數(shù) */
    timer_initpara.prescaler         = 120-1;
    /*邊沿對(duì)齊 */
        timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;
    /*上升計(jì)數(shù) */
        timer_initpara.counterdirection  = TIMER_COUNTER_UP;
    /*計(jì)數(shù)值 */
        timer_initpara.period            = 1000-1;
    /*根據(jù)prescaler,clockdivision最終該定時(shí)器時(shí)鐘評(píng)率為1M */
        timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;
    /*重復(fù)計(jì)數(shù)器的值 */
        timer_initpara.repetitioncounter = 0;
    /* */
        timer_init(TIMER1,&timer_initpara);

    /* CH0,CH1 and CH2 configuration in PWM mode */
        /*是否使能輸出 */
    timer_ocintpara.outputstate  = TIMER_CCX_ENABLE;
    /*是否互補(bǔ)通道輸出 */
        timer_ocintpara.outputnstate = TIMER_CCXN_DISABLE;
    /*輸出極性 */
        timer_ocintpara.ocpolarity   = TIMER_OC_POLARITY_HIGH;
    /*輸出死區(qū)延遲的極性 */
        timer_ocintpara.ocnpolarity  = TIMER_OCN_POLARITY_HIGH;
    /*空閑狀態(tài)下通道輸出極性通道 */
        timer_ocintpara.ocidlestate  = TIMER_OC_IDLE_STATE_LOW;
    /*空閑時(shí)互補(bǔ)通道輸出極性 */
        timer_ocintpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;

    /*配置通道 */
        timer_channel_output_config(TIMER1,TIMER_CH_3,&timer_ocintpara);



    /* CH3 configuration in PWM mode0,duty cycle 30% */
    /*設(shè)置閾值(比較值,調(diào)節(jié)占空比的時(shí)候調(diào)節(jié)這個(gè)值) */
        timer_channel_output_pulse_value_config(TIMER1,TIMER_CH_3,300);
    /*輸出模式配置 */
        timer_channel_output_mode_config(TIMER1,TIMER_CH_3,TIMER_OC_MODE_PWM0);
    /*不使用影子寄存器 */
        timer_channel_output_shadow_config(TIMER1,TIMER_CH_3,TIMER_OC_SHADOW_DISABLE);



    /* 使能定時(shí)器自動(dòng)重裝載值 */
    timer_auto_reload_shadow_enable(TIMER1);
    /* 使能定時(shí)器 */
    timer_enable(TIMER1);

由于上述設(shè)置計(jì)數(shù)值位1000,那么設(shè)置30%的正占空比的ccr應(yīng)該配置為30%*1000=300。

/ *設(shè)置閾值(比較值,調(diào)節(jié)占空比的時(shí)候調(diào)節(jié)這個(gè)值) * / timer_channel_output_pulse_value_config(TIMER1,TIMER_CH_3,300);

在這里插入圖片描述

修改PWM頻率

修改PWM頻率可以修改PSC或者ARR來(lái)進(jìn)行改變。

在這里插入圖片描述

設(shè)置TIM自動(dòng)重新加載寄存器值。 初始設(shè)置為PSC為120-1,ARR為1000-1,若設(shè)置為500-1,那么他的頻率應(yīng)該是120M/(120-1+1)(500-1+1)=2k 占空比為300/500*100%=60%

timer_autoreload_value_config (TIMER1, 500-1);

在這里插入圖片描述

在運(yùn)行時(shí)設(shè)置TIM Prescaler。 初始設(shè)置為ARR為500-1,PSC為120-1,若設(shè)置為60-1,那么他的頻率應(yīng)該是120M/(60-1+1)(500-1+1)=4k 占空比為300/500*100%=60%

timer_prescaler_config (TIMER1, 60-1, TIMER_PSC_RELOAD_NOW);

在這里插入圖片描述

審核編輯:湯梓紅

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

    關(guān)注

    114

    文章

    5186

    瀏覽量

    213916
  • 固件庫(kù)
    +關(guān)注

    關(guān)注

    2

    文章

    97

    瀏覽量

    14940
  • stm32cubemx
    +關(guān)注

    關(guān)注

    5

    文章

    283

    瀏覽量

    14807
  • gd32f303
    +關(guān)注

    關(guān)注

    4

    文章

    38

    瀏覽量

    3693
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    GD32F303固件庫(kù)開發(fā)(14)----IIC之配置OLED

    本章配置GD32F303使用IIC進(jìn)行驅(qū)動(dòng)SSD1306的12864OLED。
    的頭像 發(fā)表于 07-26 08:55 ?3679次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>開發(fā)</b>(14)----IIC之配置OLED

    GD32F303】星空派介紹

    GD32官方資料的基礎(chǔ)上,提供GD32F303的庫(kù)函數(shù)開發(fā)資料、例程講解、視頻課程等。同時(shí)還提供RT-Thread相關(guān)的驅(qū)動(dòng)開發(fā)、應(yīng)用開發(fā)、
    發(fā)表于 09-11 17:55

    關(guān)于GD32F303PWM輸入捕獲精度問題

    有大佬測(cè)過GD32F303最高能對(duì)多高頻率PWM進(jìn)行捕獲嗎?最近做的PWM輸入捕獲,對(duì)周期為10ms以下的PWM捕獲開始出現(xiàn)明顯誤差,對(duì)比
    發(fā)表于 10-26 09:54

    GD32F30x系列固件庫(kù)

    GD32F30x系列固件庫(kù)包含GD32F303、GD32F305、GD32F307三個(gè)系列的最新
    發(fā)表于 08-21 09:00 ?166次下載

    GD32F303固件庫(kù)開發(fā)(1)----前期準(zhǔn)備與燒錄

    在這使用STM32CUBEMX進(jìn)行配置STM32F103,移植到兆易創(chuàng)新GD32F303,然后進(jìn)行測(cè)試。需要樣片的可以加Qun申請(qǐng):615061293。
    的頭像 發(fā)表于 11-23 11:15 ?2755次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>開發(fā)</b>(1)----前期準(zhǔn)備與燒錄

    GD32F303固件庫(kù)開發(fā)(3)----使用固件庫(kù)點(diǎn)亮LED

    概述 在GD的官網(wǎng)中有許多的DEMO文件,可以使用開發(fā)板的案例或者對(duì)應(yīng)的MCU標(biāo)準(zhǔn)固件庫(kù)。需要樣片的可以加群申請(qǐng):6_15061293。 下圖是GD
    的頭像 發(fā)表于 11-23 17:36 ?2902次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>開發(fā)</b>(3)----使用<b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b>點(diǎn)亮LED

    GD32F303固件庫(kù)開發(fā)(5)----GPIO輸出模式,速率測(cè)試、開漏和輸出說明

    以STM32CUBEMX創(chuàng)建STM32F103工程,同時(shí)移植在GD32F303中,同時(shí)通過GD32303C_START開發(fā)板內(nèi)進(jìn)行驗(yàn)證。
    的頭像 發(fā)表于 11-25 15:32 ?3185次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>開發(fā)</b>(5)----GPIO<b class='flag-5'>輸出</b>模式,速率測(cè)試、開漏和<b class='flag-5'>輸出</b>說明

    STM32CUBEMX開發(fā)GD32F30312)----輸出PWM修改PWM頻率占空比

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中進(jìn)行開發(fā),同時(shí)通過開發(fā)板內(nèi)進(jìn)行驗(yàn)證。 本章主要配置定時(shí)器輸出
    的頭像 發(fā)表于 11-30 14:40 ?3870次閱讀
    STM32CUBEMX<b class='flag-5'>開發(fā)</b><b class='flag-5'>GD32F303</b>(<b class='flag-5'>12</b>)----<b class='flag-5'>輸出</b><b class='flag-5'>PWM</b>及<b class='flag-5'>修改</b><b class='flag-5'>PWM</b><b class='flag-5'>頻率</b>與<b class='flag-5'>占空比</b>

    STM32CUBEMX開發(fā)GD32F303(13)----定時(shí)器TIM捕獲PWM測(cè)量頻率占空比

    概述 本章STM32CUBEMX配置STM32F103,并且在GD32F303中進(jìn)行開發(fā),同時(shí)通過開發(fā)板內(nèi)進(jìn)行驗(yàn)證。 本章STM32CUBEMX配置STM32
    的頭像 發(fā)表于 12-07 10:15 ?3540次閱讀
    STM32CUBEMX<b class='flag-5'>開發(fā)</b><b class='flag-5'>GD32F303</b>(13)----定時(shí)器TIM捕獲<b class='flag-5'>PWM</b>測(cè)量<b class='flag-5'>頻率</b>與<b class='flag-5'>占空比</b>

    GD32F303固件庫(kù)開發(fā)(13)----定時(shí)器TIM捕獲PWM測(cè)量頻率占空比

    本章配置GD32F303輸出PWM,同時(shí)使用TIM測(cè)量PWM頻率和正占空比。 查閱手冊(cè)可以得知,
    的頭像 發(fā)表于 12-07 10:19 ?6102次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>開發(fā)</b>(13)----定時(shí)器TIM捕獲<b class='flag-5'>PWM</b>測(cè)量<b class='flag-5'>頻率</b>與<b class='flag-5'>占空比</b>

    AN029 GD32F103程序在GD32F303GD32F403芯片上運(yùn)行DSP

    AN029 GD32F103程序在GD32F303GD32F403芯片上運(yùn)行DSP
    發(fā)表于 02-27 18:33 ?0次下載
    AN029 <b class='flag-5'>GD32F</b>103程序在<b class='flag-5'>GD32F303</b>和<b class='flag-5'>GD32F</b>403芯片上運(yùn)行DSP

    GD32F303固件庫(kù)開發(fā)(15)----外部中斷EXTI

    本章配置GD32F303使用EXTI進(jìn)行驅(qū)動(dòng)LED。
    的頭像 發(fā)表于 07-26 15:56 ?1510次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>開發(fā)</b>(15)----外部中斷EXTI

    GD32F303固件庫(kù)開發(fā)

    的可以加群申請(qǐng):615061293 。 GD32F303固件庫(kù)開發(fā)(1)----前期準(zhǔn)備與燒錄 使用GDLINK、jlink、串口下載程序到GD
    的頭像 發(fā)表于 07-27 09:27 ?1177次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>開發(fā)</b>

    STM32CUBEMX開發(fā)GD32F303

    在這使用STM32CUBEMX進(jìn)行配置STM32F103,移植到兆易創(chuàng)新GD32F303,然后進(jìn)行測(cè)試。
    的頭像 發(fā)表于 07-27 09:32 ?1598次閱讀
    STM32CUBEMX<b class='flag-5'>開發(fā)</b><b class='flag-5'>GD32F303</b>

    GD32 MCU 移植教程】2、從 GD32F303 移植到 GD32F503

    GD32E503 系列是 GD 推出的 Cortex_M33 系列產(chǎn)品,該系列資源上與 GD32F303 兼容度非常高,本應(yīng)用筆記旨在幫助您快速將應(yīng)用程序從 GD32F303 系列微控
    的頭像 發(fā)表于 08-31 09:36 ?1472次閱讀
    【<b class='flag-5'>GD</b>32 MCU 移植教程】2、從 <b class='flag-5'>GD32F303</b> 移植到 <b class='flag-5'>GD32F</b>503