当前位置: 首页 > news >正文

stm32 阻塞式延时 与 非阻塞式延时

这里写自定义目录标题

    • 示例
      • 阻塞场景
    • 实现
      • 1 阻塞式延时
      • 2 非阻塞式延时

示例

阻塞场景

    tickstart = HAL_GetTick();/* Wait till RTC is in INIT state and if Time out is reached exit */while ((READ_BIT(hrtc->Instance->ISR, RTC_ISR_INITF) == 0U) && (status != HAL_TIMEOUT)){if ((HAL_GetTick()  - tickstart) > RTC_TIMEOUT_VALUE){status = HAL_TIMEOUT;hrtc->State = HAL_RTC_STATE_TIMEOUT;}

实现

1 阻塞式延时

static uint32_t timer_tick, timer_period;
void LPTIM2_Init(uint16_t period_ms) // 低功耗定时器2初始化(周期近似1ms)
{	timer_period = period_ms;//...
}
void LPTIM2_IRQHandler(void) 	
{if ((LPTIM2->ISR & LPTIM_ISR_ARRM) != 0) {timer_tick_inc();LPTIM2->ICR |= LPTIM_ICR_ARRMCF; // 清除重载中断标志}
}
uint32_t timer_get_tick(void)
{return timer_tick;
}void timer_tick_inc(void)
{timer_tick += timer_period;
}
/*** @brief  阻塞式延时函数,确保至少等待 m_delay 个时间单位。* @param  m_delay 期望延时的基数单位(单位由 timer_period 决定,如毫秒)。* @note   实际延时可能比 m_delay 多 1 个 timer_period,以保证最小等待时间。* 		   需要 LPTIM2_Init*/
void timer_delay(uint32_t m_delay)
{uint32_t tickstart = timer_get_tick();uint32_t wait = m_delay;/* 增加一个 timer_period 避免在计时器更新边界时等待不足 */if (wait < 0xFFFFFFFFU) // 防止溢出{wait += timer_period; // 确保延时可靠性,但会使总延时增加一个 timer_period}/* 阻塞等待,直到满足时间差 */while ((timer_get_tick() - tickstart) < wait){}
}

2 非阻塞式延时

/*** @brief  检查自指定起始时间起是否已超时。* @param  start   起始时间点(需通过 timer_get_tick() 获取)。* @param  timeout 超时阈值(单位与 timer_get_tick() 的时间单位一致)。* @return bool    - true: 已超时*                 - false: 未超时*/
bool is_timeout(unsigned int start, unsigned int timeout) {return timer_get_tick() - start > timeout;
}
http://www.xdnf.cn/news/194905.html

相关文章:

  • “数字驱动·智建未来——2025河北省建筑电气与智能化技术交流大会”
  • 【ACL系列论文写作指北14-科研心态与抗压管理】-走得远,比走得快更重要
  • 不同参数大小的DeepSeekR1模型对Java中new FileInputStream(“test.txt“).seek(100);语法错误的检查
  • 学习笔记:Qlib 量化投资平台框架 — MAIN COMPONENTS (Part I)
  • XrayR启动失败
  • 架构进阶:详解108页系统架构设计与详细设计知识讲座【附全文阅读】
  • 品融电商:全域电商代运营的领航者,驱动品牌长效增长
  • 第四章:Messaging and Memory
  • C语言中的指针详解
  • RSS‘25|CMU提出统一空中操作框架:以末端执行器为中心,无人机实现高精度遥操作
  • Cursor + Figma-Context-MCP ,让 Cursor 获取 Figma 设计图信息,实现 AI 生成页面的高度还原
  • 力扣面试150题--K 个一组翻转链表
  • 机器人--激光雷达
  • ESG跨境电商怎么样?esg跨境电商有哪些功用?
  • 阅读MySQL实战45讲第11天
  • uniapp打包apk如何实现版本更新
  • Spring MVC异常处理利器:深入理解HandlerExceptionResolver
  • SpringBoot实现接口防刷的5种高效方案详解
  • C#/.NET/.NET Core技术前沿周刊 | 第 36 期(2025年4.21-4.27)
  • AudioSet 音频中文类别
  • 蚂蚁seo蜘蛛池:提升网站收录的秘密武器
  • Nacos源码—1.Nacos服务注册发现分析二
  • 系统思考提升培训效能
  • 100天精通Python挑战总览 | 零基础到应用实战!
  • 安徽地区安全员A证考试中,哪些知识点是高频考点?
  • mysql8.0版本部署+日志清理+rsync备份策略
  • LLaMA-Factory部署以及大模型的训练(细节+新手向)
  • 基于 Java 的实现前端组装查询语句,后端直接执行查询方案,涵盖前端和后端的设计思路
  • Vue组件开发进阶:从通信原理到DOM异步更新实战
  • 在视图中交互 闪退问题