首先需要重點設定以下參數:
- static inline void pwm_set_reload(PWM_Type *pwm_x,uint8_t ex_reload,uint32_t reload)
② 比較值cmp:用于定時器計數時判斷計數是否溢出
③ 比較模式mode:用于設定定時器比較模式,有輸出比較與輸入比較兩種
typedef enum pwm_cmp_mode {pwm_cmp_mode_output_compare = 0, /**< output compare*/pwm_cmp_mode_input_capture = 1, /**< input compare*/} pwm_cmp_mode_t;
④ 觸發方式更新update_trigger:分為以下四種更新方式:
typedef enum pwm_register_update {pwm_shadow_register_update_on_shlk = 0, /**< after software set shlk bit of shlk register*/pwm_shadow_register_update_on_modify = 1, /**?immediately after the register being modified*/pwm_shadow_register_update_on_hw_event = 2, /**?after hardware event assert*/pwm_shadow_register_update_on_sh_synci = 3, /**< after SHSYNCI assert */} pwm_shadow_register_update_trigger_t;
官方也給出了一個PWM定時器配置的示例,示例如下
void config_pwm(PWM_Type *ptr, uint8_t pin, uint8_t cmp_index, uint32_t reload, bool cmp_initial_zero, uint8_t hw_event_cmp){pwm_cmp_config_t cmp_config = {0};pwm_config_t pwm_config = {0};pwm_stop_counter(ptr);pwm_get_default_pwm_config(ptr, &pwm_config);//復位默認pwm寄存器配置pwm_get_default_cmp_config(ptr, &cmp_config);//復位默認比較寄存器配置pwm_config.enable_output = false;pwm_config.dead_zone_in_half_cycle = 0;//半周期PWM死區設定pwm_config.invert_output = false;//反轉輸出電平設定pwm_set_reload(ptr, 0, reload);//設置重裝載值pwm_set_start_count(ptr, 0, 0);//設置PWM定時器起始值//預配置寄存器信息cmp_config.mode = pwm_cmp_mode_output_compare;//設定PWM定時器比較模式為cmp_config.cmp = cmp_initial_zero ? 0 : reload + 1;//設定比較值cmpcmp_config.update_trigger = pwm_shadow_register_update_on_modify;//更新觸發方式為立即更新pwm_config_cmp(ptr, cmp_index, &cmp_config);//PWM配置更新//更新觸發器類型,以便在硬件事件(重新加載)時更新比較值cmp_config.update_trigger = pwm_shadow_register_update_on_hw_event;//將pwm配置為cmp驅動的輸出if (status_success != pwm_setup_waveform(ptr, pin, &pwm_config, cmp_index, &cmp_config, 1)) {printf("failed to setup waveformn");while(1);}//pwm_setup_waveform設定輸出PWM波形//配置硬件事件cmp_config.cmp = reload - 1;cmp_config.update_trigger = pwm_shadow_register_update_on_hw_event;pwm_load_cmp_shadow_on_match(ptr, hw_event_cmp, &cmp_config);//設定影子寄存器}
PWM定時器配置完成后,對定時器中斷綁定服務函數及分配相應優先級,并使能開始計數即可完成設定
static inline void pwm_start_counter(PWM_Type *pwm_x)intc_m_enable_irq_with_priority(irq, priority)
使用時如需更新PWM輸出狀態即占空比,可使用以下函數進行邊沿對齊
- pwm_update_raw_cmp_edge_aligned(pwm, pwm_cmp, duty);
以上,加之上篇的GPIO與外部中斷的介紹,對于MCU的簡單應用暫告一段落,GPIO、外部中斷、PWM定時器為MCU最基本的功能,對于體驗而言還是比較輕松的,配置起來也不是特別繁瑣,主要歸功于官方所提供的庫函數,使用的流程也與傳統的MCU類似。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
mcu
+關注
關注
146文章
17957瀏覽量
365939 -
先楫半導體
+關注
關注
11文章
250瀏覽量
2661
發布評論請先 登錄
相關推薦
熱點推薦
先楫半導體HPM6E8Y:先楫實時控制芯片驅動的機器人關節“芯”時代
及產品總監費振東帶來了一款實時控制芯片驅動——HPM6E8Y。 ? ? 據費振東介紹,先楫半導體HPM6E8Y系列高性能MCU芯片為機器人關
發表于 05-13 11:50
?1182次閱讀

【強勢上新】HPM5E00:EtherCAT運動控制MCU,先楫半導體再拓工業總線產品新版圖
2025年5月6日 上海 |高性能微控制器及嵌入式解決方案提供商“上海先楫半導體科技有限公司”(先楫
發表于 05-07 14:07
?707次閱讀

重磅更新 | 先楫半導體HPM_SDK v1.9.0 發布
版本更新概況[New]增加HPM6P00系列MCU以及hpm6p00evk支持[New]增加了開發板已知問題說明[Update]將全系列開發板VCore電壓調節至1.275V,

先楫半導體發布高性能HPM6E8Y系列MCU
近日,上海先楫半導體科技有限公司,國內領先的高性能微控制器及嵌入式解決方案提供商,推出了專為機器人運動與控制設計的高性能MCU產品——HPM
先楫半導體HPM OBOX 離線燒錄器正式發布
在量產燒錄領域,一個令人振奮的消息傳來——終于可以擺脫上位機的束縛,實現更加高效、便捷的量產流程!這一切得益于先楫半導體推出的離線OBOX,一款基于HPM 5361 MCU開發的創新離
CES 2025:先楫半導體發布高性能機器人MCU
半導體科技有限公司(先楫半導體,HPMicro)閃耀登場。該公司發布了一款專注于機器人運動與控制的高性能MCU產品——HPM6E8Y系列,為
評論