STM32系统定时器SysTick,delay的精确编写

SYsTick叫系统滴答时钟,外围设备,24位计数器
查看《Cortex M3与M4权威指南》PDF,有关于系统定时器的说明
M4可以使用函数
uint32_t SysTick_Config(uint32_t ticks);
如果一秒想触发一千次中断,则填 SystemCoreClock/1000 ,系统内核时间1s/1000,相当于一毫秒触发一次中断

中断服务函数

		void SysTick_Handler(void)
		{
				/*实现逻辑代码,以下例子为led灯的闪烁*/
				static uint32_t cut = 0;
				cnt++;

				//到达500毫秒时,翻转led引脚的电平
				if(cnt == 500)
				{
					cnt = 0;
					PFout(9) ^= 1;	//位带操作,通过寄存器地址直接控制引脚
				}
		}

delay_ms()和delay_us()的编写
参考《Cortex M3与M4权威指南》P353有详细说明,当不想使用SysTick_Config(uint32_t ticks)函数时,可以直接对寄存器操作

delay_ms(uint32_t n)
{
	SysTick->CTRL = 0; //关闭系统定时器
	SysTick->LOAD = (168000000/1000)*n;	//填写计数值,一毫秒乘以定时数
	SysTick->VAL = 0;	//清空当前的值和计数标志位
	SysTick->CTRL = 5;	//选择时钟启动,5为系统定时器
	while(SysTick->CTRL & 0x00010000 == 0);	//死循环,等待计数完毕
	SysTick->CTRL = 0;	//关闭定时器
}

以上代码是直接修改参考代码得到,但是硬件有最大定时时间限制
1000ms 最大定时时间
—————— = ————————
168000000Hz 2^24

最大定时时间 = 9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值