systick优先级的理解

sysTick系统嘀嗒定时器并非STM32独有的,它是Cortex内核的部分,CM3为它专门开出一个异常类型,并且在中断向量表中占有一席之地(异常号15)。这样它可以很方便的移植到不同厂商出CM3内核的芯片上,尤其对于有实时操作系统的软件,它一般会作为整个系统的时基,所以这个对操作系统非常重要

1 systick属于内核异常中断应该用SHPR设置其优先级;外设中断属于ISR应该按NVIC_IPRx来设置优先级。

2STM32用4个位(共16级优先级)来管理所有的中断优先级(内核中断systick也用此安排),中断向量表中用inline的方式规定死了SYSTICK的优先级为最低:15。但可以通过NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - x); //默认X=1

3那么如何理解systick在采用比如优先级2组时(抢占2位共4级(0~3);子2位共4级(0~3))呢?答:15即抢占=3;子优先级=3;也就是说始终都是15看你分组怎么分,它总是排在最后。

总结:这也就说明了在移植UCOS时如何看待外设中断与软件定时器及任务的优先级的问题:如果不修改默认systick的硬件优先级,则优先级顺序为:外设中断、软件定时器(各软件定时器暂时没有分优先级按照FIFO顺序)、任务级优先级。特殊说明:

1 如果外设中断的优先级也分成了15(无论你怎么分组:GROUP2(3:3)/GROUP3(7:1))则此时SYSTICK优先级高于同优先级的外设(毕竟内核异常优先级高于外设中断)

2如果想要精确定时也可使用以下函数将systick整成最高优先级)NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 15);

参考http://www.51hei.com/stm32/3561.html

参考2http://my.oschina.net/oceanstack/blog/371413

转载于:https://www.cnblogs.com/jieruishu/p/4444701.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值