* @param

* @arg nTime: Delay_us( 10 ) 则实现的延时为 10 * 1us = 10us

* @retval 无

*/

void Delay_us(__IO uint32_t nTime)

{

/* 清零计数器并使能滴答定时器 */

SysTick-》VAL = 0;

SysTick-》CTRL |= SysTick_CTRL_ENABLE_Msk;

for( ; nTime 》 0 ; nTime--)

{

/* 等待一个延时单位的结束 */

while(SysTick_GetFlagStatus() != SET);

}

/* 关闭滴答定时器 */

SysTick-》CTRL &= ~ SysTick_CTRL_ENABLE_Msk;

}

检验Delay_us执行时间中用到的GPIO(gpio.h、gpio.c)的配置

#ifndef __GPIO_H

#define __GPIO_H

#include “stm32f10x.h”

#define LOW 0

#define HIGH 1

/* 带参宏,可以像内联函数一样使用 */

#define TX(a) if (a) \

GPIO_SetBits(GPIOB,GPIO_Pin_0);\

else \

GPIO_ResetBits(GPIOB,GPIO_Pin_0)

void GPIO_Config(void);

#endif

#include “gpio.h”

/**

* @brief 初始化GPIO

* @param 无

* @retval 无

*/

void GPIO_Config(void)

{

/*定义一个GPIO_InitTypeDef类型的结构体*/

GPIO_InitTypeDef GPIO_InitStructure;

/*开启LED的外设时钟*/

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

}

在main函数中检验Delay_us的执行时间

#include “systick.h”

#include “gpio.h”

/**

* @brief 主函数

* @param 无

* @retval 无

*/

int main(void)

{

GPIO_Config();

/* 配置SysTick定时周期为1us */

SysTick_Init();

for(;;)

{

TX(HIGH);

Delay_us(1);

TX(LOW);

Delay_us(100);

}

}

示波器的观察结果

如何获取单片机测试代码的运行时间

如何获取单片机测试代码的运行时间

可见Delay_us(100),执行了大概102us,而Delay_us(1)执行了2.2us。

更改一下main函数的延时参数

int main(void)

{

/* LED 端口初始化 */

GPIO_Config();

/* 配置SysTick定时周期为1us */

SysTick_Init();

for(;;)

{

TX(HIGH);

Delay_us(10);

TX(LOW);

Delay_us(100);

}

}

示波器的观察结果

如何获取单片机测试代码的运行时间

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查