stm32 滴答定时器配置优先级导致程序异常
滴答定时器中断优先级程序中配置如下:
NVIC_InitStructure.NVIC_IRQChannel = SysTick_IRQn; //嘀嗒定时器中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//占先式优先级设置为1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //副优先级设置为0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//中断使能
NVIC_Init(&NVIC_InitStructure);
SysTick_IRQn 是数值为-1,而NVIC_InitStructure.NVIC_IRQChannel是无符号类型,隐性转换NVIC_IRQChannel赋值为255;
在NVIC_Init(&NVIC_InitStructure);函数中有如下操作
NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority;
等价于NVIC->IP[255]= tmppriority
IP[]数组是中断优先级配置数组,IP[]地址范围如下图,从0xe000e400到0xe000e4eF,
而IP[255]地址为0xe000e4ff 未查到该地址的含义。
有可能是越界,导致异常
具体的滴答定时器配置优先级可参看