• STM32CubeMX 配置STM32F407 实现HAL库延时微妙方案


    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电平反转一次,还是很精准的

    是梦别怕疼,想赢别喊停! 加油吧
  • 相关阅读:
    百度相关应用
    超实用js代码段一
    js模块化开发
    常见注入手法第一讲EIP寄存器注入
    异常处理第一讲(SEH),筛选器异常,以及__asm的扩展,寄存器注入简介
    32位汇编第六讲,OllyDbg逆向植物大战僵尸,快速定位阳光基址
    32位汇编第五讲,逆向实战干货,(OD)快速定位扫雷内存.
    32位汇编第四讲,干货分享,汇编注入的实现,以及快速定位调用API的数量(OD查看)
    32位汇编第三讲,RadAsm,IDE的配置和使用,以及汇编代码注入方式
    32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数
  • 原文地址:https://www.cnblogs.com/kevin-nancy/p/12569393.html
Copyright © 2020-2023  润新知