基于HC32F003_DDL_Rev1.0.2。需要配置TIM2的优先级高于TIM1。
TIM2中断里对IO口进行取反并用示波器观察,TIM1不启动时其波形是稳定的,启动后波形就不稳定,更改优先级0-3不起作用。仿真时观察优先级寄存器,是配置成功的。
代码如下,求解答:
void bt_init (void)
{
stc_bt_config_t stcBtConfig;
uint16_t u16ArrData;
DDL_ZERO_STRUCT(stcBtConfig);
//Basetime 外设时钟使能
Clk_SetPeripheralGate(ClkPeripheralBt, TRUE);
//工作模式
stcBtConfig.enGateP = BtPositive; //门控极性控制
stcBtConfig.enGate = BtGateDisable; //无门控
stcBtConfig.enPRS = BtPCLKDiv1; //PCLK分频
stcBtConfig.enTog = BtTogDisable; //TOG输出Disable
stcBtConfig.enCT = BtTimer; //定时器功能
stcBtConfig.enMD = BtMode2; //自动重装载16位
Bt_Init(TIM1, &stcBtConfig);
Bt_Init(TIM2, &stcBtConfig);
//中断使能
Bt_ClearIntFlag(TIM1);
EnableNvic(TIM1_IRQn,3,TRUE);
Bt_EnableIrq(TIM1);
Bt_ClearIntFlag(TIM2);
EnableNvic(TIM2_IRQn,1,TRUE); //FALSE
Bt_EnableIrq(TIM2);
//设置重载值和计数值
u16ArrData = 0x10000 - (SystemCoreClock /(1000)); //1000Hz
Bt_ARRSet(TIM1, u16ArrData);
Bt_Cnt16Set(TIM1, u16ArrData);
u16ArrData = 0x10000 - (SystemCoreClock /(50*64)); //
Bt_ARRSet(TIM2, u16ArrData);
Bt_Cnt16Set(TIM2, u16ArrData);
//启动
Bt_Run(TIM1); //
Bt_Run(TIM2); //用于触发ADC
}
|