【HAL库】STM32CubeMX开发----delay延时实验----NOP空指令

STM32CubeMX 下载和安装 详细教程
【HAL库】STM32CubeMX开发----STM32F103/F207/F407----目录


前言

HAL库有自带的 ms级 延时函数: HAL_Delay();

缺点1:

无法实现 us级延时

缺点2:

此延时函数是由SysTick滴答定时器中断产生的,滴答定时器的中断优先级是所有中断中最低的,无法在其他中断中产生延时。

一、 STM32F407----delay延时实验

本次实验以 STM32F407VET6 芯片为MCU,使用 25MHz 外部时钟源。
系统时钟 SYSCLK = 168MHz,使用 __NOP();空指令实现延时。

User_delay.c

#include "User_delay.h"

void delay_us(uint16_t us)
{
	uint32_t Tdata = us*SYSCLK_MHZ/5;
	for(uint32_t i=0;i<Tdata;i++)
	{
		__NOP();
	}
}

void delay_ms(uint16_t ms)
{ 
	while( ms-- != 0)
	{
		delay_us(1000);	
	}
}

void delay_s(uint16_t s)
{ 	  
	while( s-- != 0)
	{
		delay_ms(1000);	
	}
}

User_delay.h

#ifndef __User_delay_H__
#define	__User_delay_H__

#include "main.h"

#define SYSCLK_MHZ    (SystemCoreClock/1000000) //系统时钟频率

void delay_us(uint16_t us);
void delay_ms(uint16_t ms);
void delay_s(uint16_t s);

#endif

实验测试

具体测试内容:让PB6引脚,每隔10us,实现高低电平切换。
具体代码如下:

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET);
delay_us(10);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET);
delay_us(10);

通过逻辑分析仪,采集的结果如下:
在这里插入图片描述
亲测可用,只适用于 STM32F407 相关的芯片。
其他的芯片,需要修改参数校准时间。文章来源地址https://uudwc.com/A/jVvkN


原文地址:https://blog.csdn.net/MQ0522/article/details/128364895

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年08月12日 22:28
下一篇 2023年08月12日 22:31