基于ARM内核的智能手环(day3)

本文详细探讨了延时与定时器在系统设计中的作用,包括滴答定时器的原理和应用,以及如何通过按键检测和时间片轮询实现多任务管理。此外,文章还介绍了串口通信的基本概念、工作方式和在USART1上的配置与数据传输过程。

回顾

延时(delay)与时钟频率

延时(delay)操作与系统的时钟频率有关,通过nop()指令等待一定数量的时钟周期以实现延时功能。

定时器

定时器是一种用于在特定时间间隔内执行任务或触发事件的设备或模块。

按键检测

按键检测的流程包括:

  1. 查看原理图,确定按键连接到哪个IO口;
  2. 找到对应的IO口在硬件中的位置;
  3. 分析原理图,了解按键的接线和电路连接情况。

按键抖动

按键抖动是指在按下或释放按键时,由于机械结构或电路原因而导致按键信号出现短暂波动。解决按键抖动的方法包括:

  1. 添加适当的延时,以忽略短暂的抖动信号;
  2. 在按键电路中添加电容,使抖动信号得到滤波和稳定。

时间片轮询

定时器:内核定时器(滴答定时器)

image-20240331182206988

image-20240331182212779

  1. 中断函数: 中断函数是由硬件中断触发时执行的特殊函数。当系统中发生某些事件(例如按键按下、定时器溢出等)时,中断会打断当前的执行流程,转而执行与该中断相关的中断服务程序(ISR),执行完成后再返回到原来的执行点。

  2. 时间片轮询: 这是一种基于时间片的调度算法,用于多任务系统中。系统按照一定的时间片分配给每个任务,任务依次执行。在时间片轮询中,通常会定期检查每个任务是否需要执行,然后根据优先级和调度策略来确定下一个执行的任务。

滴答定时器:

滴答定时器(Tick Timer)是一种特殊类型的定时器,通常用于在嵌入式系统中生成精确的时间间隔。它的基本原理是在每个固定时间间隔内产生一个“滴答”信号,通过计数这些滴答信号,可以实现精确的时间测量和延时操作。

滴答定时器通常由硬件支持,它可以在芯片内部以固定的时钟频率运行。当滴答定时器启动时,它会以固定的时间间隔(通常是毫秒或微秒级别)产生一个滴答信号。这个时间间隔由定时器的时钟频率和预设的计数器值决定。

也就是说,滴答定时器是一直在执行的,不受程序影响

时间片轮询基本步骤:

  1. 定义变量: 首先,在程序中定义一个变量,用于记录时间片的状态或计数器。这个变量通常是一个全局变量。

  2. 变量在对应中断服务函数里增加: 如果使用定时器中断来实现时间片轮询,那么在定时器中断服务函数(ISR)里会对时间片计数器进行增加操作。

  3. 变量外部声明: 这个变量需要在全局范围内声明,以便在各个函数中都可以访问到它。

  4. 在主函数里判断: 在主函数(或其他需要执行轮询的地方)里,通过判断时间片计数器的值来确定是否需要执行某个任务。如果时间片计数器达到了设定的阈值,就执行相应的任务。

  5. 变量清零: 在执行完一轮时间片轮询后,需要将时间片计数器清零,以便开始下一轮的时间片计数。

实现逻辑

那么我们只需要载滴答定时器里面声明一个变量,然后滴答定时器没执行一次变量+1

执行到特定的次数后就开始执行相应的函数 ,并清零函数

即可完成时间片轮询

//滴答定时器的中断函数
void SysTick_Handler(void)
{
   
   
	LED1_TIME++;
}

主函数中:

if(LED1_TIME >= 500)
		{
   
   
			LED1_TURN;
			LED1_TIME = 0;
			//USART1_SendStr(arr);
		}

这样子在我们就成功设置了状态指示灯

即在程序正常执行过程中led灯闪烁


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

J.Pei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值