这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » 【CH582M】CH582M的定时器(5)PWM模式中重复发送的特性

共1条 1/1 1 跳转至

【CH582M】CH582M的定时器(5)PWM模式中重复发送的特性

专家
2026-09-05 13:52:47     打赏

在CH582M的定时器的模式设置寄存器(R8_TMRx_CTRL_MOD)中有一个和重复已发送有关的位:RB_TMR_PWM_REPEAT,对该位的功能描述为:

image.png

经过长时间的测试,发现这个位在实际上只对定时器1(TMR1)和定时器2(TMR2)有用。使用该重复发送功能需要配合DMA功能使用。利用DMA自动从数据源取得占空比数据传送给FIFO寄存器,控制定时器产生指定次数的重复的PWM波。

测试代码如下:

#include "CH58x_common.h"
 
#define PWM_BUF_SIZE 100
uint32_t PwmBuf[PWM_BUF_SIZE] = {1000, 5000, 500, 6000, 100};
 
void DebugInit(void) {
    GPIOA_SetBits(GPIO_Pin_9);
    GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);
    GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA);
    UART1_DefInit();
}
 
int main() {
    uint8_t i;
 
    SetSysClock(CLK_SOURCE_PLL_60MHz);
    /* 配置串口调试 */
    DebugInit();
    PRINT("Start ......\r\n");
 
    //=======================================TMR1
    PRINT("TMR1\n");
    // 设置PB10为输出模式
    GPIOB_SetBits(GPIO_Pin_10);
    GPIOB_ModeCfg(GPIO_Pin_10, GPIO_ModeOut_PP_5mA);  
    // 映射到PB10
    GPIOPinRemap(ENABLE, RB_PIN_TMR1);
    // 配置TMR1为PWM模式,输出到PB10
    TMR1_PWMCycleCfg(6000); // PWM周期 100us :  6000/(60000000)=0.0001秒
    TMR1_PWMInit(High_Level, PWM_Times_4);      // 重复发送4次
    TMR1_DMACfg(ENABLE, (uint16_t)(uint32_t)&PwmBuf[0], (uint16_t)(uint32_t)&PwmBuf[2], Mode_LOOP);
 
    //=======================================TMR2
    PRINT("TMR2\n");
    GPIOB_ModeCfg(GPIO_Pin_11, GPIO_ModeOut_PP_5mA);
      // 映射到PB11    
    GPIOPinRemap(ENABLE, RB_PIN_TMR2);
 
    TMR2_PWMInit(Low_Level, PWM_Times_8);      // 重复发送8次
    TMR2_PWMCycleCfg(6000); // 周期 100us
    
    TMR2_DMACfg(ENABLE, (uint16_t)(uint32_t)&PwmBuf[0], (uint16_t)(uint32_t)&PwmBuf[2], Mode_LOOP);
 
    while(1) ;
}


代码的功能是让定时器1由指定的占空比数组获取占空比系数,产生每个占空比发送四次的波形;让定时器2由指定的占空比数组获取占空比系数,产生每个占空比发送八次波形;两个定时器产生的PWM波形的周期都固定为100μs,占空比系数数组长度为2,分别是1000,5000。对应的占空比为1000/6000,5000/6000,即16.67%和83.33%。

程序运行后,逻辑分析仪获得的信号:

image.png

对于定时器0和定时器3,如果想要实现同样的结果,无法通过指定RB_TMR_PWM_REPEAT完成,但是可以在中断中通过代码手动实现。







关键词: CH582M     TMR     PWM    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]