大家好,在开发板上修改例程的时候出现的问题。都搞了我一个多星期了事情是这样的,在《ADC实验(DMA方式)》中把《呼吸灯》的代码加入。
其实《呼吸灯》的主函数就只有TIM3_Breathing_Init();一条函数调用,
然后就进入死循环,其它事情就交给定时器中断输出PWM。
问题就出在定时器中断上面,定时器中断的一设定优先级之后无法跳出,
所以主函数中与ADC、串口相关的函数都没有办法调用。
在调用NVIC_Init(&NVIC_InitStructure)对定时器设定优先级后没有返回(用ULINK2调试)。我调试的代码如下:
printf("\r\n ----这是一个ADC实验4----\r\n");
NVIC_Init(&NVIC_InitStructure);
printf("\r\n ----这是一个ADC实验5----\r\n");
串口调试助手显示:
----这是一个ADC实验4----
之前以为是中断导致串口通讯不可用,后来发现在设定中断优先级NVIC_Init之后函数根本没有返回,
以下是配置中断优先级的代码:
static void NVIC_Config_PWM(void)
{
//中断优先级配置结构体
NVIC_InitTypeDef NVIC_InitStructure;
//配置中断优先级分组1
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
//配置中断优先级
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
printf("\r\n ----这是一个ADC实验4----\r\n");
NVIC_Init(&NVIC_InitStructure);
printf("\r\n ----这是一个ADC实验5----\r\n");
} |