打印

stm32库升级到3.3.0 后systick 中断优先级如何设定

[复制链接]
7366|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wxqfhy|  楼主 | 2010-6-18 11:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
stm32库升级到3.3.0 后原来的函数NVIC_SystemHandlerPriorityConfig没有了。
这个函数是用来定义Cortex-M3 中断的,在V3.3.0中没找到与之相对应的函数。
请高手指点一二,谢谢
沙发
ST_ARM| | 2010-6-18 12:43 | 只看该作者
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                // 2 bit for pre-emption priority, 2 bits for subpriority

        NVIC_SetPriority (SysTick_IRQn, 0);                // the highest priority */

使用特权

评论回复
板凳
wxqfhy|  楼主 | 2010-6-18 13:51 | 只看该作者
谢谢,高人指点。我找到了他的函数原型static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
{
  if(IRQn < 0) {
    SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M3 System Interrupts */
  else {
    NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff);    }        /* set Priority for device specific Interrupts  */
}

使用特权

评论回复
地板
xblei| | 2010-6-20 09:22 | 只看该作者
学习了。

使用特权

评论回复
5
hgjinwei| | 2010-6-21 12:31 | 只看该作者
看来我落伍了,我都是直接找寄存器配置的。

使用特权

评论回复
6
txcy| | 2010-6-21 17:29 | 只看该作者
直接找寄存器配置,程序的可读性要差一些

使用特权

评论回复
7
hgjinwei| | 2010-7-4 08:55 | 只看该作者
使用ST的库配置太麻烦了,浪费不少CPU时间和代码空间。

比如配置IO,你一个个库函数的调用,代码写得常常的一串。而直接写寄存器只要:
            RCC->APB2ENR &= ~GPIO_APB2_BUS;
            RCC->APB2ENR |=  WAKEUP_GPIO_APB2;

#if (__WAKEUP_AFIO_CEN & 0x01)                          /* AFIO 配置                                */
    #if (__WAKEUP_AFIO_CEN & 0x02)
            AFIO->EVCR = __WAKEUP_AFIO_EVCR;      
    #endif
    #if (__WAKEUP_AFIO_CEN & 0x04)
            AFIO->MAPR = __WAKEUP_AFIO_MAPR;            
    #endif
    #if (__WAKEUP_AFIO_CEN & 0x08)
            AFIO->EXTICR[0] = __WAKEUP_AFIO_EXTICR1;
            AFIO->EXTICR[1] = __WAKEUP_AFIO_EXTICR2;
            AFIO->EXTICR[2] = __WAKEUP_AFIO_EXTICR3;
            AFIO->EXTICR[3] = __WAKEUP_AFIO_EXTICR4;   
    #endif            
#endif

#if __WAKEUP_GPIOA_CEN
            GPIOA->ODR = __WAKEUP_GPIOA_DR;
            GPIOA->CRL = __WAKEUP_GPIOA_CRL;
            GPIOA->CRH = __WAKEUP_GPIOA_CRH;
#endif

#if __WAKEUP_GPIOB_CEN
            GPIOB->ODR = __WAKEUP_GPIOB_DR;
            GPIOB->CRL = __WAKEUP_GPIOB_CRL;
            GPIOB->CRH = __WAKEUP_GPIOB_CRH;
#endif

#if __WAKEUP_GPIOC_CEN
            GPIOC->ODR = __WAKEUP_GPIOC_DR;
            GPIOC->CRL = __WAKEUP_GPIOC_CRL;
            GPIOC->CRH = __WAKEUP_GPIOC_CRH;
#endif

#if __WAKEUP_GPIOD_CEN
            GPIOD->ODR = __WAKEUP_GPIOD_DR;
            GPIOD->CRL = __WAKEUP_GPIOD_CRL;
            GPIOD->CRH = __WAKEUP_GPIOD_CRH;
#endif

#if __WAKEUP_GPIOE_CEN
            GPIOE->ODR = __WAKEUP_GPIOE_DR;
            GPIOE->CRL = __WAKEUP_GPIOE_CRL;
            GPIOE->CRH = __WAKEUP_GPIOE_CRH;
#endif

使用特权

评论回复
8
txcy| | 2010-7-4 09:02 | 只看该作者
直接找寄存器配置,程序的可读性会很差,只有自己看得懂了,时间长了,可能自己也忘了

使用特权

评论回复
9
xinjie1023| | 2011-4-2 23:21 | 只看该作者
学习中

使用特权

评论回复
10
zsh198702| | 2011-4-3 11:32 | 只看该作者
我都是自己配置的,搞不懂它的库怎么用呀

使用特权

评论回复
11
zxm19820916| | 2013-12-9 17:26 | 只看该作者
ST_ARM 发表于 2010-6-18 12:43
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                // 2 bit for pre-emption priority, 2 bits for subpr ...

NVIC_SystemHandlerPriorityConfig 这个可以设置主优先级和子优先级。
3.3.0只能设置一个优先级,怎么处理啊?

使用特权

评论回复
12
zxm19820916| | 2013-12-9 18:31 | 只看该作者
查看了下例程,好像可以这样设置:
NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 2, 2));

使用特权

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

本版积分规则

10

主题

27

帖子

0

粉丝