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

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

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

【GD32H757Z海棠派開發(fā)板使用手冊(cè)】第六講 TIMER_3路PWM輸出實(shí)驗(yàn)

聚沃科技 ? 2024-05-09 09:36 ? 次閱讀
wKgZomYgeJOAUiXJAB6mQrDJGEg027.png

6.1實(shí)驗(yàn)內(nèi)容

通過(guò)本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容:

  • TIMER PWM輸出原理
  • TIMER 定時(shí)中斷

6.2實(shí)驗(yàn)原理

6.2.1IO口設(shè)置

本例程中,使用TIMER0輸出前三個(gè)通道的占空比,這三個(gè)通道分別為PA8、PA9和PA10,從datasheet中我們可以看到這三個(gè)引腳的定義:

wKgZomY8J6SAXOV-AAER4tjVkD8367.png

所以需要將這三個(gè)引腳配置為AF模式并選擇正確的AF號(hào):

wKgaomY8J7GABdDPAANALBRWiD4253.png

6.2.2TIMER輸出PWM原理

TIMER計(jì)數(shù)方式有兩種:邊沿計(jì)數(shù)和中央計(jì)數(shù),其中邊沿計(jì)數(shù)分為向上計(jì)數(shù)和向下計(jì)數(shù)。

在向上計(jì)數(shù)模式下,需要配置TIMER的重載值,當(dāng)TIMER開始工作后,計(jì)數(shù)值從0開始遞增,當(dāng)達(dá)到重載值后計(jì)數(shù)值變?yōu)?重新開始計(jì)數(shù);

向下計(jì)數(shù)模式和向上模式類似,只是計(jì)數(shù)值是遞減的,減到0后從重載數(shù)重新計(jì)數(shù);

中央對(duì)齊模式的計(jì)數(shù)模式為從0開始計(jì)遞增到重載值,再?gòu)闹剌d值遞減到0,從“0到0”為一次計(jì)數(shù)周期。

在0和重載值之間,用戶還可以設(shè)置一個(gè)比較值,PWM就是通過(guò)這個(gè)比較值來(lái)發(fā)出的,當(dāng)計(jì)數(shù)值小于比較值時(shí),IO口將會(huì)為高或者低,當(dāng)計(jì)數(shù)值大于比較值時(shí),IO將為輸出為另一個(gè)電平,即低或高,當(dāng)TIMER連續(xù)計(jì)數(shù)時(shí),就呈現(xiàn)出PWM波形。比較值的大小將決定PWM的占空比。以下為TIMER輸出PWM的示意圖:

wKgZomY8J8SAGm6sAAEwKRlzOFk202.png

圖中的OxCPRE為“輸出極性”,為高時(shí)為有效電平,為低時(shí)是無(wú)效電平,用戶可以設(shè)置通道口為有效電平時(shí)輸出高電平或者輸出低電平。比如,將PA8設(shè)置為高電平有效,那么當(dāng)OxCPRE輸出為高時(shí),PA8輸出高電平;如果設(shè)置PA8為低電平有效,那么當(dāng)OxCPRE輸出為高時(shí),則PA8輸出低電平。

本實(shí)驗(yàn)采用TIMER5進(jìn)行定時(shí)中斷,在中斷中改變TIMER0前三個(gè)通道的占空比,使用示波器或邏輯分析儀,可以測(cè)量TIMER0前三個(gè)通道PA8、PA9和PA10的波形。也可以通過(guò)飛線的方式將三個(gè)IO口分別接到紅綠藍(lán)三種不同顏色燈珠上,實(shí)現(xiàn)RGB彩燈的效果。

6.3硬件設(shè)計(jì)

TIMER0的前三個(gè)通道分別為PA8、PA9和PA10,讀者直接對(duì)開發(fā)板上引出的排針進(jìn)行測(cè)試即可。

wKgaomY8J96AMy8IAAFI0SJPFzA923.png

6.4代碼解析

本例程使用了兩個(gè)TIMER,其中TIMER5用來(lái)產(chǎn)生30ms的周期性中斷,在TIMER5的中斷中,對(duì)TIMER0的三個(gè)通道占空比進(jìn)行調(diào)整,從而實(shí)現(xiàn)占空比可變的效果。

6.4.1主函數(shù)代碼解析

主函數(shù)代碼如下所示,主要包括串口初始化、LED初始化、RGB燈珠初始化(即timer0的三個(gè)通道初始化)、timer驅(qū)動(dòng)初始化(該timer用于調(diào)整RGB燈珠PWM驅(qū)動(dòng)時(shí)間)。

C++
int main(void)
{
//延時(shí)和公共驅(qū)動(dòng)部分初始化
driver_init();
//打印串口初始化
bsp_uart_init(&BOARD_UART);
//初始化LED組
bsp_led_group_init();
bsp_led_on(&LED2);
bsp_led_off(&LED1);
bsp_rgb_init(1000000,10);//
//注冊(cè)rgb_switch函數(shù)到timer定時(shí)中斷的回調(diào)函數(shù)
TIMER_INT.timer_updata_callback=rgb_switch;
//初始化定時(shí)器,默認(rèn)計(jì)數(shù)器頻率100K,周期值3000,中斷頻率100K/3000= 33HZ(30ms)
bsp_timer_init(1000000,100);//
printf_log("\r\n RGB breathing lamp\r\n");
while(1)
{

}
}

6.4.2RGB燈珠初始化函數(shù)解析

RGB燈珠初始化函數(shù)如下,在此定義了RGB_TIMER_R、RGB_TIMER_G、RGB_TIMER_B三個(gè)燈的控制結(jié)構(gòu)體,并通過(guò)timer驅(qū)動(dòng)進(jìn)行配置。

C++
/* 定義注冊(cè)RGB對(duì)應(yīng)PWM通道 */
TIMER_CH_DEF(RGB_TIMER_R,TIMER0,0,TIMER_CH_PWM_LOW,A,8,AF_PP,GPIO_AF_1);
TIMER_CH_DEF(RGB_TIMER_G,TIMER0,1,TIMER_CH_PWM_LOW,A,9,AF_PP,GPIO_AF_1);
TIMER_CH_DEF(RGB_TIMER_B,TIMER0,2,TIMER_CH_PWM_LOW,A,10,AF_PP,GPIO_AF_1);

/*!
* 說(shuō)明 RGB初始化
* 輸入[1] counter_frequency 計(jì)數(shù)器頻率
* 輸入[2] period 周期值
* 返回值 無(wú)
*/
void bsp_rgb_init(uint32_t counter_frequency,uint16_t period)
{
driver_timer_multi_channel_init(&RGB_TIMER_R,&RGB_TIMER_G,&RGB_TIMER_B,NULL,counter_frequency,period);
driver_timer_pwm_on(&RGB_TIMER_R);
driver_timer_pwm_on(&RGB_TIMER_G);

6.4.3基礎(chǔ)定時(shí)器初始化及中斷處理函數(shù)

基礎(chǔ)定時(shí)器初始化配置代碼如下,在此用一個(gè)定時(shí)器TIMER5,并使能了其溢出中斷。該定時(shí)器用于控制RGB PWM輸出時(shí)間。

C
/* 注冊(cè)定義定時(shí)器中斷使用的timer */
TIMER_BASE_DEF(TIMER_INT,TIMER5);
/*!
* 說(shuō)明 定時(shí)器中斷初始化
* 輸入[1] counter_frequency:計(jì)數(shù)器頻率值
* 輸入[2] period:周期值
* 返回值 無(wú)
*/
void bsp_timer_init(uint32_t counter_frequency,uint16_t period)
{
driver_timer_base_int_init(&TIMER_INT,counter_frequency,period);
nvic_irq_enable(TIMER5_DAC_UDR_IRQn,0,0);
}

其中斷回調(diào)函數(shù)如下,通過(guò)該函數(shù)定時(shí)調(diào)整RGB三路PWM的占空比。

C
/*!
* 說(shuō)明 定時(shí)器中斷服務(wù)函數(shù)
* 輸入[1] 無(wú)
* 返回值 無(wú)
*/
void TIMER5_DAC_UDR_IRQHandler(void)
{
driver_timer_updata_int_handler(&TIMER_INT);
}

/*!
* 說(shuō)明 RGB占空比切換函數(shù)(TIMER定時(shí)中斷回調(diào))
* 輸入 無(wú)
* 輸出 無(wú)
* 返回值 無(wú)
*/
void rgb_switch(void)
{
static uint8_t r_duty=0,g_duty=0,b_duty=0;
//每輪中斷依次調(diào)整rgb占空比,將全部組合遍歷
bsp_rgb_duty_set(r_duty,g_duty,b_duty);
b_duty+=5;
if(b_duty>100)
{
b_duty=0;
g_duty+=5;
if(g_duty>100)
{
g_duty=0;
r_duty+=5;
if(r_duty>100)
{
r_duty=0;
bsp_led_toggle(&LED2);
bsp_led_toggle(&LED1);
}
}
}
}

6.5實(shí)驗(yàn)結(jié)果

將本例程代碼下載到海棠派開發(fā)板中,使用示波器測(cè)量PA8、PA9、PA10上,可以看到三個(gè)通道輸出PWM波,且占空比會(huì)周期性的變化。

教程GD32 MCU方案商聚沃科技原創(chuàng)發(fā)布,了解更多GD32 MCU教程,關(guān)注聚沃科技官網(wǎng)

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

    關(guān)注

    6030

    文章

    44489

    瀏覽量

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

    關(guān)注

    114

    文章

    5119

    瀏覽量

    213175
  • Timer
    +關(guān)注

    關(guān)注

    1

    文章

    63

    瀏覽量

    12765
  • GD32
    +關(guān)注

    關(guān)注

    7

    文章

    403

    瀏覽量

    24111
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    GD32H757Z海棠開發(fā)板使用手冊(cè)】第四 FMC-片內(nèi)Flash擦寫讀實(shí)驗(yàn)

    FMC即Flash控制器,其提供了片上Flash操作所需要的所有功能,在GD32H7XX系列MCU中,具有高達(dá)3840KB字節(jié)的片上閃存可用于存儲(chǔ)指令或數(shù)據(jù)。FMC也提供了扇區(qū)擦除和整片擦除操作以及
    的頭像 發(fā)表于 04-19 10:09 ?1140次閱讀
    【<b class='flag-5'>GD32H757Z</b><b class='flag-5'>海棠</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第四<b class='flag-5'>講</b> FMC-片內(nèi)Flash擦寫讀<b class='flag-5'>實(shí)驗(yàn)</b>

    GD32H757Z海棠開發(fā)板使用手冊(cè)】第十三講 SDIO-SD卡讀寫實(shí)驗(yàn)

    通過(guò)本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容: ?USB協(xié)議基本原理 ?GD32H7xx USBHS的使用 ?虛擬鍵盤的協(xié)議原理及使用
    的頭像 發(fā)表于 06-06 11:26 ?1698次閱讀
    【<b class='flag-5'>GD32H757Z</b><b class='flag-5'>海棠</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第十三講 SDIO-SD卡讀寫<b class='flag-5'>實(shí)驗(yàn)</b>

    迅為iMX6ULL開發(fā)板使用手冊(cè)資料下載

    第一部分 QT應(yīng)用開發(fā) 第五篇 Linux系統(tǒng)移植篇 第六篇 Linux文件系統(tǒng)構(gòu)建篇 《IMX6ULL終結(jié)者開發(fā)板裸機(jī)使用手冊(cè)》第一章 Cortex-A7架構(gòu)第二章 初識(shí)ARM匯編
    發(fā)表于 12-02 14:13

    YL-51開發(fā)板使用手冊(cè)

    YL-51開發(fā)板使用手冊(cè),YL-51開發(fā)板使用手冊(cè)YL-51開發(fā)板使用手冊(cè)YL-51
    發(fā)表于 05-10 16:31 ?21次下載

    51開發(fā)板使用手冊(cè)

    51開發(fā)板使用手冊(cè),感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 11-23 15:45 ?11次下載

    KC705開發(fā)板英文使用手冊(cè)

    KC705開發(fā)板英文使用手冊(cè)
    發(fā)表于 11-01 10:19 ?4次下載

    iTOP-3399開發(fā)板使用手冊(cè)大更新

    iTOP-3399開發(fā)板使用手冊(cè)大更新
    的頭像 發(fā)表于 12-10 15:46 ?1306次閱讀
    iTOP-3399<b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>大更新

    GD32H757Z海棠開發(fā)板使用手冊(cè)】第一 GPIO-流水燈實(shí)驗(yàn)

    通過(guò)本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容: GPIO結(jié)構(gòu)及原理; GPIO輸出功能實(shí)現(xiàn); LED驅(qū)動(dòng)原理。
    的頭像 發(fā)表于 04-16 11:39 ?813次閱讀
    【<b class='flag-5'>GD32H757Z</b><b class='flag-5'>海棠</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第一<b class='flag-5'>講</b> GPIO-流水燈<b class='flag-5'>實(shí)驗(yàn)</b>

    GD32H757Z海棠開發(fā)板使用手冊(cè)】第二 GPIO-按鍵查詢檢測(cè)實(shí)驗(yàn)

    2.1實(shí)驗(yàn)內(nèi)容通過(guò)本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容:GPIO輸入功能原理;按鍵查詢輸入檢測(cè)原理;2.2實(shí)驗(yàn)原理2.2.1GPIO輸入功能原理GD32H7XX系列MCUGPIO輸入配置結(jié)構(gòu)如下圖所
    的頭像 發(fā)表于 04-17 10:42 ?644次閱讀
    【<b class='flag-5'>GD32H757Z</b><b class='flag-5'>海棠</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第二<b class='flag-5'>講</b> GPIO-按鍵查詢檢測(cè)<b class='flag-5'>實(shí)驗(yàn)</b>

    GD32H757Z海棠開發(fā)板使用手冊(cè)】第五 PMU-低功耗實(shí)驗(yàn)

    PMU即電源管理單元,其內(nèi)部結(jié)構(gòu)下圖所示,由該圖可知,GD32H7XX系列MCU具有三個(gè)電源域,包括VDD/VDDA電源域、0.9V電源域以及電池備份域,其中,VDD /VDDA域由電源直接供電
    的頭像 發(fā)表于 04-20 09:32 ?843次閱讀
    【<b class='flag-5'>GD32H757Z</b><b class='flag-5'>海棠</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第五<b class='flag-5'>講</b> PMU-低功耗<b class='flag-5'>實(shí)驗(yàn)</b>

    GD32F470紫藤開發(fā)板使用手冊(cè)第六 TIMER_3PWM輸出實(shí)驗(yàn)

    通過(guò)本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容: TIMER PWM輸出原理 TIMER 定時(shí)中斷
    的頭像 發(fā)表于 05-08 09:20 ?516次閱讀
    【<b class='flag-5'>GD</b>32F470紫藤<b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】<b class='flag-5'>第六</b><b class='flag-5'>講</b>  <b class='flag-5'>TIMER_3</b><b class='flag-5'>路</b><b class='flag-5'>PWM</b><b class='flag-5'>輸出</b><b class='flag-5'>實(shí)驗(yàn)</b>

    GD32H757Z海棠開發(fā)板使用手冊(cè)】第八 ADC-規(guī)則組多通道采樣實(shí)驗(yàn)

    通過(guò)本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容: ADC的簡(jiǎn)介 GD32FH757 ADC工作原理 DMA和DMAMUX的原理 規(guī)則組多通道循環(huán)采樣
    的頭像 發(fā)表于 05-14 09:39 ?557次閱讀
    【<b class='flag-5'>GD32H757Z</b><b class='flag-5'>海棠</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第八<b class='flag-5'>講</b> ADC-規(guī)則組多通道采樣<b class='flag-5'>實(shí)驗(yàn)</b>

    GD32H757Z海棠開發(fā)板使用手冊(cè)】第九 USART-printf打印實(shí)驗(yàn)

    通過(guò)本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容: ?串口簡(jiǎn)介 ?GD32H757串口工作原理 ?使用printf打印信息
    的頭像 發(fā)表于 05-15 11:39 ?602次閱讀
    【<b class='flag-5'>GD32H757Z</b><b class='flag-5'>海棠</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第九<b class='flag-5'>講</b> USART-printf打印<b class='flag-5'>實(shí)驗(yàn)</b>

    GD32H757Z海棠開發(fā)板使用手冊(cè)】第十一講 SPI-SPI NOR FLASH讀寫實(shí)驗(yàn)

    通過(guò)本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容: ?SPI簡(jiǎn)介 ?GD32H7 SPI簡(jiǎn)介 ?SPI NOR FLASH——GD25Q128ESIGR簡(jiǎn)介 ?使用GD32H7 SPI接口實(shí)現(xiàn)對(duì)
    的頭像 發(fā)表于 06-04 11:42 ?791次閱讀
    【<b class='flag-5'>GD32H757Z</b><b class='flag-5'>海棠</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第十一講 SPI-SPI NOR FLASH讀寫<b class='flag-5'>實(shí)驗(yàn)</b>

    GD32F303紅楓開發(fā)板使用手冊(cè)】第二十 SPI-SPI NAND FLASH讀寫實(shí)驗(yàn)

    通過(guò)本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容: ?SPI通信協(xié)議,參考19.2.1東方紅開發(fā)板使用手冊(cè) ?GD32F303 SPI操作方式,參考19.2.2東方紅
    的頭像 發(fā)表于 06-20 09:50 ?736次閱讀
    【<b class='flag-5'>GD</b>32F303紅楓<b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第二十<b class='flag-5'>講</b> SPI-SPI NAND FLASH讀寫<b class='flag-5'>實(shí)驗(yàn)</b>