OpenEdv-开源电子网

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

SysTick 定时器优先级的设定,请大神解答!

[复制链接]

4

主题

10

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2012-6-18
在线时间
0 小时
发表于 2012-6-22 15:12:50 | 显示全部楼层 |阅读模式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2012-6-22 16:38:32 | 显示全部楼层
这个要看CM3权威指南.
有个SCB->SHPR的寄存器组,设置这个就可以设置SYSTICK的优先级.
在库函数里面的实现代码如下:
void NVIC_SystemHandlerPriorityConfig(u32 SystemHandler, u8 SystemHandlerPreemptionPriority,
                                      u8 SystemHandlerSubPriority)
{
  u32 tmp1 = 0x00, tmp2 = 0xFF, handlermask = 0x00;
  u32 tmppriority = 0x00;

  /* Check the parameters */
  assert_param(IS_PRIORITY_SYSTEM_HANDLER(SystemHandler));
  assert_param(IS_NVIC_PREEMPTION_PRIORITY(SystemHandlerPreemptionPriority));  
  assert_param(IS_NVIC_SUB_PRIORITY(SystemHandlerSubPriority));
    
  tmppriority = (0x700 - (SCB->AIRCR & (u32)0x700))>> 0x08;
  tmp1 = (0x4 - tmppriority);
  tmp2 = tmp2 >> tmppriority;
    
  tmppriority = (u32)SystemHandlerPreemptionPriority << tmp1;
  tmppriority |=  SystemHandlerSubPriority & tmp2;

  tmppriority = tmppriority << 0x04;
  tmp1 = SystemHandler & (u32)0xC0;
  tmp1 = tmp1 >> 0x06; 
  tmp2 = (SystemHandler >> 0x08) & (u32)0x03;
  tmppriority = tmppriority << (tmp2 * 0x08);
  handlermask = (u32)0xFF << (tmp2 * 0x08);
  
  SCB->SHPR[tmp1] &= ~handlermask;
  SCB->SHPR[tmp1] |= tmppriority;
}

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

10

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2012-6-18
在线时间
0 小时
 楼主| 发表于 2012-6-22 16:48:11 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
3ku!这个问题我刚才已经解决了:
void SysTick_NVIC_Configuration(void)
{
    NVIC_InitTypeDef NVIC_InitStructure; 
    
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  
    NVIC_SetPriority(SysTick_IRQn,2);
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}
回复 支持 反对

使用道具 举报

5

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2013-10-11
在线时间
8 小时
发表于 2014-4-17 17:07:37 | 显示全部楼层
回复【3楼】useryob:
---------------------------------
你好,后面的注释是我对这段程序的理解,不知道对吗?
void SysTick_NVIC_Configuration(void) 

    NVIC_InitTypeDef NVIC_InitStructure;  
     
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  // 优先级分组设置,抢占优先级和响应优先级各占两位
    NVIC_SetPriority(SysTick_IRQn,2); //2的高二位为0,所以抢占优先级为0,响应优先级为2
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //
    NVIC_Init(&NVIC_InitStructure); //使能systick的中断
}
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-10 03:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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