STM32 HAL库学习系列第3篇 常使用的几种延时方式

本文介绍了STM32 HAL库中常用的三种延时方式:1) 使用hal_delay函数实现毫秒级或微秒级延迟;2) 利用中断和定时器进行延时;3) 采用系统时钟计时的非阻塞式延时,为优化项目提供了选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明:

本文原创作者『Allen5G』

首发于微信公众号『Allen5G』

标签:编程,软件,算法,思维


1   自带的hal_delay 函数    毫秒级延迟

void HAL_Delay(__IO uint32_t Delay)
{
  uint32_t tickstart = HAL_GetTick(); //获取tick值(毫秒)
  uint32_t wait = Delay;
 
  /* Add a period to guarantee minimum wait */
  if (wait < HAL_MAX_DELAY)
  {
     wait++;//传参,延时的时间
  }

  while((HAL_GetTick() - tickstart) < wait)
  {
  }
}

也可以配置为us延时,改变函数参数

配置方法:也可以配置为1us


                
### STM32 HAL配置OLED显示屏 #### 配置概述 为了实现STM32 HAL对OLED显示屏的支持,通需要完成以下几个方面的设置:硬件接口的选择(如I2C或SPI)、使用CubeMX生成初始代码框架以及集成第三方图形(如U8g2)。以下是详细的说明。 --- #### CubeMX配置过程 通过STM32CubeMX工具可以快速生成基于HAL的基础代码。具体步骤如下: 1. **创建新工程并选择目标芯片型号** 打开STM32CubeMX,新建一个工程,并选择合适的STM32系列微控制器作为目标设备[^1]。 2. **配置时钟树与时基定时器** 设置系统时钟频率以满足应用需求,同时启用SysTick或其他定时器用于延时功能。 3. **配置通信外设** 如果采用I2C方式连接OLED,则需按照实际硬件连线,在Pinout & Configuration界面指定相应的GPIO引脚为I2C模式。例如,PB6可配置成SCL, PB7则对应SDA角色[^2]。 4. **生成初始化代码** 完成上述参数设定之后,点击“Generate Code”按钮让CubeMX自动生成适合当前项目的源码结构及其配套文件夹体系。 --- #### U8g2 图形移植指南 一旦有了由CubeMX构建起来的基础环境后,就可以着手引入外部依赖项即u8g2图形渲染引擎了: 1. 下载最新版本的[u8g2](https://github.com/olikraus/u8g2)开源项目压缩包; 2. 将解压后的核心组件拷贝至本地工作目录下适当位置; 3. 修改Makefile或者IDE内的编译选项使得能够找到新增加的头文件路径; 4. 编辑`main.c`或者其他入口级程序片段加入必要的include声明语句以便访问这些扩展特性; 5. 实现具体的实例化对象并通过调用相应的方法绘制想要呈现的内容到屏幕上。 ```c #include "stm32f4xx_hal.h" #include "u8g2.h" // 初始化 u8g2 对象 static void MX_U8G2_Init(U8G2 *u8g2){ u8g2_Setup_ssd1306_128x64_noname_f(u8g2, U8G2_R0, u8x8_byte_sw_i2c, u8x8_gpio_and_delay_stm32); } int main(void){ /* Initialize the HAL Library */ HAL_Init(); // 初始化 I2C 外设 MX_I2C1_Init(); U8G2 u8g2; MX_U8G2_Init(&u8g2); while (1){ u8g2.clearBuffer(); // 清除缓冲区 u8g2.setFont(u8g2_font_ncenB08_tr); // 设置字体样式大小等属性 u8g2.drawStr(0, 10, "Hello OLED!"); // 绘制字符串消息 u8g2.sendBuffer(); // 发送数据给显示器刷新画面 HAL_Delay(1000); // 延迟一秒再重复执行循环体内部逻辑流程 } } ``` --- #### 注意事项 - 确认所使用的开发板上的OLED模块支持哪种通讯协议(I2C/SPI),然后据此调整CubeMX里的相关外围器件选型。 - 查看官方文档了解每种方法的具体含义及适用场景[^3]。 - 测试阶段可能遇到各种兼容性问题,耐心调试直至达到预期效果为止! ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CodeAllen嵌入式

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

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

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

打赏作者

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

抵扣说明:

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

余额充值