找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于HCF32460 timera pwm占空比不可调问题

查看数: 351 | 评论数: 3 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2025-11-11 18:00

正文摘要:

/* * Author: ClingYang * Date: 2025-11-11 * Version: 1.0 */ #ifndef __TIMERA_PWM_H__ #define __TIMERA_PWM_H__ #ifdef __cplusplus extern "C" { #endif #include "main.h" #define TMRA_UNIT&nb ...

回复

ID:1066795 发表于 2025-11-21 09:12
https://blog.csdn.net/xiaodududao/article/details/155071638  华大HC32F460踩坑定时器A 输出pwm
这个还有一个坑 希望对遇到同样问题有点小帮助
ID:1066795 发表于 2025-11-12 10:34
  1. #include "timera_pwm.h"
  2. extern uint32_t test_var;
  3. /**
  4. * @brief  TimerA configuration.
  5. * @param  None
  6. * @retval None
  7. */
  8. static void TmrAConfig(void)
  9. {
  10.     stc_tmra_init_t stcTmraInit;
  11.     stc_tmra_pwm_init_t stcPwmInit;

  12.     /* 1. Enable TimerA peripheral clock. */
  13.     FCG_Fcg2PeriphClockCmd(TMRA_PERIPH_CLK, ENABLE);

  14.     /* 2. Set a default initialization value for stcTmraInit. */
  15.     (void)TMRA_StructInit(&stcTmraInit);

  16.     /* 3. Modifies the initialization values depends on the application. */
  17.     stcTmraInit.sw_count.u8CountMode = TMRA_MD_SAWTOOTH; // 锯齿波
  18.     stcTmraInit.sw_count.u8CountDir = TMRA_DIR_UP; // 向上计数模式
  19.     stcTmraInit.u32PeriodValue = (500UL-1UL);
  20.     (void)TMRA_Init(TMRA_UNIT, &stcTmraInit);

  21.     (void)TMRA_PWM_StructInit(&stcPwmInit);
  22.     stcPwmInit.u32CompareValue = 1UL; // 占空比50%
  23.     GPIO_SetFunc(TMRA_PWM_PORT, TMRA_PWM_PIN, TMRA_PWM_PIN_FUNC);
  24.     (void)TMRA_PWM_Init(TMRA_UNIT, TMRA_PWM_CH, &stcPwmInit);
  25.     TMRA_PWM_OutputCmd(TMRA_UNIT, TMRA_PWM_CH, ENABLE);
  26. }
  27. void TimeraPwmInit(void)
  28. {
  29.     TmrAConfig();
  30.     TMRA_Start(TMRA_UNIT);
  31. }
  32. void TimeraPwmStart(void)
  33. {
  34.     TMRA_Start(TMRA_UNIT);
  35. }
  36. /**
  37. * Stop PWM output:
  38. *   TMRA_Stop(TMRA_UNIT);
  39. *   or
  40. *   TMRA_PWM_OutputCmd(TMRA_UNIT, TMRA_PWM_x_CH, DISABLE);
  41. */
  42. void TimeraPwmStop(void)
  43. {
  44.     TMRA_Stop(TMRA_UNIT);
  45. }
  46. int32_t TimeraPwmSetDuty(uint8_t u8Duty)
  47. {
  48.     uint32_t u32CompareValue;
  49.     // 限制占空比范围(0~100)
  50.     if (u8Duty > 100)
  51.     {
  52.         return LL_ERR_INVD_PARAM;
  53.     }
  54.     // 将0-100的占空比映射到0-(TMRA_PERIOD_VAL-1)的比较值范围
  55.     u32CompareValue = ((499 - 1) * u8Duty) / 100;
  56.     TMRA_SetCompareValue(TMRA_UNIT, TMRA_PWM_CH, u32CompareValue);

  57.     return LL_OK;
  58. }

  59. /****************************************************END OF FILE****************************************************/
复制代码
  1. /*
  2. * Author: ClingYang
  3. * Date: 2025-11-11
  4. * Version: 1.0
  5. */
  6. #ifndef __TIMERA_PWM_H__
  7. #define __TIMERA_PWM_H__

  8. #ifdef __cplusplus
  9. extern "C" {
  10. #endif
  11. #include "main.h"
  12. #define TMRA_UNIT         (CM_TMRA_6)
  13. #define TMRA_PERIPH_CLK   (FCG2_PERIPH_TMRA_6)
  14. #define TMRA_PWM_CH       (TMRA_CH4)

  15. #define TMRA_PWM_PORT     (GPIO_PORT_A)
  16. #define TMRA_PWM_PIN      (GPIO_PIN_15)
  17. #define TMRA_PWM_PIN_FUNC (GPIO_FUNC_5)

  18. #define TMRA_MD           (TMRA_MD_SAWTOOTH)  
  19. #define TMRA_DIR          (TMRA_DIR_UP)
  20. #define TMRA_PERIOD_VAL   (500U - 1U) // 200kHz @ 100MHz PCLK1
  21. #define TMRA_PWM_CMP_VAL  (149U) // 30%占空比

  22. void TimeraPwmInit(void);
  23. void TimeraPwmStart(void);
  24. void TimeraPwmStop(void);
  25. int32_t TimeraPwmSetDuty(uint8_t u8Duty);
  26. #ifdef __cplusplus
  27. }
  28. #endif

  29. #endif /*__TIMERA_PWM_H__*/
复制代码

可以了     
stcTmraInit.sw_count.u8CountDir = TMRA_DIR_UP; // 向上计数模式

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表