首先需要重点设定以下参数:
- 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文章
18652浏览量
388529 -
先楫半导体
+关注
关注
12文章
270浏览量
3170
发布评论请先 登录
相关推荐
热点推荐
先楫半导体高性能MCU入驻立创商城,国产芯势力再添新动能
先楫半导体(HPMicro)宣布其全系列高性能MCU芯片正式上架立创商城(LCSC),标志着国产高端MCU在供应链渠道与生态服务方面迈上新台阶,国产芯势力再添新动能。先
先楫半导体HPM6E8Y:先楫实时控制芯片驱动的机器人关节“芯”时代
及产品总监费振东带来了一款实时控制芯片驱动——HPM6E8Y。 据费振东介绍,先楫半导体HPM6E8Y系列高性能MCU芯片为机器人关
发表于 05-13 11:50
•1617次阅读
【强势上新】HPM5E00:EtherCAT运动控制MCU,先楫半导体再拓工业总线产品新版图
2025年5月6日 上海 |高性能微控制器及嵌入式解决方案提供商“上海先楫半导体科技有限公司”(先楫
发表于 05-07 14:07
•999次阅读
重磅更新 | 先楫半导体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系列,为

【先楫半导体HPM6750EVKMINI评估板试用体验】PWM定时器简单应用
评论