OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5329|回复: 9

请教下如何NVIC如何正确设置。。。按下面现在一运行就死机。。单个测试好象不关DMA和RTC的问题

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2014-11-30
在线时间
0 小时
发表于 2014-11-30 13:19:25 | 显示全部楼层 |阅读模式
5金钱
void NVIC_Initial(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

  NVIC_InitStructure.NVIC_IRQChannel                   = USART1_IRQn;          // 配置串口1为中断源
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;                    // 设置占先优先级为
  NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 0;                    // 设置副优先级为
  NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;               // 使能串口1中断
  NVIC_Init(&NVIC_InitStructure);                                              // 根据参数初始化中断寄存器  

  NVIC_InitStructure.NVIC_IRQChannel                   = EXTI0_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;                    /占优先级
  NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
  NVIC_Init( &NVIC_InitStructure );

  NVIC_InitStructure.NVIC_IRQChannel                   = RTC_IRQn;             //RTC全局中断
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

  NVIC_InitStructure.NVIC_IRQChannel                   = DMA1_Channel1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4; 
  NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 0; 
  NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE; 
  NVIC_Init(&NVIC_InitStructure);                                              // Enable the DMA Interrupt

  NVIC_InitStructure.NVIC_IRQChannel                   = USART2_IRQn;          // 配置串口2为中断源
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5;                    // 设置占先优先级为
  NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 0;                    // 设置副优先级为
  NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;               // 使能串口2中断
  NVIC_Init(&NVIC_InitStructure);                                              // 根据参数初始化中断寄存器   

  NVIC_InitStructure.NVIC_IRQChannel                   = USART3_IRQn;          // 配置串口3为中断源
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 6;                    // 设置占先优先级为
  NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 0;                    // 设置副优先级为
  NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;               // 使能串口3中断
  NVIC_Init(&NVIC_InitStructure);                                              // 根据参数初始化中断寄存器  

  //printf( "配置 NVIC 完成... \r\n" );
}

void EXTI_Initial(void)
{
EXTI_InitTypeDef EXTI_InitStructure;

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
EXTI_ClearITPendingBit(EXTI_Line0);                                //清空中断标志

EXTI_InitStructure.EXTI_Mode    = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_Line    = EXTI_Line0;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);
}


int main(void)
{
  u16 t1;
  u16 t2;  
 
t1 = 36000; 
while(t1--)
  {
    t2 = 250;  //自己定义
    while(t2--) ;    
  }
  
  RCC_Initial();
  GPIO_Initial();
  EXTI_Initial();     // 注释掉可以启动
  NVIC_Initial();     // 注释掉可以启动
  DMA_Initial();
  ADC_Initial();  

  //USART1_Initial();    

//USART2_Initial();                           //printf( "\r\n串行口初始化...\r\n" );  

  //USART3_Initial();
  
  SPI1_Initial();                                 //printf( "SPI初始化...\r\n" );

  Time_Correct = RTC_Configuration();             //printf( "RTC时钟初始化...\r\n" );



最佳答案

查看完整内容[请看2#楼]

问题找到了可以结贴了再次感谢所有关注的朋友 问题出在RCC定义   RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1, ENABLE );                     // 启动USART1   RCC_APB2PeriphClockCmd( RCC_APB1Periph_USART2, ENABLE );      ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2014-11-30
在线时间
0 小时
 楼主| 发表于 2014-11-30 13:19:26 | 显示全部楼层
问题找到了可以结贴了再次感谢所有关注的朋友
问题出在RCC定义
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1, ENABLE );                     // 启动USART1
  RCC_APB2PeriphClockCmd( RCC_APB1Periph_USART2, ENABLE );                     // 启动USART2
  RCC_APB2PeriphClockCmd( RCC_APB1Periph_USART3, ENABLE );                     // 启动USART3
正确的是
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1, ENABLE );                     // 启动USART1
  RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART2, ENABLE );                     // 启动USART2
  RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART3, ENABLE );                     // 启动USART3
今后代码复制粘贴要加注意了。。。。
回复

使用道具 举报

5

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2014-11-26
在线时间
25 小时
发表于 2014-11-30 14:26:09 | 显示全部楼层
你把NVIC初始化放到EXTI初始化前面啊,我的想法是优先级组的配置应该尽早,而且一般应该放在中断配置前面啊,不知道可行否,你试试吧
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2014-11-30
在线时间
0 小时
 楼主| 发表于 2014-11-30 14:45:14 | 显示全部楼层
感谢您的关注,按您的指导测试了还是不行
回复

使用道具 举报

20

主题

232

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2013-6-1
在线时间
0 小时
发表于 2014-11-30 15:24:33 | 显示全部楼层
设置断点调试
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2014-11-30
在线时间
0 小时
 楼主| 发表于 2014-11-30 15:56:42 | 显示全部楼层
刚发现没有写串口中断函数写了后 (因为不熟悉现在每写一行就编译运行下。。。)
单步执行死在 printf( "。。。。。。。" );
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2014-11-30
在线时间
0 小时
 楼主| 发表于 2014-11-30 16:13:00 | 显示全部楼层
虽然问题还没解决但也要总结下:
 1 没有写3个串口的中断函数 后补写上3个串口能够初始化
 2 GPIO里没有定义 2和3号串口的数据收发脚现已经补写上
 3  EXTI_Initial();   
     NVIC_Initial();     
     这两行已经可以运行过去了但是在EXIT0中断里有 printf(".....");其实是死在这里的看来得去研究下printf函数了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-30 22:50:39 | 显示全部楼层
回复【6楼】在空气中飞翔:
---------------------------------
printf不会卡死吧。你输出什么数据?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

80

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-11-26
在线时间
0 小时
发表于 2014-12-1 09:52:26 | 显示全部楼层
这类问题经常遇到,但又会瞬间遗忘。
回复

使用道具 举报

18

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2015-4-11
在线时间
0 小时
发表于 2015-4-12 08:33:58 | 显示全部楼层
原来如此~~时钟发来错了
while{努力};
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 18:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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