直接看第五节就是定时函数. 下面的内容都是在介绍原理
3.0 版以后的 STM32 固件库在标准外设库中移除了 SysTick 的驱动,因此用户必须调用
CMSIS 定义的函数。
CMSIS 只提供了一个 SysTick 设置的函数,替代了 STM32 原有 SysTick 驱动的全部函数。
SysTick_Config(uint32_t ticks);
-SysTick 计时器是 24 位的,所以设置参数的时候不要超过 24 位的范围。
一. 什么是系统定时器 SysTick
SysTick:系统定时器,24位,只能递减,存在于内核,嵌套在NVIC中,所有的Cortex-M内核的单片机都具有这个定时器。
系统嘀嗒校准值固定为9000,当系统嘀嗒时钟设定为9MHz(HCLK/8的最大值),产生1ms时间
基准。默认systick中断优先级是最低的

二. systick的相关寄存器(了解)

三. 定时时间计算
一个计数循环的事件t = 重装载值RELOAD *(1 / 时钟Systick_CLK)
以9M 时钟, 9000计数值为例:
t= 9000*(1/9000000) = 0.001s = 1ms
四. SysTick_Type结构体和SysTick_Config()
都在 core_m3.h中定义

SysTick_Config()函数

参数: ticks
SysTick 计时器是 24 位的,所以设置参数的时候不要超过 24 位的范围。
返回值: 1: 设置错误 0:设置成功
五. 实现1ms 1us定时函数
不用中断, 用1个方法实现计时
psb_systick.h
#ifndef PSB_SYSTICK_H
#define PSB_SYSTICK_H
#include 'stm32f10x.h'
#include 'core_cm3.h'
void SysTick_delay_ms(uint32_t ms);
void SysTick_delay_us(uint32_t us);
#endif /*PSB_SYSTICK_H*/
psb_systick.c
#include 'psb_systick.h'
void SysTick_delay_ms(uint32_t ms)
{
uint32_t i;
SysTick_Config(72000);
for(i=0; i while(!((SysTick->CTRL) & (1<<16))); } SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk; } void SysTick_delay_us(uint32_t us) { uint32_t i; SysTick_Config(72); for(i=0; i while(!((SysTick->CTRL) & (1<<16))); } SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk; }
上一篇:《嵌入式-STM32开发指南》第二部分 基础篇 - 第8章 模拟输入输出-ADC(HAL库)
下一篇:STM32连接ESP8266向oneNET上传数据
- 热门资源推荐
- 热门放大器推荐
- 基于 Blackfin 数字信号处理器 (DSP) 的 ADZS-BF518F-EZLITE、ADSP-BF518F EZ-Kit Lite 评估系统
- 使用 ON Semiconductor 的 CAT3200Z 的参考设计
- LTC2162 演示板,16 位 65Msps ADC,LVDS 输出,5-140MHz
- 使用 Analog Devices 的 LTC3526BEDC-2 的参考设计
- LT3091HT7 在极低输出电压下低压降操作的典型应用
- 蓝牙协议分析工具nRF52840 MDK USB Dongle
- NCV2902DR2G 维恩桥振荡器运算放大器的典型应用
- LTC4100EGN 演示板,智能电池充电器 DCIN = 15V-20V / 3.5V
- TC78H620FNG 双桥直流有刷电机驱动器评估板
- 带有 DRP w/Try.SRC 和 Type-C 插座的 PTN5110 USB PD 的典型应用

现代雷达系统的信号设计
NJM5532S

BFR340T






京公网安备 11010802033920号