野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14165|回复: 3

中断优先级设定之后没有返回

[复制链接]
发表于 2015-5-6 16:43:50 | 显示全部楼层 |阅读模式
大家好,在开发板上修改例程的时候出现的问题。都搞了我一个多星期了事情是这样的,在《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");       

}



回复

使用道具 举报

 楼主| 发表于 2015-5-6 16:52:20 | 显示全部楼层
调试跟踪NVIC_Init()的源码,在
//Enable the Selected IRQ Channels
NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] = (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
这一句之后没有再往下运行了。
回复 支持 反对

使用道具 举报

发表于 2015-5-6 17:54:55 | 显示全部楼层
你是不是没有在stm32f10x_it.c文件中加入定时器的中断服务函数?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-7 09:36:12 | 显示全部楼层
flyleaf 发表于 2015-5-6 17:54
你是不是没有在stm32f10x_it.c文件中加入定时器的中断服务函数?

是的,在中断服务函数中没有加入对应的响应。不好意思。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-6 20:00 , Processed in 0.045354 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表