1、简介

Cortex‐M3 处理器内部包含了一个简单的定时器。因为所有的 CM3 芯片都带有这个定时器,软件在不同 CM3 器件间的移植工作得以化简。该定时器的时钟源可以是内部时钟,或者是外部时钟。不过,STCLK 的具体来源则由芯片设计者决定,因此不同产品之间的时钟频率可能会大不相同,你需要查找芯片的器件手册来决定选择什么作为时钟源。

Cortex-M3 的内核中包含一个 SysTick 时钟。SysTick 为一个 24 位递减计数器,SysTick 设定初值并使能后,每经过 1 个系统时钟周期,计数值就减 1。计数到 0 时,SysTick 计数器自动重装初值并继续计数,同时内部的 COUNTFLAG 标志会置位,触发中断 (如果中断使能情况下)。

2. 寄存器

3. GD32f103x

GD32F103C8T6 内部时钟是108MHz,经过8分频输入给systick定时器

5. 定时器轮训方式

#include "gd32f10x.h"
#include "systick.h"volatile static float count_1us = 0;
volatile static float count_1ms = 0;/*!\brief      configure systick\param[in]  none\param[out] none\retval     none
*/
void systick_config(void)
{/* systick clock source is from HCLK/8 内部时钟的108M/8分频 */systick_clksource_set(SYSTICK_CLKSOURCE_HCLK_DIV8);count_1us = (float)SystemCoreClock/8000000; //延时1us需要的时钟数量 108M/8M = 13.5 count_1ms = (float)count_1us * 1000;        //延时1us需要的时钟数量 108M/8M *1000= 13500
}/*!\brief      delay a time in microseconds in polling mode\param[in]  count: count in microseconds\param[out] none\retval     none
*/
void delay_1us(uint32_t count)
{uint32_t ctl;/* reload the count value */SysTick->LOAD = (uint32_t)(count * count_1us);/* clear the current count value */SysTick->VAL = 0x0000U;/* enable the systick timer */SysTick->CTRL = SysTick_CTRL_ENABLE_Msk;/* wait for the COUNTFLAG flag set */do{ctl = SysTick->CTRL;}while((ctl&SysTick_CTRL_ENABLE_Msk)&&!(ctl & SysTick_CTRL_COUNTFLAG_Msk));/* disable the systick timer */SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;/* clear the current count value */SysTick->VAL = 0x0000U;
}/*!\brief      delay a time in milliseconds in polling mode\param[in]  count: count in milliseconds\param[out] none\retval     none
*/
void delay_1ms(uint32_t count)
{uint32_t ctl;/* reload the count value */SysTick->LOAD = (uint32_t)(count * count_1ms);/* clear the current count value */SysTick->VAL = 0x0000U;/* enable the systick timer */SysTick->CTRL = SysTick_CTRL_ENABLE_Msk;/* wait for the COUNTFLAG flag set */do{ctl = SysTick->CTRL;}while((ctl&SysTick_CTRL_ENABLE_Msk)&&!(ctl & SysTick_CTRL_COUNTFLAG_Msk));/* disable the systick timer */SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;/* clear the current count value */SysTick->VAL = 0x0000U;
}

14. GD32F103C8T6入门教程-Systick定时器相关推荐

  1. 13. GD32F103C8T6入门教程-定时器-3路pwm输出-刹车死区保护

    1.gpio初始化 void gpio_config(void) {/*使能GPIOA GPIOB 时钟*/rcu_periph_clock_enable(RCU_GPIOA);rcu_periph_ ...

  2. 12. GD32F103C8T6入门教程-定时器-3路pwm输出

    1.gpio初始化 void gpio_config(void) {/*使能GPIOA GPIOB 时钟*/rcu_periph_clock_enable(RCU_GPIOA);rcu_periph_ ...

  3. 18. GD32F103C8T6入门教程-adc-使用教程5-定时器TIM2更新事件触发adc0

    adc 使用教程5-定时器TIM2更新事件触发adc0 但是本实验出现了一个异常,单片机大概路出现更新事件没有启动ADC转换,可是没有找到处理办法,但是定时器的是正常工作LED灯闪烁 1.使能各种时钟 ...

  4. 24. GD32F103C8T6入门教程-IAP升级教程

    GD32f103C8T6 IAP 升级教程 参考stm32的IAP升级原理 IAP测试源码 GD32和stm32的内核都是一样的,又因为IAP升级主要涉及升级的路径之和内核先关,所以gd32和stm3 ...

  5. 20. GD32F103C8T6入门教程-adc使用外部中断IT11触发启动adc规则通道,使用外中断IT15触发注入组

    adc 使用教程6-使用外部中断IT11触发启动adc规则通道,使用外中断IT15触发注入组 ADC支持18个多路通道,可以把转换组织成两组:一个规则组通道和一个注入组通道 规则组,可以按照特定的序列 ...

  6. 19. GD32F103C8T6入门教程-adc使用教程6-外部中断线11触发adc0

    adc 使用教程6-外部中断线11触发adc0 使用外部中断线11 触发ADC开始采集数据,PA11 gpio 1.初始化时钟和定义全局变量 /*保存ADC值*/ uint32_t adc_value ...

  7. 17. GD32F103C8T6入门教程-adc 使用教程2-dma+连续扫描方式采集数据++dma中断通知

    adc 使用教程3-dma方式采集数据+dma中断通知 adc 的扫描模式就是把配置了规则或注入通道按照配置的顺序采集一轮 adc 的连续转换模式就是把配置了规则或注入通道按照配置的顺序采集N轮 1. ...

  8. 16. GD32F103C8T6入门教程-adc 使用教程2-dma+连续扫描方式采集数据

    adc 使用教程2-dma+连续扫描方式采集数据 adc 的扫描模式就是把配置了规则或注入通道按照配置的顺序采集一轮 adc 的连续转换模式就是把配置了规则或注入通道按照配置的顺序采集N轮 1.时钟配 ...

  9. 15. GD32F103C8T6入门教程-adc单通道轮训采集

    1.adc gpio初始化 /*使能各种时钟和adc时钟分频输入*/ void rcu_config(void) {/*使能GPIO时钟 */rcu_periph_clock_enable(RCU_G ...

最新文章

  1. java数组与对象例题,Java的字符串和数组是以对象的形式出现的。()
  2. linux dup用法,Unix_Linux
  3. 中新赛克数据可视化_中新赛克——能否构建更安全的世界
  4. java oom-killer_与Linux OOM-killer的第一次亲密接触
  5. 朴素贝叶斯算法注意事项(有待完善)
  6. python取数字第一位数_python基础:8.切片和缩进
  7. 三七互娱Q3归母净利润超预告上限,三大战略迎提速契机
  8. php怎么给页面链接,怎么给一个PHP密码访问页面加超链接
  9. 大家觉得现在最赚钱的电商形式是什么?
  10. 解决ubuntu中zabbix 4.2图形显示乱码
  11. 开发框架:AdminLTE
  12. SSM + Ajax
  13. pycharm占用c盘
  14. 服务器不改变系统怎么清理c盘,服务器c盘满了怎么清理(清理c盘最简单的方法)...
  15. XXE(外部实体注入)| PortSwigger(burpsuite官方靶场)| Part 3
  16. 小程序预览报错60001,fail error:109
  17. 【布局优化】基于粒子群求解物流选址matlab源码
  18. status_breakpoint谷歌浏览器如何解决?
  19. 嵌入式100题(81):波特率是什么,为什么双方波特率要相同,高低波特率有什么区别;...
  20. XAG拥抱区块链和分布式记账技术标准化时代

热门文章

  1. linux go vendor目录,Go 包依赖管理工具 —— govendor
  2. php 验证 e mail,PHP表单验证Name,E-mail,和URL-三体教程在线编辑器
  3. ORCLE分组后取出时间最近的一条
  4. 数据分析师要会mysql_数据分析人员需要掌握sql到什么程度?
  5. js layui跳转页面_【WEB前端开辟】layui的iframe跳转链接与页面按钮跳转相干引见...
  6. matplotlib绘制平滑曲线
  7. python numpy 写入、读取 .npz 压缩文件
  8. 解决Django文件表单验证forms.FileField(required=True),总是无法通过验证:这个字段是必填项
  9. python使用停用词表过滤词
  10. php对json数据处理,在PHP中处理JSON的后期数据