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

关于SysTick_Config的疑问

[复制链接]
野原新之助 提问时间:2016-7-31 17:48 /
XUOHY03Q{M_4DHS`}WKP}AH.png

代码如下:
void SysTick_Init(u32 count)
{
        if(SysTick_Config(SystemCoreClock / count))
        {
                while(1);
        }
        SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
}
SysTick_Config的作用是什么??我找了很久都找不到它的定义,函数手册找不到,软件中找定义也找不到。
我该如何找。





收藏 评论9 发布时间:2016-7-31 17:48

举报

9个回答
Serval 回答时间:2016-7-31 20:48:55
一般IDE的右键菜单里都有“Goto Definition”,可以通过这个找到原始定义。
低版本的Keil需要编译一次才会生成函数/变量间关联信息(Broswe Information)。
或者直接在工程里用全文搜索,也能找出来。

该函数实际是CMSIS中实现,位于core_cm0/3/4.h中,主要是配置Cortex-M内建的SysTick Timer。
SysTick Timer的具体用法请参见Cortex M0或M3/4权威指南中的Operating System Support Features中的The SysTick Timer章节。
  1. /**
  2.   \brief   System Tick Configuration
  3.   \details Initializes the System Timer and its interrupt, and starts the System Tick Timer.
  4.            Counter is in free running mode to generate periodic interrupts.
  5.   \param [in]  ticks  Number of ticks between two interrupts.
  6.   \return          0  Function succeeded.
  7.   \return          1  Function failed.
  8.   \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the
  9.            function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>
  10.            must contain a vendor-specific implementation of this function.
  11. */
  12. __STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
  13. {
  14.   if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
  15.   {
  16.     return (1UL);                                                   /* Reload value impossible */
  17.   }

  18.   SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */
  19.   NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
  20.   SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */
  21.   SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
  22.                    SysTick_CTRL_TICKINT_Msk   |
  23.                    SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */
  24.   return (0UL);                                                     /* Function successful */
  25. }
复制代码


野原新之助 回答时间:2016-8-1 09:46:21
Serval 发表于 2016-7-31 20:48
一般IDE的右键菜单里都有“Goto Definition”,可以通过这个找到原始定义。
低版本的Keil需要编译一次才会 ...

我是用keil的,编译过整个工程后,还是找不到。
野原新之助 回答时间:2016-8-1 09:47:12
CCA(DX(U%G42YG%@KZZ46AI.png
车厘子 回答时间:2016-8-1 10:22:51
本帖最后由 sunnydevil 于 2016-8-1 10:25 编辑

QQ截图20160801101751.png
楼主browse information勾上了么,如果勾上了编译通过以后还跳转不到定义的话,就和二楼说的一样用全工程搜索一般都能找到 1.png

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2 赞一个!

查看全部评分

木木鱼 回答时间:2016-8-1 11:07:41
这个SysTick_Config() 函数,它是属于内核层的 Cortex-M3 通用函数,位于 core_cm3.h 文件中。

搜狗截图16年08月01日1107_1.jpg
废鱼 回答时间:2016-8-1 13:42:26
core_cm3.h中,用来配置TICK的。
Anchor_Yu 回答时间:2016-8-3 13:08:03
STM32的SYSTICK详解
http://www.51hei.com/bbs/dpj-31803-1.html
(出处: 单片机论坛)
希望对你有帮助……
知命 回答时间:2019-3-1 11:27:26

我也遇到了这个问题,SysTick_Config是core_cm0.h文件中的,只要调用这个文件的函数都找不到定义,但是可以编译通过。编译后下载到芯片貌似这函数没起作用。我弄了好几天了,keil也重装了,重新更新。什么方法都用了就是不行。你是怎么解决的可以跟我说说吗!
sylar.z 回答时间:2019-3-1 12:26:02
SysTick_Config是一个内联函数,定义在core_cm3.h(按内核)文件中,在core_cm3.h文件中代码如下:
static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{
  if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);            /* Reload value impossible */

  SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;      /* set reload register */
  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Cortex-M0 System Interrupts */
  SysTick->VAL   = 0;                                          /* 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 (0);                                                  /* Function successful */
}

以下说明内容来自:RM0033_STM32F205xx, STM32F207xx, STM32F215xx和STM32F217xx单片机参考手册
8.1.2 SysTick calibration value register
The SysTick calibration value is fixed to 15000, which gives a reference time base of 1 ms
with the SysTick clock set to 15 MHz (max HCLK/8).

简单的说,调用SysTick_Config(SystemCoreClock / count)函数,可以开启一个频率为count,也就是周期为1/count的周期性中断,中断函数为SysTick_Handler(void)。SysTick_Handler(void)中断优先级高于所有外设中断优先级。

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版