STM32用SysTick来做定时器

来源:互联网 发布:js 中文编码 编辑:程序博客网 时间:2024/04/28 15:41

1 硬件电路配置

这里还是借用前面LED电路我就不贴图片。

2 时钟说明

SysTick和HCK的时钟频率是一样的库函数代码如下

/** * @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 */}
由库函数可知道没有进行分频动作所以时钟和主时钟一样
配置时钟中断的时间间隔
<pre name="code" class="cpp">void SysTick_Init(void){/* SystemFrequency / 1000    1ms中断一次 * SystemFrequency / 100000 10us中断一次 * SystemFrequency / 1000000 1us中断一次 *///if (SysTick_Config(SystemFrequency / 100000))// ST3.0.0库版本if (SysTick_Config(SystemCoreClock / 1000))// ST3.5.0库版本{ /* Capture error */ while (1);}// 我需要不断的开启中断所以这句话屏蔽起来 //SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;}
用中断模式所以需要在中断文件中做定时标志。一下这个函数在中断文件中
<pre name="code" class="cpp">/**  * @brief  This function handles SysTick Handler.  * @param  None  * @retval : None  */void SysTick_Handler(void){TimingDelay_Decrement();}
中断函数在调用一个计数函数,计数函数应该放在外面一个公共文件中方便各个文件中数据传递。
/* * 函数名 :TimingDelay_Decrement * 描述  获取节拍程序 * 输入  无 * 输出 无 * 调用  在 SysTick 中断函数 SysTick_Handler()调用 */  void TimingDelay_Decrement(void){if (TimingDelay != 0x00){ TimingDelay--;}}








0 0
原创粉丝点击