一、初始化SysTick

按1ms来设置systick,也可以除以1000000。按1us来设置

  1. SysTick_Config(SystemCoreClock / 1000); //SysTick开启系统tick定时器并初始化其中断,1ms

二、systick的函数

  1. // cycles per microsecond
  2. static volatile uint32_t usTicks = 0;
  3. // current uptime for 1kHz systick timer. will rollover after 49 days. hopefully we won't care.
  4. volatile uint32_t sysTickUptime = 0;
  5. // SysTick
  6. void SysTick_Handler(void)
  7. {
  8. sysTickUptime++;
  9. }
  10. //delay ms
  11. void DelayMs(uint16_t nms)
  12. {
  13. uint32_t t0=micros();
  14. while(micros() - t0 < nms * 1000);
  15. }
  16. // Return system uptime in microseconds (rollover in 70minutes)
  17. //返回 us
  18. uint32_t micros(void)
  19. {
  20. register uint32_t ms, cycle_cnt;
  21. do {
  22. ms = sysTickUptime;
  23. cycle_cnt = SysTick->VAL;
  24. } while (ms != sysTickUptime);
  25. return (ms * 1000) + (usTicks * 1000 - cycle_cnt) / usTicks;
  26. }
  27. // Return system uptime in milliseconds (rollover in 49 days)
  28. uint32_t millis(void)
  29. {
  30. return sysTickUptime;
  31. }

systick启动后会进入SysTick_Handler()的中断,

三、少了重要的一部,哭~T.T

开启RCC时钟!!!!!

  1. void cycleCounterInit(void)
  2. {
  3. RCC_ClocksTypeDef clocks;
  4. RCC_GetClocksFreq(&clocks);
  5. usTicks = clocks.SYSCLK_Frequency / 1000000;
  6. }

遇到的错误:我在初始化MPU6050时,写入数据特别慢。明明计时都准的,不知道为什么特别慢。其他还都能顺利运行。

最后发现时RCC的时钟有问题。

SysTick功能总结的更多相关文章

  1. SysTick 定时器的使用

    SysTick是STM32中的一个24位的定时器. Cortex‐M3处理器内部包含了一个简单的定时器.因为所有的CM3芯片都带有这个定时器,软件在不同 CM3器件间的移植工作得以化简.该定时器的时钟 ...

  2. STM32学习笔记:系统时钟和SysTick定时器

    原文:http://blog.sina.com.cn/s/blog_49cb42490100s60d.html 1.     STM32的时钟系统 在STM32中,一共有5个时钟源,分别是HSI.HS ...

  3. STM32(4)——系统时钟和SysTick

    1.STM32的时钟系统 在STM32中,一共有5个时钟源,分别是HSI.HSE.LSI.LSE.PLL HSI是高速内部时钟,RC振荡器,频率为8MHz: HSE是高速外部时钟,可接石英/陶瓷谐振器 ...

  4. STM32F030, 使用嘀嗒定时器Systick实现LED闪烁

    本文主要解决两个问题 1 STM32的IO口要反转,怎么实现? 2 嘀嗒定时器systick的配置 解答1: 单片机的口,反转非常easy.sbit led = P1 ^6;  led = ~led; ...

  5. SysTick系统定时器(功能框图和优先级配置)

    SysTick—系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中.系统定时器是一个 24bit (2^24)的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置 ...

  6. STM32学习及应用笔记一:SysTick定时器学习及应用

    这几年一直使用STM32的MCU,对ARM内核的SysTick计时器也经常使用,但几乎没有仔细了解过.最近正好要在移植一个新的操作系统时接触到了这块,据比较深入的了解了一下. 1.SysTick究竟是 ...

  7. [stm32] Systick

    (一) 背景介绍在传统的嵌入式系统软件按中通常实现 Delay(N) 函数的方法为:for(i=0;i<=x;i++); x--:            对应于N毫秒的循环值对于STM32系列微 ...

  8. [stm32] USART USART1收发功能工程

    >_<!功能:PC端发送一个特定的字符:0x0d 0x0a,单片机则返回一句话,如图: >_<!知识: 1.复用功能I/O和调试配置(AFIO)  为了优化外设数目,可以把一些 ...

  9. stm32之Systick(系统时钟)

    Systick的两大作用: 1.可以产生精确延时: 2.可以提供给操作系统一个单独的心跳(时钟)节拍: 通常实现Delay(N)函数的方法为: for(i=0;i<x;i++) ; 对于STM3 ...

随机推荐

  1. iOS 常用随机数

    比如:获取一个随机整数范围在:[0,100)包括0,不包括100 ; 参考:https://www.jianshu.com/p/106475cbd3da

  2. E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarly unavailable)

    1. 问题详细提示如下: E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarly unava ...

  3. python利用eval方法提升dataframe运算性能

    eval方法可以直接利用c语言的速度,而不用分配中间数组,不需要中间内存的占用. 如果包含多个步骤,每个步骤都要分配一块内存 import numpy as npimport pandas as pd ...

  4. Linux 学习 (五) DNS配置

    没有配置DNS会引起的问题 yum命令 ssh命令等不能进行 错误: Could not resolve host: centos.ustc.edu.cn; 本文例子: CentOS7 下DNS配置 ...

  5. sql:CallableStatement执行存储过程

    /** * 使用CablleStatement调用存储过程 * @author APPle * */ public class Demo1 { /** * 调用带有输入参数的存储过程 * CALL p ...

  6. 107、TensorFlow变量(三)

    创建秩为1的张量 # create a rank1 tensor object import tensorflow as tf mystr = tf.Variable(["Hello&quo ...

  7. HttpCanary——最强Android抓包工具!

    迎使用HttpCanary——最强Android抓包工具! HttpCanary是一款功能强大的HTTP/HTTPS/HTTP2网络包抓取和分析工具,你可以把他看成是移动端的Fiddler或者Char ...

  8. T1218:取石子游戏

    [题目描述] 有两堆石子,两个人轮流去取.每次取的时候,只能从较多的那堆石子里取,并且取的数目必须是较少的那堆石子数目的整数倍,最后谁能够把一堆石子取空谁就算赢. 比如初始的时候两堆石子的数目是25和 ...

  9. QTP使用dictionary 对象

    1. 创建即使用Dictionary对象 ' 创建Dictionary对象Set Dic = CreateObject("Scripting.Dictionary")' 添加Dic ...

  10. FileInputStream_FileOutputStream

    Writer的基本方法 //向输出流中写入一个字符数据,该字节数据为参数b的低16位 void write(int c) throws IOException //将一个字符类型的数组中的数据写入输出 ...