打印

STM32 NVICSystemHandlerPriority也最多16抢占优先级?香版请再进

[复制链接]
3700|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wu0232|  楼主 | 2008-11-26 18:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
也是总共4bit可供设置?可自行选择抢占优先级和亚优先级的位数?


另外,有无可能把system handler的优先级设置得比那些外部中断低? 例如,把systick的中断优先级设置得比USART1的优先级低? 

我仔细看了下手册,似乎是可以的吧?

请问下各位高手~谢谢~
沙发
香水城| | 2008-11-26 18:35 | 只看该作者

可以,但很危险

系统级的异常很多都是致命的,如BusFault、UsageFault,如果不做为高优先级处理,很可能会出大问题。

SYSTICK通常是作为OS的调度时钟,如果它的优先级比USART还低,OS的调度可能会失灵的,除非你不用它。如果不用SYSTICK,设不设置优先级都无所谓。

使用特权

评论回复
板凳
wu0232|  楼主 | 2008-11-26 18:54 | 只看该作者

非常感谢

还有1个问题,如果分组方式NVIC_PriorityGroup定了,例如设定NVIC_PriorityGroup_2,那么SystemHandlerPriority和外部中断的可以设定的抢占优先级都是0-3吧(NVIC_PriorityGroup_2这种分组方式对二者都生效)?


下面是万利扳子的lcd demo中的, 这里的优先级排序应该是
TIM2_IRQChannel > SystemHandler_SysTick > EXTI3_IRQChannel > EXTI4_IRQChannel 吧?

  /* Configure the Priority Group to 2 bits */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

  /* enabling interrupt */
  NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);


    /* Enable the EXTI3 Interrupt on PD.3 */
  NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

    /* Enable the EXTI4 Interrupt on PD.4 */
  NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

  /* Configure the SysTick handler priority */
  NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick, 2, 0);

使用特权

评论回复
地板
wu0232|  楼主 | 2008-11-27 19:37 | 只看该作者

up一下

香版和高手帮着看看我上面的理解对不对~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

130

帖子

1

粉丝