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

小白对SysTick的理解

[复制链接]
在路上11111111 发布时间:2016-11-27 15:58
  1. #include "stm32f10x.h"
  2. static __IO u32 Timing;
  3. void LED_Init()
  4. {
  5.     GPIO_InitTypeDef   GPIO_InitStructure;
  6.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);

  7.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  8.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  9.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  10.         GPIO_Init(GPIOD,&GPIO_InitStructure);
  11.         GPIOD->BSRR = GPIO_Pin_2;
  12. }

  13. /************寄存器版的SysTick******(缺点是while(!(SysTick->CTRL & =0X00010000));
  14.              在这个时候会浪费CPU*
  15. void Delay_Us(uint32_t nTime)
  16. {
  17.    SysTick->LOAD = 72*nTime;//装入定时的次数
  18.    *****    LOAD        重装值寄存器        就是当计数到0的说时候,再次从该数值进行倒计时
  19.          ****
  20.    SysTick->CTRL = 5;//       CTRL是控制和状态寄存器      
  21.    ***   16    COUNTFLAG   当计数满的时候自动置为1
  22.               
  23.           2     CLKSOURCE   当该位是0的时候选择的是72M的时钟
  24.                                     当该位是1的时候选择的是9M的时钟
  25.                   1     SysTick     当该位是0的时候计数到0的时候不会发送异常处理的标志
  26.                                     当该位是1的时候计数到1的时候会发送异常处理的标志
  27.                   0     ENABLE      (使能位)当该位为0的时候SysTick不会打开
  28.                                     当该位为1的时候打开SysTick;
  29.   ************     
  30.    while(!(SysTick->CTRL&0x00010000));
  31.    SysTick->CTRL = 0;
  32. }*/

  33. void SysTick_Handler()
  34. {
  35.    if(Timing!=0)
  36.       Timing--;
  37. }
  38. void Delay_us(uint32_t us)
  39. {
  40.     Timing = us;
  41.         SysTick->CTRL |= 0x07;
  42.         while(Timing!=0);
  43.         SysTick->CTRL |= 0x00;
  44. }

  45. void Delay_ms(uint32_t ms)
  46. {
  47.    Delay_us(ms*1000);
  48. }

  49. void Delay_s(uint32_t s)
  50. {
  51.   Delay_ms(s*1000);
  52. }

  53. int main()
  54. {         
  55.     //uint32_t i;
  56.     LED_Init();
  57.         SysTick_Config(72);
  58.         while(1)
  59.         {
  60.            GPIO_ResetBits(GPIOD,GPIO_Pin_2);//输出低电平
  61.            Delay_s(1);
  62.            GPIO_SetBits(GPIOD,GPIO_Pin_2);//输出高电平
  63.            Delay_s(1);
  64.         }
  65.    
  66. }大家有什么问题可以提出来,一块分析解决。
复制代码

评分

参与人数 1 ST金币 +5 收起 理由
zero99 + 5

查看全部评分

收藏 1 评论4 发布时间:2016-11-27 15:58

举报

4个回答
高二毛 回答时间:2016-11-28 08:26:08
感谢分享
peter001 回答时间:2016-11-28 11:46:12
支持一下
wdshuang09 回答时间:2016-11-28 12:24:23
支持一下              
andypanfan 回答时间:2016-11-28 21:24:17

感谢分享

所属标签

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