#include "PWM.h"
void GPTM0_Configuration(void)
{
TM_TimeBaseInitTypeDef TM_TimeBaseInitStruct; // 声明结构体
TM_OutputInitTypeDef TM_OutputInitStruct;
CKCU_PeripClockConfig_TypeDef CKCUClock = {{ 0 }};
CKCUClock.Bit.GPTM0 = 1;
CKCUClock.Bit.AFIO = 1;
CKCUClock.Bit.PA = 1;
CKCU_PeripClockConfig(CKCUClock, ENABLE); // 时钟使能
AFIO_GPxConfig(GPIO_PA, AFIO_PIN_4, AFIO_MODE_1 ); // 开启复用功能 AFIO_FUN_PWM
AFIO_GPxConfig(GPIO_PA, AFIO_PIN_5, AFIO_MODE_1 ); // 开启复用功能 AFIO_FUN_PWM
GPIO_DirectionConfig (HT_GPIOA, GPIO_PIN_4, GPIO_DIR_OUT); // 输入输出方向 @arg GPIO_DIR_IN @arg GPIO_DIR_OUT
GPIO_DirectionConfig (HT_GPIOA, GPIO_PIN_5, GPIO_DIR_OUT); // 输入输出方向 @arg GPIO_DIR_IN @arg GPIO_DIR_OUT
TM_OutputStructInit(&TM_OutputInitStruct); //填写 TM_OutputInit 每个成员的默认值
// 定时器时基以及计数方式初始化
TM_TimeBaseInitStruct.Prescaler = 200-1; // 预分频系数
TM_TimeBaseInitStruct.CounterReload = 4800-1; // 计数周期
TM_TimeBaseInitStruct.RepetitionCounter = 0;
TM_TimeBaseInitStruct.CounterMode = TM_CNT_MODE_UP; // 计数模式
TM_TimeBaseInitStruct.PSCReloadTime = TM_PSC_RLD_IMMEDIATE;// 立即重装载
TM_TimeBaseInit(HT_GPTM0, &TM_TimeBaseInitStruct);
TM_CRRPreloadCmd(HT_GPTM1,ENABLE);
//TM_ClearFlag(HT_GPTM1,TM_FLAG_UEV);
// 通道及输出模式初始化
TM_OutputInitStruct.Channel = TM_CH_0; //选择通道
TM_OutputInitStruct.OutputMode = TM_OM_PWM1; //PWM模式
TM_OutputInitStruct.Control = TM_CHCTL_ENABLE; // GPTM通道使能
TM_OutputInitStruct.ControlN = TM_CHCTL_DISABLE;
TM_OutputInitStruct.Polarity = TM_CHP_NONINVERTED; // 通道极性,@arg TM_CHP_INVERTED是低电平或下降沿 @arg TM_CHP_NONINVERTED是上升沿
TM_OutputInitStruct.Channel = TM_CH_1; //选择通道
TM_OutputInitStruct.OutputMode = TM_OM_PWM1; //PWM模式
TM_OutputInitStruct.Control = TM_CHCTL_ENABLE; // GPTM通道使能
TM_OutputInitStruct.ControlN = TM_CHCTL_DISABLE;
TM_OutputInitStruct.Polarity = TM_CHP_NONINVERTED; // 通道极性,@arg TM_CHP_INVERTED是低电平或下降沿 @arg TM_CHP_NONINVERTED是上升沿
TM_OutputInit(HT_GPTM0, &TM_OutputInitStruct);
TM_Cmd(HT_GPTM0, ENABLE); //开启GPTM0
}
以上为PWM初始化代码。
#include "ht32.h"
#include "ht32_board.h"
#include "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h" // Device header
#include "PWM.h"
int main()
{
/*这里放各种变量初始化*/
/*这里放各种函数初始化*/
void GPTM0_Configuration(void);
/*这里放主体函数*/
while(1){
//TM_SetCaptureCompare0(HT_GPTM0,0); //设置占空比,TM_SetCaptureCompare后的0表示通道0
TM_SetCaptureCompare1(HT_GPTM0,0);
}
}
以上为主函数代码。
出现情况:无论如何修改TM_SetCaptureCompare0函数的值,或者直接注释掉这个函数,PA4都会锲而不舍地输出高电平。反之,无论如何修改TM_SetCaptureCompare1函数的值,PA5都不会输出任何电平。
求大佬帮忙解答。