STM32F407 使用HAL库延时微妙实现方法(STM32CubeMX配置)

作者 : 李剀
出处 :

https://blog.csdn.net/Kevin_8_Lee/article/details/89243195

或者

https://www.cnblogs.com/kevin-nancy/p/10696681.html

欢迎转载,但也请保留上面这段声明。 谢谢! (以上两个链接均是我个人的博客,只是在不同的平台上面)

先说一下为什么写这篇博客。

不知道大家有没有遇到过这种情况,当你在移植别人的程序的时候,尤其是移植STM32的程序,从标准库移植到HAL库的时候,总是无奈延时微妙函数在HAL库中找不到,delay_us(u8 us); 很多次我都是用毫秒延时代替了, 但是,这样会使得程序的效率大大降低,所以通过参考别人的资料,通过定时器写了延时us函数,延时还是很准确的

1、我所使用的单片机型号及开发环境


**PS**: emmmmm… (这里并不是打广告,只是我个人使用的这个开发板,其他任何的开发板,只要主控芯片一样均可以)
开发环境如图,我是用的Cube+IAR, Keil5也可以的,都一样。

2、使用Cube配置定时器TIM7

PS: 每个定时器都可以,但是最好使用最低级的定时器,TIM7和TIM8都只能定时,所以我这里用的TIM7

这里我新建一个工程演示


选择STM32F407zg芯片

RCC和SYS配置就不截图了,大家都会的
时钟树配置如下图

通过查看STM32F407的数据手册可以知道
TIM7的频率就是APB1的频率,84MHz

TIM7配置:预分频系数为84-1 (83)
自动重载值 1

(这里的自动重载(arr)一定要设置为1,不能为0,否则无法得到正确的结果)

则TIM7的溢出频率 = 84MHz / (83 + 1) = 1MHz(1us)

在IAR或者MDK编译器中写代码

在tim.c文件里面添加代码,一定要写在
/* USER CODE BEGIN 1 */

/* USER CODE END1 */
之间,否则下次在Cube中有所更改,再重新生成文件,不在规定区域的代码会消失

void delay_us(uint16_t us)
{uint16_t differ=0xffff-us-5; HAL_TIM_Base_Start(&htim7);__HAL_TIM_SetCounter(&htim7,differ); while(differ < 0xffff-5) { differ = __HAL_TIM_GetCounter(&htim7); } HAL_TIM_Base_Stop(&htim7);}

效果见下图,上面的代码我特别打出来,方便大家复制

不要忘了在tim.h中对函数进行声明

OK, 接下来进行测试并用示波器显示

我们在主函数里面写入测试代码,通过示波器观察波形及周期,看一下延时是否成功及精确。。


在主函数的while(1)循环中写入上图所示测试代码,理论结果是PF9引脚的输出电平每100微妙反转一次

示波器延时的波形如下图


这里我们可以看到,周期为200.8us, 即100.4us电平反转一次,还是很精准的

是梦别怕疼,想赢别喊停! 加油吧

STM32CubeMX 配置STM32F407 实现HAL库延时微妙方案相关推荐

  1. STM32F407霸天虎HAL库CubeMX学习笔记——DS18B20

    STM32F407霸天虎HAL库CubeMX学习笔记--DS18B20 一.软件准备 二.硬件准备 三.CubeMX配置 四.Keil printf重写 tim.c DS18B20.h DS18B20 ...

  2. STM32CubeMX | STM32 F1系列HAL库低功耗STOP和STANDBY模式唤醒(RTC时钟唤醒+外部中断唤醒示例)

    STM32CubeMX | STM32 F1系列HAL库低功耗STOP和STANDBY模式唤醒(RTC时钟唤醒+外部中断唤醒示例) 目录 STM32CubeMX | STM32 F1系列HAL库低功耗 ...

  3. STM32CubeMX | 基于STM32使用HAL库硬件SPI驱动WK2124一拖四SPI转四路串口芯片

    STM32CubeMX | 基于STM32使用HAL库硬件SPI驱动WK2124一拖四SPI转四路串口芯片 STM32基础工程生成 首先使用STM32CUBEMX生成STM32的基础工程,配置时钟到7 ...

  4. STM32CubeMX | 基于STM32使用HAL库实现USB组合设备之多路CDC

    STM32CubeMX | 基于STM32使用HAL库实现USB组合设备之多路CDC 本博客完整代码下载地址:https://download.csdn.net/download/qq15347150 ...

  5. STM32F407霸天虎HAL库学习笔记——串口发送

    STM32F407霸天虎HAL库学习笔记--串口收发 一.软件准备 二.硬件准备 三.CubeMX配置 四.Keil printf重写 main函数 五.实验效果 一.软件准备 软件准备 二.硬件准备 ...

  6. STM32F407霸天虎HAL库学习笔记——使用ADC采集MQ135的数据并通过OLED显示

    STM32F407霸天虎HAL库学习笔记--使用ADC采集MQ135的数据并通过OLED显示 一.软件准备 二.硬件准备 三.CubeMX配置 四.Keil MQ135.c MQ135.h main函 ...

  7. 2.STM32F407之HAL库——星星点灯

    使用STM32CubeMX配置工程+MDKARM编写代码实现LED灯的控制 一.LED 二.配置STM32CubeMX 三.引脚配置属性详解 四.MDK设置+代码编写 五.下载验证   如何使用STM ...

  8. 4.STM32F407之HAL库——按键

    使用STM32CubeMX配置工程+MDKARM编写代码实现按键控制 一.按键简介 二.STM32CubeMX配置 三.代码实现 一.按键简介   轻触式按键开关:按键开关是一种电子开关,属于电子元器 ...

  9. STM32CubeMx安装教程(HAL库)(保姆级别)

    一.打开官网 STM32CubeMX - STM32Cube initialization code generator - STMicroelectronics 二.点击GETSoftware 三. ...

  10. 基于stm32cubeMX的stm32f103c8t6的HAL库开发的智能小车------小车接线和材料准备

    我的第一辆智能小车 提示:小编也是初学者,本文适用于想完成一个基础智能四轮车的初学者,大佬还请勿喷,欢迎各位指出错误的地方 暑假在家无聊,刚好也在学习STM32的HAL库,就想着做个小车巩固自己学到的 ...

最新文章

  1. xcode 学习笔记2:动态添加view
  2. 第八周项目实践1 建立顺序串的算法库
  3. DL之DenseNet:DenseNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  4. LeetCode77:Combinations
  5. ElementUI+VUE 日期控件禁用用法
  6. iphone以旧换新活动_iPhone第3轮降价背后:销售下滑库克甩锅给中国,国产手机崛起分食蛋糕...
  7. [转载] New Concept English 1——Lesson 7 Are you a teacher?
  8. 年关将至,很多朋友想要创业的心又开始蠢蠢欲动了
  9. 《Oracle SQL疑难解析》——1.10 删除表中的所有行
  10. JavaScript控制类名(className属性)
  11. Same Tree - LeetCode
  12. python词频统计排序小demo
  13. 解析数论引论 第1章 算术基本定理
  14. CAD图纸的保存格式DWG DWF DXF互相转换是怎么操作的?
  15. 魅族16Xs评测:集“够用”与性价比于一身
  16. 脚本病毒---实验十二:脚本病毒
  17. CorelDRAW_X6使用汇总
  18. jsp文件打开全是黑色字体
  19. R语言水文序列突变点检验之滑动平均差法
  20. Android 系统内的守护进程 - main类服务(1) : netd

热门文章

  1. Linux嵌入式_详解从原理图到数据手册解析PWM蜂鸣器实现
  2. Linux开发_printf打印无消息或末尾带“#“or“%“
  3. gnu ld链接出现“ no .eh_frame_hdr table will be created.”
  4. 【装饰者模式】Decorator Pattern
  5. 两table水平滚动条级联滚动(同步滚动)。 table1放标题,table2放内容。
  6. sql: sql developer tunnel转接
  7. 写给初学asp.net的新人们 新手学习经验
  8. 面向对象编程思想概览(三)继承
  9. ssh图示+hibernate图示
  10. Ubuntu中软件安装与卸载