你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32的systick的中断配置

[复制链接]
yugong 提问时间:2016-5-14 10:42 /
    请问systick的中断配置如何配置,没有对SysTick_IRQn 进行配置却也触发了中断,请问哪位高手能帮我解释下,谢谢。
收藏 评论8 发布时间:2016-5-14 10:42

举报

8个回答
294479435@qq.co 回答时间:2016-5-14 11:29:53
看下手册:SysTick_Config(uint32_t ticks);
该函数设置了自动重载入计数器(LOAD)的值,SysTick IRQ的优先级,复位了计数器(VAL)的值,开始计数并打开SysTick IRQ中断。SysTick时钟默认使用系统时钟。
yugong 回答时间:2016-5-14 12:54:29
00-405686 发表于 2016-5-14 11:29
看下手册:SysTick_Config(uint32_t ticks);
该函数设置了自动重载入计数器(LOAD)的值,SysTick IRQ的优先 ...

SysTick_Config(uint32_t ticks);在core_cm3.h中,但core_cm3.h文件在V2.0版本后没有了,我是想问在高版本的库中怎么配置,谢谢
294479435@qq.co 回答时间:2016-5-14 13:37:45
yugong 发表于 2016-5-14 12:54
SysTick_Config(uint32_t ticks);在core_cm3.h中,但core_cm3.h文件在V2.0版本后没有了,我是想问在高版 ...

还有,你看下V2.0移植到V3.0,而且V2.0没有core_cm3.h,V3.0后面才有吧
xmshao 回答时间:2016-5-14 15:56:29
是个内联函数:
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
_STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
  {
    return (1UL);                                                   /* Reload value impossible */
  }

  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */
  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
  SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
                   SysTick_CTRL_TICKINT_Msk   |
                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */
  return (0UL);                                                     /* Function successful */
}
yugong 回答时间:2016-5-14 19:03:06
00-405686 发表于 2016-5-14 13:37
还有,你看下V2.0移植到V3.0,而且V2.0没有core_cm3.h,V3.0后面才有吧

以下是我测试公共的代码,我没有配置NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);但是测试却成功了,请问是什么原因,谢谢
int        main (void)
{
        rcc_config ();                //        .\config.c
        nvic_config ();                //        .\config.c
        gpio_config ();                //        .\config.c
        usart_config ();        //        .\config.c
        systick_config ();        //        .\config.c
        while (1)
        {        
     GPIO_SetBits(GPIOB, GPIO_Pin_6);
                if(upload_cnt<=5)                                         
                {GPIO_SetBits(GPIOB, GPIO_Pin_5);
           USART_SendData (USART1, upload_cnt);      
                 while ( USART_GetFlagStatus (USART1, USART_FLAG_TXE) == FALSE );}
                else if(upload_cnt<=10)
                 {GPIO_ResetBits(GPIOB, GPIO_Pin_5);}
                else
                 {upload_cnt=0;}
        }

}

void my_systick_IRQHandler (void)                                                                        //        ¶¨Ê±Æ÷ÖжϷþÎñ³ÌÐò
{
        upload_cnt++;                                                                                                        //        ¶¨Ê±Æ÷¼ÆÊý±äÁ¿¼ÓÒ»
        //adc_event = TRUE;
}
void systick_config (void)
{
        SysTick_CLKSourceConfig (SysTick_CLKSource_HCLK_Div8);        //        8·ÖƵ£º8M * 9 /8 = 9M
       //NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);
        SysTick_SetReload (9000);                                                                  //        1ms
        SysTick_ITConfig (ENABLE);                                                                //        ´ò¿ªSystickÖжÏ
        SysTick_CounterCmd(SysTick_Counter_Enable);                        //        Ê¹ÄÜSystick
}

void SysTick_CLKSourceConfig(u32 SysTick_CLKSource)
{
  /* Check the parameters */
  assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));

  if (SysTick_CLKSource == SysTick_CLKSource_HCLK)
  {
    SysTick->CTRL |= SysTick_CLKSource_HCLK;
  }
  else
  {
    SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;
  }
}

void SysTick_SetReload(u32 Reload)
{
  /* Check the parameters */
  assert_param(IS_SYSTICK_RELOAD(Reload));

  SysTick->LOAD = Reload;
}

void SysTick_ITConfig(FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_FUNCTIONAL_STATE(NewState));

  if (NewState != DISABLE)
  {
    SysTick->CTRL |= CTRL_TICKINT_Set;
  }
  else
  {
    SysTick->CTRL &= CTRL_TICKINT_Reset;
  }
}

void SysTick_CounterCmd(u32 SysTick_Counter)
{
  /* Check the parameters */
  assert_param(IS_SYSTICK_COUNTER(SysTick_Counter));

  if (SysTick_Counter == SysTick_Counter_Enable)
  {
    SysTick->CTRL |= SysTick_Counter_Enable;
  }
  else if (SysTick_Counter == SysTick_Counter_Disable)
  {
    SysTick->CTRL &= SysTick_Counter_Disable;
  }
  else /* SysTick_Counter == SysTick_Counter_Clear */
  {
    SysTick->VAL = SysTick_Counter_Clear;
  }   
}
294479435@qq.co 回答时间:2016-5-16 08:56:21
yugong 发表于 2016-5-14 19:03
以下是我测试公共的代码,我没有配置NVIC_SetPriority (SysTick_IRQn, (1CTRL |= SysTick_Counter_Enable ...

你这用的是那个库,可以上传工程文件吗?
yugong 回答时间:2016-5-16 19:40:48
00-405686 发表于 2016-5-16 08:56
你这用的是那个库,可以上传工程文件吗?

文件包在附件,请帮我看看,谢谢。

Stm32ADTest.zip

下载

1.76 MB, 下载次数: 3, 下载积分: ST金币 -1

294479435@qq.co 回答时间:2016-5-17 17:50:13
yugong 发表于 2016-5-16 19:40
文件包在附件,请帮我看看,谢谢。

你这个是以前的V2.0的库,现在V3.0的库没有cortexm3_macro、stm32f10x_vector文件的这个才是V3.5的库的工程文件
Unnamed QQ Screenshot20160517174856.png

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版