STM32F10X(Cortex-M3)系统定时器寄存器笔记和系统定时器精准延时函数

Cortex-M3系统定时器寄存器笔记和系统定时器精准延时函数

简介

在STM32F10X(Cortex-M3)除了通用定时器和看门狗定时器外,还有一个系统定时器(SysTick)

拿STM32F103C8T6来说,有7个定时器,3个通用定时器,1个高级定时器,2个看门狗定时器,最后还有一个24位倒计数器,也就是系统定时器 。

由于它没有像通用定时器和高级定时器的PWM或者其它功能,只能用来计数。所以通常用来计时,利用用它写精准延时函数。

因为这是Cortex-M3共有的,所以在STM32手册里是看不见系统定时器的寄存器。

在ST官网STM32F103C8T6的编程手册可以看见Cortex-M3的编程手册

系统定时器寄存器

STK_CTRL

SysTick control and status register,这个寄存器就是控制寄存器了。

COUNT FLAG就是看计数值计完没0还没计完 1记完了。

CLK SOURCE顾名思义就是时钟了,0就是AHB的时钟除以8,如果你AHB是72M,那么系统定时器就是9M。

TICK INT就是使能中断事件的,0不使能,1使能,使能完后应该要去NVIC里开启系统定时器的中断使能。

ENABLE就是使能计数了,1使能。

STK_LOAD

SysTick reload value register顾名思义就是加载计数值的寄存器,22位的。

STK_VAL

这个就是看现在计数值是多少的寄存器。

STK_CALIB

这个寄存器是或者定时器时钟/8的1ms的校准值的,比如72M/8=9M,1ms的计数值就是9000,那么TENMS得到的值就是9000。

STM32F10X(Cortex-M3)精准延时函数

代码如下,这是堵塞延时。

c 复制代码
void delay_ms(uint32_t ms)
{
	SysTick->LOAD=ms*9000;//预装载值
	SysTick->CTRL |=(1<<0);//系统定时器开始计数
	while(!(SysTick->CTRL&(1<<16)));
	SysTick->CTRL&=~(1<<0); //系统定时器停止计数
	SysTick->CTRL&=~(1<<16); //清空计数标志
}

void delay_us(uint32_t us)
{
	SysTick->LOAD=us*9;//预装载值
	SysTick->CTRL |=(1<<0);//系统定时器开始计数
	while(!(SysTick->CTRL&(1<<16)));
	SysTick->CTRL&=~(1<<0); //系统定时器停止计数
	SysTick->CTRL&=~(1<<16); //清空计数标志	
}
相关推荐
艾芯微科技5 小时前
HR911130C|汉仁 HANRUN 集成变压器千兆 RJ45 网口参数、电路、PCB 布线、替代与采购避坑
网络·单片机·嵌入式硬件·集成测试·51单片机
白搞电子6 小时前
ESP-Mosaico 黑胶轮滑动画与音乐编排:从设备原型到电脑预览工作台
单片机·嵌入式硬件
新晨单片机设计6 小时前
S028C-基于STM32单片机WIFI智能电表(温度)【Proteus仿真+Keil程序+原理图】
stm32·单片机·proteus·wifi智能电表
1234567890@world7 小时前
正点原子 ATK-DLRK3568 嵌入式Linux系统开发手册V1.3 详细总结
linux·stm32·单片机
Young Doro7 小时前
从 DV 表示到 MI 下界,再到“置换技巧“(含“指数倾斜“完整推导)
笔记
女神下凡8 小时前
芯参谋(68):ADC模数转换器电路设计指南
arm开发·单片机·嵌入式硬件·硬件工程·设计规范
Zwawa9 小时前
一盏 LED 不够用了:让同一盏灯说出不同的话
c语言·单片机·嵌入式
ACP广源盛1392462567310 小时前
PCIe Gen3 交换芯片选型笔记:中小通道扩展方案 IX7012@ACP 评估
笔记·硬件架构·硬件工程·pcie·国产芯片
芯岭技术郦10 小时前
入门级 32 位 MCU,PY32F002B
单片机·嵌入式硬件
三佛科技-1341638421210 小时前
景观雾化器方案开发,鱼缸/假山造雾器方案开发(主控FT61F021封装SOP16)
单片机·嵌入式硬件·物联网·智能家居·pcb工艺