【MSPM0G3507 系列】简单的PWM频率和占空比设置

引言

最近在准备电赛的一些M0的程序,作为笔记也同时会不定期分享一些有关M0方面的小知识以及M0关于测控仪表类的的一些知识。

主要代码

点击查看代码
#include "ti_msp_dl_config.h"

/*
 * 函数功能:设置 PWM 频率和占空比
 * 输入参数:
 * frea:频率,Hz
 * duty:占空比,0-1
 * Timer:定时器
 * Cannel:定时器通道
 */
void Set_Freq_Duty(float_t freq, float_t duty, GPTIMER_Regs * Timer, DL_TIMER_CC_INDEX Channel) {
    if (duty > 1.0f) duty = 1.0f;
    else if (duty < 0.0f) duty = 0.0f;
    uint32_t final_duty_val;
    uint32_t final_freq_val;
    final_freq_val = CPUCLK_FREQ / freq;                // 频率换算
    DL_TimerG_setLoadValue(Timer, final_freq_val);      // 设置频率
    final_duty_val = final_freq_val * (1.0f - duty);    // 占空比换算
    DL_TimerG_setCaptureCompareValue(Timer, final_duty_val, Channel);   // 设置占空比
}

int main(void)
{
    SYSCFG_DL_init();

    DL_TimerG_startCounter(PWM_0_INST);
    DL_TimerG_setCaptureCompareValue(PWM_0_INST, 30400, DL_TIMER_CC_0_INDEX);
    while (1) {
        if (!DL_GPIO_readPins(GPIO_BUTTON_PORT, GPIO_BUTTON_PIN_BUTTON_PIN)) {
            Set_Freq_Duty(1000.0f, 0.05, PWM_0_INST, DL_TIMER_CC_0_INDEX);
            DL_GPIO_setPins(GPIO_LED_RED_PORT, GPIO_LED_RED_PIN_LED_RED_PIN);
            DL_GPIO_setPins(GPIO_LED_BLUE_PORT, GPIO_LED_BLUE_PIN_LED_BLUE_PIN);
            DL_GPIO_setPins(GPIO_LED_GREEN_PORT, GPIO_LED_GREEN_PIN_LED_GREEN_PIN);
        } else {
            Set_Freq_Duty(500.0f, 0.05, PWM_0_INST, DL_TIMER_CC_0_INDEX);
            DL_GPIO_clearPins(GPIO_LED_RED_PORT, GPIO_LED_RED_PIN_LED_RED_PIN);
            DL_GPIO_clearPins(GPIO_LED_BLUE_PORT, GPIO_LED_BLUE_PIN_LED_BLUE_PIN);
            DL_GPIO_clearPins(GPIO_LED_GREEN_PORT, GPIO_LED_GREEN_PIN_LED_GREEN_PIN);
        }
    }
}

博客导航

博客导航

posted @ 2025-05-21 15:32  膝盖中箭卫兵  阅读(586)  评论(0)    收藏  举报
ORCID iD icon https://orcid.org/0000-0001-5102-772X