搜索
bottom↓
回复: 1

STM32-库函数分析

[复制链接]

出0入0汤圆

发表于 2013-8-13 17:17:48 | 显示全部楼层 |阅读模式
void SysTick_ConfigInit(void)
{
        while (SysTick_Config(SystemCoreClock / 10));
        SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
}
追踪SysTick_Config(SystemCoreClock / 10)得:
/**
* @brief  Initialize and start the SysTick counter and its interrupt.
*
* @param   ticks   number of ticks between two interrupts
* @return  1 = failed, 0 = successful
*
* Initialise the system tick timer and its interrupt and start the
* system tick timer / counter in free running mode to generate
* periodical interrupts.
*/
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 */
}
分析如下:
一、if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);输入参数检查,
      如果参数大于SysTick_LOAD_RELOAD_Msk则返回值“1”,表示 failed既失败;
二、追踪SysTick_LOAD_RELOAD_Msk(位屏蔽宏)得到:
      #define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFul << SysTick_LOAD_RELOAD_Pos) 这样的宏定义;
      再次追踪SysTick_LOAD_RELOAD_Pos(位指示宏)得到:
      #define SysTick_LOAD_RELOAD_Pos             0           其后的“0”正好是LOAD在STK_CTRL寄存器中的位置,既Bit0;
三、0xFFFFFF后的ul表示什么呢?
      ul表示无符号长整型既unsigned long的缩写;其整体的含义是0xFFFFFF为无符号长整型数据;
总结:第一句的含义为检查输入的参数是否大于0xFFFFFF;因为这是其允许的最大计数值;
四、对SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
                                     SysTick_CTRL_TICKINT_Msk     |
                                     SysTick_CTRL_ENABLE_Msk;
      此语句是将寄存器CTRT的各个位(CLKSOURCE/TICKINT/ENABLE)为分别进行位移操作,从而使各个位置
位或复位;
      然后再通过位或运算赋值给CTRT寄存器,从而完成寄存器的配置的!

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2013-8-13 17:20:44 | 显示全部楼层
这是我最近学习32时对库函数的一些理解,还请各位大侠指点纠错!谢谢啦!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 02:40

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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