STM32程序超时设计

发布时间:2024-01-31  

软件超时机制

1、背景

嵌入式软件程序设计过程中中,经常会遇到超时(或定时)的处理情况,基本处理思想是在时间到的时候进行相关程序处理,下面介绍两种超时(或定时)的程序设计方案。


2、方案一

基本思想:定时器中断使用一个变量TICK,中断间隔时间t,在准备定时开始时读取此时刻的TICK,在程序运行过程中实时读取当前的TICK信息并计算即可。


因此在时间计算时只需计算开始STARTTICK和结束ENDTICK即可完成时间计算。时间计算T=(ENDTICK-STARTTICK)*t;使用一个定时器中断每t时间处理一次中断,中断里面时间计数值s_u32TCNT++,如下图所示:


图片

程序中定义一个结构体来保存超时开始和超时结束时间,结构体定义如下图所示:


图片


在需要做定时超时处理的地方实时的获取当前s_u32TCNT并赋值给u32EndTimeTick,计算开始u32StartTimeTick和结束时u32EndTimeTick的时间差来判断时间是否到来即可,程序设计示意代码如下图所示:


图片

3、方案二

基本思想:定义回调函数和回调注册函数,将定时/超时服务函数注册回调,每一次定时器中断执行一次回调,回调函数只需对计时时间TCNT做减1操作即可。


当TCNT为0时即定时/超时时间到,并置超时标志,应用程序只需判断标志即可明确定时/超时时间是否到来;回调函数和回调注册函数定义如下图所示,多个超时/定时回调函数可注册在回调函数数组中:


图片

图片



定时中断函数中进行遍历处理,定时中断函数处理示意代码如下图所示:

图片

4、对比总结

方案一优点在于中断执行单元执行内容少,代码操作容易理解,缺点是应用中实时的进行计算开始和结束TICK差值,代码执行效率不高。


方案二优点在于将超时函数注册在回调中即可,程序扩展性较好,不用做过多的数值计算,代码执行效率相对较高,缺点是定时中断中需要遍历所有已注册的对调,中断执行内容相对较多。


STM32程序超时设计

在程序设计中,出现以下类似语句,是非常不可靠的,很有必要加入超时处理!


while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

以下在stm32的system_stm32f10x.c文件中,判断外部晶振起振的程序。可以参考,在以后的程序中借鉴。


#define HSE_STARTUP_TIMEOUT   ((uint16_t)0x0500) /*!< Time out for HSE start up */

/* Wait till HSE is ready and if Time out is reached exit */

do

{

    HSEStatus = RCC- >CR & RCC_CR_HSERDY;

    StartUpCounter++;  

} while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

I2C 读写EEPROM添加超时:


uint16_t i = 0x0fff;

while ((!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))&&i){i--;};


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    。 4. 增加物理内存:如果你的电脑物理内存较小,并且频繁出现内存占用过高的情况,考虑增加内存条。更多的内存可以提供更好的多任务处理和应用程序运行性能。 5. 检查病毒和恶意软件:计算......
    单片机学不会怎么办?单片机从哪里开始学?;说起单片机学不会怎么办?就想起我自己一些学习的辛酸史。 我做单片机开发10余年了,单片机硬软件开发自然是很熟练了。 但做其他的工作可是一窍不通,在上......
    即是正义,在信号界也不例外! 当然长的啥样,光凭肉眼也看不出来,得用示波器看,这就涉及到怎么用示波器的问题。 常遇到客户咨询,问:“我的电源噪声好大!怎么会这样?怎么办?” ——额……我们......
    速率缓慢时,它便将数据从RAM移动到称为“分页文件”的空间中。将数据移入分页文件可释放RAM,以便完成工作。 一般而言,计算机的RAM容量越大,程序运行得越快。若计算机的速率由于RAM可用......
    设计方案。 2、方案一 基本思想:定时器中断使用一个变量TICK,中断间隔时间t,在准备定时开始时读取此时刻的TICK,在程序运行过程中实时读取当前的TICK信息并计算即可。 因此......
    (或定时)的程序设计方案。 2、方案一 基本思想:定时器中断使用一个变量TICK,中断间隔时间t,在准备定时开始时读取此时刻的TICK,在程序运行过程中实时读取当前的TICK信息并计算即可。 因此......
    如何给单片机烧录程序 单机片烧录不进去怎么办;如何给单片机烧录程序? 以51单机片为例 1、首先准备好51单片机最小系统板和烧录器。 2、打开stc-isp烧录软件选择好单片机型号,这里......
    工作中应该根据需要将可能会改变的单元的值都推入堆栈进行保护(本程序中实际不需保存护任何值,这里只作个演示)。   上面的两个单片机程序运行后,我们发现灯的闪烁非常快,根本分辨不出来,只是视觉上感到灯有些晃动而已,为什么呢?我们......
    实际产品开发过程中,需要考虑多种因素和需求,如:升级失败了该怎么办?想恢复出厂的版本怎么办?等等一系列的问题。 开发IAP时,最基本的功能就是要有接收新程序的通信协议(用来接收固件程序,以下简称通信协议栈),下面......
    完中断函数后,弹出PC之前的值,恢复到中断前程序运行的点。 2.保护现场:对寄存器组的值进行保护。 4、SFR寄存器区 特殊功能寄存器区定义了控制和监视51单片机运行的控制寄存器和状态寄存器,定时器、I/O口......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>