当前位置:   article > 正文

Systick滴答定时器_怎么关嘀嗒定时器

怎么关嘀嗒定时器
  1. #include "stm32f10x.h"
  2. uint8_t D_us=0; //微妙系数
  3. uint16_t D_ms=0; //毫秒系数
  4. void delay_Init(void) //延时初始化
  5. {
  6. SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//选择外部时钟源HCLK/8
  7. D_us=SystemCoreClock/8000000; // SystemCoreClock为系统时钟,72MHz。此行代码表示1us需要多少脉冲(9个)
  8. D_ms=D_us*1000;//1ms所需脉冲为1us的1000
  9. }
  10. /*
  11. 利用SysTick定时器实现计数延时
  12. */
  13. void Delay_us(uint32_t nus) //延时nus微秒
  14. {
  15. uint32_t temp;
  16. SysTick->CTRL=0x00; //关闭SysTick定时器
  17. SysTick->LOAD=nus*D_us; //延时重装载值,LOAD倒数到0
  18. SysTick->VAL=0x00; //清空计数器
  19. SysTick->CTRL |=0x01; //启动SysTick定时器
  20. do
  21. {
  22. temp=SysTick->CTRL;
  23. }while((temp&0x01)&&!(temp&(1<<16))); //(temp&0x01)为1,当数到0时,(temp&(1<<16))为1,取反后为0,与后为0,接着执行下面操作,特别的(1<<16)表示1左移16位,与CTRL的16位对位相与
  24. SysTick->CTRL=0x00;
  25. SysTick->VAL=0x00;
  26. }
  27. void Delay_ms(uint32_t nms) //延时nms毫秒
  28. {
  29. uint32_t temp;
  30. SysTick->CTRL=0x00;
  31. SysTick->LOAD=nms*D_ms;
  32. SysTick->VAL=0x00;
  33. SysTick->CTRL |=0x01;
  34. do
  35. {
  36. temp=SysTick->CTRL;
  37. }while((temp&0x01)&&!(temp&(1<<16))); //(temp&0x01)为1,当数到0时,(temp&(1<<16))为1,取反后为0,与后为0,接着执行下面操作,特别的(1<<16)表示1左移16位,与CTRL的16位对位相与
  38. SysTick->CTRL=0x00;
  39. SysTick->VAL=0x00;
  40. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/755696
推荐阅读
相关标签
  

闽ICP备14008679号