学习日志3:关于systick定时器中断时间的设定以及实现流水灯效果的编程。

SysTick系统定时器,又称为滴答定时器,是属于CM3内核中的一个外设,内嵌在NVIC中。

它是一个24bit的向下递减的重装载计数器,所以最多计数不超过2^24个。

计数器每计数一次的时间为 1/SYSCLK,一般我们设置系统时钟 SYSCLK等于 72M。当重装载数值寄存器的值递减到 0 的时候,系统定时器就产生一次中断,以此循环往复。

SysTick中断时间的计算

SysTick 定时器的计数器是向下递减计数的,计数一次的时间 T=1/CLK(1/72M),当重装载寄存器中的值 VALUELOAD(数值<2^24) 减到 0 的时候,产生中断,可知中断一次的时间 TINT=VALUELOAD * T=VALUELOAD/CLK,其中 CLK =72MHZ。如果设置 VALUELOAD 为 72,那中断一次的时间TINT=72/72M=1us。不过 1us 的中断没啥意义,整个程序的重心都花在进出中断上了,根本没有时间处理其他的任务。

所以我们可以在SysTick的初始化函数里调用 SysTick_Config() 这个固件库函数,通过设置该固件
库函数的形参,就决定了系统定时器经过多少时间就产生一次中断。

下面我们将其设定为10us产生一次中断


 

 其中SystemCoreClock的值为72M,所以VALUELOAD=SystemCoreClock / 100000=10us。

SysTick 定时时间的计算

当设置好中断时间 T 后,我们可以设置一个变量 t,用来记录进入中断的次数,那么变量 t 乘
以中断的时间 T 就可以计算出需要定时的时间。

延时函数的编写

 

根据改变形参nTime就可以自定义延时时间

SysTick 中断服务函数


 

 

 这样,我们就把延时程序完成了。

LED与GPIO口的端口配置编程

 

 

主函数

 以上。

 


 

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用systick定时器中断实现流水灯和蜂鸣器的嵌入式程序流程: 1. 配置三个指示灯D5,D6,D7和蜂鸣器所在的引脚为输出模式。 2. 配置systick定时器中断,并将定时器的计数值设置为适当的值,以便控制灯的闪烁速度。 3. 在systick定时器中断服务函数中实现流水灯和蜂鸣器的控制。 4. 在流水灯控制中,使用一个计数器变量来记录当前亮着的指示灯,然后根据计数器的值控制指示灯的亮灭。 5. 在蜂鸣器控制中,在指示灯亮的时候开启蜂鸣器,指示灯灭的时候关闭蜂鸣器。 示例伪代码如下: ``` // 配置引脚为输出模式 pinMode(D5, OUTPUT); pinMode(D6, OUTPUT); pinMode(D7, OUTPUT); pinMode(BUZZER, OUTPUT); // 初始化systick定时器 SysTick_Config(SystemCoreClock / 1000); // 系统时钟为1MHz,systick定时器计数值为1000,即1ms中断一次 // systick定时器中断服务函数 void SysTick_Handler() { static uint8_t led_counter = 0; led_counter++; switch (led_counter) { case 1: digitalWrite(D5, HIGH); digitalWrite(D6, LOW); digitalWrite(D7, LOW); digitalWrite(BUZZER, HIGH); break; case 2: digitalWrite(D5, LOW); digitalWrite(D6, HIGH); digitalWrite(D7, LOW); digitalWrite(BUZZER, LOW); break; case 3: digitalWrite(D5, LOW); digitalWrite(D6, LOW); digitalWrite(D7, HIGH); digitalWrite(BUZZER, LOW); break; default: led_counter = 0; break; } } // 初始化systick定时器函数 void systick_init() { // 设置systick定时器计数值和中断优先级 // ... // 开启systick定时器 SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; } ``` 注意,以上代码仅为示例伪代码,具体实现需要根据具体的硬件平台和systick定时器的配置来进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值