是这样的: 我的主程序初始化 串口3,定时器2和定时器3, 当我添加完定时器2初始化代码后 ,下载进去发现不工作了,一开始 我只用到串口3和定时器3 都还是工作的好好的,现在考虑
到项目实际情况,还要增加一个定时器,如是我就把定时器3的拷贝一下,在改成2,我想这样应该没问题,但是改完后下载进去就是不工作,如是我就这样:把定时器2的初始化函数注释掉,再
下载进去观察,注释掉后又能工作了,这样确定下来了是初始化定时器2的时候带来的问题,于是我就再把初始化定时器2的程序 一小部分,一小部分的注释,希望一步步缩小范围来找到出错的地方
,最后查到了下面的这个情况,如果我把 下面红色部分注释掉,原来的定时器3和串口3都还能工作,一旦不注释掉,就导致我的整个程序都不工作了
我看来看去 ,下面这5行红色的代码绝对没有问题啊 我以人头担保,但是这5句一上来就弄得我的整个程序不工作,去掉又正常 ,被他搞得受不了了。
// NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //TIM2中断
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级3级
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
// NVIC_Init(&NVIC_InitStructure);
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置优先级分组:先占优先级0位,从优先级4位
#ifdef VECT_TAB_RAM
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); //向量表位于RAM
#else
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); //向量表位于FLASH
#endif
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; //USART3中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器USART1
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级3级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
// NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //TIM3中断
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级3级
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
// NVIC_Init(&NVIC_InitStructure);
} |