- #include "timera_pwm.h"
- extern uint32_t test_var;
- /**
- * @brief TimerA configuration.
- * @param None
- * @retval None
- */
- static void TmrAConfig(void)
- {
- stc_tmra_init_t stcTmraInit;
- stc_tmra_pwm_init_t stcPwmInit;
- /* 1. Enable TimerA peripheral clock. */
- FCG_Fcg2PeriphClockCmd(TMRA_PERIPH_CLK, ENABLE);
- /* 2. Set a default initialization value for stcTmraInit. */
- (void)TMRA_StructInit(&stcTmraInit);
- /* 3. Modifies the initialization values depends on the application. */
- stcTmraInit.sw_count.u8CountMode = TMRA_MD_SAWTOOTH; // 鋸齒波
- stcTmraInit.sw_count.u8CountDir = TMRA_DIR_UP; // 向上計數模式
- stcTmraInit.u32PeriodValue = (500UL-1UL);
- (void)TMRA_Init(TMRA_UNIT, &stcTmraInit);
- (void)TMRA_PWM_StructInit(&stcPwmInit);
- stcPwmInit.u32CompareValue = 1UL; // 占空比50%
- GPIO_SetFunc(TMRA_PWM_PORT, TMRA_PWM_PIN, TMRA_PWM_PIN_FUNC);
- (void)TMRA_PWM_Init(TMRA_UNIT, TMRA_PWM_CH, &stcPwmInit);
- TMRA_PWM_OutputCmd(TMRA_UNIT, TMRA_PWM_CH, ENABLE);
- }
- void TimeraPwmInit(void)
- {
- TmrAConfig();
- TMRA_Start(TMRA_UNIT);
- }
- void TimeraPwmStart(void)
- {
- TMRA_Start(TMRA_UNIT);
- }
- /**
- * Stop PWM output:
- * TMRA_Stop(TMRA_UNIT);
- * or
- * TMRA_PWM_OutputCmd(TMRA_UNIT, TMRA_PWM_x_CH, DISABLE);
- */
- void TimeraPwmStop(void)
- {
- TMRA_Stop(TMRA_UNIT);
- }
- int32_t TimeraPwmSetDuty(uint8_t u8Duty)
- {
- uint32_t u32CompareValue;
- // 限制占空比范圍(0~100)
- if (u8Duty > 100)
- {
- return LL_ERR_INVD_PARAM;
- }
- // 將0-100的占空比映射到0-(TMRA_PERIOD_VAL-1)的比較值范圍
- u32CompareValue = ((499 - 1) * u8Duty) / 100;
- TMRA_SetCompareValue(TMRA_UNIT, TMRA_PWM_CH, u32CompareValue);
- return LL_OK;
- }
- /****************************************************END OF FILE****************************************************/
復制代碼- /*
- * 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 (CM_TMRA_6)
- #define TMRA_PERIPH_CLK (FCG2_PERIPH_TMRA_6)
- #define TMRA_PWM_CH (TMRA_CH4)
- #define TMRA_PWM_PORT (GPIO_PORT_A)
- #define TMRA_PWM_PIN (GPIO_PIN_15)
- #define TMRA_PWM_PIN_FUNC (GPIO_FUNC_5)
- #define TMRA_MD (TMRA_MD_SAWTOOTH)
- #define TMRA_DIR (TMRA_DIR_UP)
- #define TMRA_PERIOD_VAL (500U - 1U) // 200kHz @ 100MHz PCLK1
- #define TMRA_PWM_CMP_VAL (149U) // 30%占空比
- void TimeraPwmInit(void);
- void TimeraPwmStart(void);
- void TimeraPwmStop(void);
- int32_t TimeraPwmSetDuty(uint8_t u8Duty);
- #ifdef __cplusplus
- }
- #endif
- #endif /*__TIMERA_PWM_H__*/
復制代碼
可以了
stcTmraInit.sw_count.u8CountDir = TMRA_DIR_UP; // 向上計數模式 |