本帖最后由 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); //设置计数初值
- }
|