本帖最后由 icpal 于 2022-3-21 16:01 编辑
第一次做arm的项目,用的是HC32F072JATA,有一个功能实现不了:
TIM0输出PWM信号,用于驱动步进电机,然后用TIM1在内部互联,对TIM0的PWM进行记数。由于官网的包里找不到类似的参考例程,打电机官网不给支持,自己也没有琢磨出来。
问题表现在,TIM0的PWM开启后,读TIM1的CNT值,能从0跑变到1,但一直为1不再增加。
于是我把代码简代了,功能改成,我在PB10和PB11手动输入高电平脉冲信号,让TIM1去记数,但记得的结果,仍然是1。即便我把CNT值初始为1000,执行后,CNT值还是1
以下是TIM1的初始化代码:
void TIM1_Init()
{
//------------------ 端口配置初始化 ------------------
stc_gpio_cfg_t stcTIM1Port;
DDL_ZERO_STRUCT(stcTIM1Port);
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); //GPIO 外设时钟使能
stcTIM1Port.enDir = GpioDirIn;
//PB10设置为TIM1_CHA
Gpio_Init(GpioPortB, GpioPin10, &stcTIM1Port);
Gpio_SetAfMode(GpioPortB,GpioPin10,GpioAf3);
//PB11设置为TIM1_CHB
Gpio_Init(GpioPortB, GpioPin11, &stcTIM1Port);
Gpio_SetAfMode(GpioPortB,GpioPin11,GpioAf2);
//------------------ TIM1 模式1 ------------------
Sysctrl_SetPeripheralGate(SysctrlPeripheralBaseTim, TRUE); //Base Timer外设时钟使能
// TIM1初始化(模式1)
Bt_Mode1_Init(TIM1, &(stc_bt_mode1_cfg_t){
.enWorkMode = BtWorkMode1, //MODE //工作模式 :PWC模式
.enCT = BtCounter, //CT //功能选择 :定时器
.enPRS = BtPCLKDiv1, //PRS //预除频 :1
.enOneShot = BtPwcCycleDetect //ONESHOT //单次/循 : PWC循环检
});
// PWC 输入配置(模式1)
Bt_M1_Input_Cfg(TIM1, &(stc_bt_pwc_input_cfg_t){
.enTsSel = BtTs7IBFP, //PWC输入 : CHB
// CHA
.enIA0Sel = BtIA0Input,
.enFltIA0 = BtFltNone,
// CHB
.enIB0Sel = BtIB0Input,
.enFltIB0 = BtFltNone,
// ETR
.enETRPhase = BtPortPositive,
.enFltETR = BtFltNone
});
// PWC测量边沿起始结束选择
Bt_M1_PWC_Edge_Sel(TIM1, BtPwcRiseToRise); //上升沿到上升沿捕获
Bt_M1_Cnt16Set(TIM1, 1000); //设置计数初值
}
|
模式1——pwc是测脉宽的,不是计数的。