首先需要重點設定以下參數:
- 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
+關注
關注
147文章
18925瀏覽量
398205 -
先楫半導體
+關注
關注
12文章
285瀏覽量
3301
發布評論請先 登錄
相關推薦
熱點推薦
先楫半導體榮膺“年度優秀AI機器人創新產品獎” | “芯”動力賦能產業升級
MCU產品——HPM6E8Y,成功斬獲“年度優秀AI機器人創新產品獎”。該獎項旨在表彰在機器人領域具有技術突破性與市場影響力的創新成果,此次獲獎既是行業對先楫半導體
先楫半導體高性能MCU入駐立創商城,國產芯勢力再添新動能
先楫半導體(HPMicro)宣布其全系列高性能MCU芯片正式上架立創商城(LCSC),標志著國產高端MCU在供應鏈渠道與生態服務方面邁上新臺階,國產芯勢力再添新動能。先
先楫半導體HPM6E8Y:先楫實時控制芯片驅動的機器人關節“芯”時代
及產品總監費振東帶來了一款實時控制芯片驅動——HPM6E8Y。 ? ? 據費振東介紹,先楫半導體HPM6E8Y系列高性能MCU芯片為機器人關
發表于 05-13 11:50
?1797次閱讀
【強勢上新】HPM5E00:EtherCAT運動控制MCU,先楫半導體再拓工業總線產品新版圖
2025年5月6日 上海 |高性能微控制器及嵌入式解決方案提供商“上海先楫半導體科技有限公司”(先楫
發表于 05-07 14:07
?1133次閱讀
先楫半導體MCU具有哪些優勢?
先楫半導體(HPMicro)成立于2020年6月,是一家專注于高性能嵌入式解決方案的半導體企業,總部位于上海浦東軟件園。公司聚焦于研發高性能微控制器
發表于 04-14 10:04
重磅更新 | 先楫半導體HPM_SDK v1.9.0 發布
版本更新概況[New]增加HPM6P00系列MCU以及hpm6p00evk支持[New]增加了開發板已知問題說明[Update]將全系列開發板VCore電壓調節至1.275V,
600MHz RISC-V 雙核加持!先楫HPM6P00重新定義國產高性能混合信號MCU
2025 年 3 月 25 日,上海 —— 高性能微控制器及嵌入式解決方案提供商 上海先楫半導體科技有限公司(先
發表于 03-25 11:19
?1679次閱讀
【先楫半導體HPM6750EVKMINI評估板試用體驗】PWM定時器簡單應用
評論