OpenEdv-开源电子网

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

关于函数SysTick_Config(uint32_t ticks)是灰色的疑问

[复制链接]

11

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2017-3-17
在线时间
83 小时
发表于 2023-11-30 19:32:10 | 显示全部楼层 |阅读模式
1金钱
在HAL_Init()函数调用中,最终使用到了core_cm4.h文件中的__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)函数。但是这个__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)函数是条件选择编译的#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U),__Vendor_SysTickConfig没有在core_cm4.h文件中被声明过(在stm32f407xx.h中有声明__Vendor_SysTickConfig,但是core_cm4.h没有包含stm32f407xx.h),所以不会编译到__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)函数(在keil中显示是灰色的)。但实际编译又没有问题,请大神解惑一下,感谢!
下面是程序原文

#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)

/**
  \brief   System Tick Configuration
  \details Initializes the System Timer and its interrupt, and starts the System Tick Timer.
           Counter is in free running mode to generate periodic interrupts.
  \param [in]  ticks  Number of ticks between two interrupts.
  \return          0  Function succeeded.
  \return          1  Function failed.
  \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the
           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>
           must contain a vendor-specific implementation of this function.
*/
__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 */
}

#endif

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2017-3-17
在线时间
83 小时
 楼主| 发表于 2024-1-11 15:21:16 | 显示全部楼层
__Vendor_SysTickConfig在文件stm32f407xx.h中的第51行有使用宏定义为0u。__Vendor_SysTickConfig的双下划线表示该宏是整个编译器使用的宏。
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2024-9-13
在线时间
1 小时
发表于 3 天前 | 显示全部楼层
同问,为什么灰色能被调用????
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2024-9-13
在线时间
1 小时
发表于 3 天前 | 显示全部楼层
本帖最后由 风吹过的稻田 于 2024-11-19 14:46 编辑

前面有   #define __Vendor_SysTickConfig    0U       /*!< Set to 1 if different SysTick Config is used  */
为什么这块     (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)      还是灰的????
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 06:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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