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,

stm32 滴答定时器配置优先级导致程序异常

而IP[255]地址为0xe000e4ff 未查到该地址的含义。

 

有可能是越界,导致异常

 

具体的滴答定时器配置优先级可参看

https://blog.****.net/sunjiajiang/article/details/7741715