女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

當前位置:首頁 > 單片機 > 單片機
[導讀]  單片機編程者需要知道自己的程序需要花費多長時間、while周期是多少、delay延時是否真如函數(shù)功能描述那樣精確延時。很多時候,我們想知道這些參數(shù),但是由于懶惰或者沒有簡單的辦法,將這件事推到“明天”。筆者

  單片機編程者需要知道自己的程序需要花費多長時間、while周期是多少、delay延時是否真如函數(shù)功能描述那樣精確延時。很多時候,我們想知道這些參數(shù),但是由于懶惰或者沒有簡單的辦法,將這件事推到“明天”。筆者提出了一種簡便的測試方法,可以解決這些問題。

  測試代碼的運行時間的思路:

使用單片機內部定時器,在待測程序段的開始啟動定時器,在待測程序段的結尾關閉定時器。為了測量的準確性,要進行多次測量,并進行平均取值。

借助示波器的方法是:在待測程序段的開始階段使單片機的一個GPIO輸出高電平,在待測程序段的結尾階段再令這個GPIO輸出低電平。用示波器通過檢查高電平的時間長度,就知道了這段代碼的運行時間。顯然,借助于示波器的方法更為簡便。

  以下內容為這兩種方案的實例,以STM32為測試平臺。如果讀者是在另外的硬件平臺上測試,實際也不難,思路都是一樣的,自己可以編寫對應的測試代碼。

借助示波器方法的實例

Delay_us函數(shù)使用STM32系統(tǒng)滴答定時器實現(xiàn)

#include "systick.h"


/* SystemFrequency / 1000 1ms中斷一次

* SystemFrequency / 100000 10us中斷一次

* SystemFrequency / 1000000 1us中斷一次

*/


#define SYSTICKPERIOD 0.000001

#define SYSTICKFREQUENCY (1/SYSTICKPERIOD)


/**

* @brief 讀取SysTick的狀態(tài)位COUNTFLAG

* @param 無

* @retval The new state of USART_FLAG (SET or RESET).

*/

static FlagStatus SysTick_GetFlagStatus(void)

{

if(SysTick->CTRL&SysTick_CTRL_COUNTFLAG_Msk)

{

return SET;

}

else

{

return RESET;

}

}


/**

* @brief 配置系統(tǒng)滴答定時器 SysTick

* @param 無

* @retval 1 = failed, 0 = successful

*/

uint32_t SysTick_Init(void)

{

/* 設置定時周期為1us */

if (SysTick_Config(SystemCoreClock / SYSTICKFREQUENCY))

{

/* Capture error */

return (1);

}


/* 關閉滴答定時器且禁止中斷 */

SysTick->CTRL &= ~ (SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk);

return (0);

}


/**

* @brief us延時程序,10us為一個單位

* @param

* @arg nTime: Delay_us( 10 ) 則實現(xiàn)的延時為 10 * 1us = 10us

* @retval 無

*/

void Delay_us(__IO uint32_t nTime)

{

/* 清零計數(shù)器并使能滴答定時器 */

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執(zhí)行時間中用到的GPIO(gpio.h、gpio.c)的配置

#ifndef __GPIO_H

#define __GPIO_H


#include "stm32f10x.h"


#define LOW 0

#define HIGH 1


/* 帶參宏,可以像內聯(lián)函數(shù)一樣使用 */

#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函數(shù)中檢驗Delay_us的執(zhí)行時間

#include "systick.h"

#include "gpio.h"


/**

* @brief 主函數(shù)

* @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),執(zhí)行了大概102us,而Delay_us(1)執(zhí)行了2.2us。

更改一下main函數(shù)的延時參數(shù)

int main(void)

{

/* LED 端口初始化 */

GPIO_Config();


/* 配置SysTick定時周期為1us */

SysTick_Init();


for(;;)

{

TX(HIGH);

Delay_us(10);

TX(LOW);

Delay_us(100);

}

}

示波器的觀察結果

  可見Delay_us(100),執(zhí)行了大概101us,而Delay_us(10)執(zhí)行了11.4us。

結論:此延時函數(shù)基本上還是可靠的。

使用定時器方法的實例

  至于使用定時器方法,軟件檢測程序段的執(zhí)行時間,程序實現(xiàn)思路見STM32之系統(tǒng)滴答定時器。筆者已經(jīng)將檢查軟件的使用封裝成庫,使用方法在鏈接文章中也有介紹。我們這里只做一下簡要的實踐活動。

Delay_us函數(shù)使用STM32定時器2實現(xiàn)

#include "timer.h"


/* SystemFrequency / 1000 1ms中斷一次

* SystemFrequency / 100000 10us中斷一次

* SystemFrequency / 1000000 1us中斷一次

*/


#define SYSTICKPERIOD 0.000001

#define SYSTICKFREQUENCY (1/SYSTICKPERIOD)


/**

* @brief 定時器2的初始化,,定時周期1uS

* @param 無

* @retval 無

*/

void TIM2_Init(void)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;


/*AHB = 72MHz,RCC_CFGR的PPRE1 = 2,所以APB1 = 36MHz,TIM2CLK = APB1*2 = 72MHz */

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

/* Time base configuration */

TIM_TimeBaseStructure.TIM_Period = SystemCoreClock/SYSTICKFREQUENCY -1;

TIM_TimeBaseStructure.TIM_Prescaler = 0;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

TIM_ARRPreloadConfig(TIM2, ENABLE);

/* 設置更新請求源只在計數(shù)器上溢或下溢時產(chǎn)生中斷 */

TIM_UpdateRequestConfig(TIM2,TIM_UpdateSource_Global);

TIM_ClearFlag(TIM2, TIM_FLAG_Update);

}


/**

* @brief us延時程序,10us為一個單位

* @param

* @arg nTime: Delay_us( 10 ) 則實現(xiàn)的延時為 10 * 1us = 10us

* @retval 無

*/

void Delay_us(__IO uint32_t nTime)

{

/* 清零計數(shù)器并使能滴答定時器 */

TIM2->CNT = 0;

TIM_Cmd(TIM2, ENABLE);


for( ; nTime > 0 ; nTime--)

{

/* 等待一個延時單位的結束 */

while(TIM_GetFlagStatus(TIM2, TIM_FLAG_Update) != SET);

TIM_ClearFlag(TIM2, TIM_FLAG_Update);

}


TIM_Cmd(TIM2, DISABLE);

}

在main函數(shù)中檢驗Delay_us的執(zhí)行時間

#include "stm32f10x.h"

#include "Timer_Drive.h"

#include "gpio.h"

#include "systick.h"


TimingVarTypeDef Time;


int main(void)

{

TIM2_Init();

SysTick_Init();

SysTick_Time_Init(&Time);

for(;;)

{

SysTick_Time_Start();

Delay_us(1000);

SysTick_Time_Stop();

}

}


怎么去看檢測結果呢

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

8位單片機在嵌入式設計領域已經(jīng)成為半個多世紀以來的主流選擇。盡管嵌入式系統(tǒng)市場日益復雜,8位單片機依然不斷發(fā)展,積極應對新的挑戰(zhàn)和系統(tǒng)需求。如今,Microchip推出的8位PIC?和AVR?單片機系列,配備了先進的獨立...

關鍵字: 單片機 嵌入式 CPU

在嵌入式系統(tǒng)開發(fā)中,程序燒錄是連接軟件設計與硬件實現(xiàn)的關鍵環(huán)節(jié)。當前主流的單片機燒錄技術已形成ICP(在電路編程)、ISP(在系統(tǒng)編程)、IAP(在應用編程)三大技術體系,分別對應開發(fā)調試、量產(chǎn)燒錄、遠程升級等不同場景。...

關鍵字: 單片機 ISP ICP IAP 嵌入式系統(tǒng)開發(fā)

在嵌入式系統(tǒng)開發(fā)中,看門狗(Watchdog Timer, WDT)是保障系統(tǒng)可靠性的核心組件,其初始化時機的選擇直接影響系統(tǒng)抗干擾能力和穩(wěn)定性。本文從硬件架構、軟件流程、安全規(guī)范三個維度,系統(tǒng)分析看門狗初始化的最佳實踐...

關鍵字: 單片機 看門狗 嵌入式系統(tǒng)

本文中,小編將對單片機予以介紹,如果你想對它的詳細情況有所認識,或者想要增進對它的了解程度,不妨請看以下內容哦。

關鍵字: 單片機 開發(fā)板 Keil

隨著單片機系統(tǒng)越來越廣泛地應用于消費類電子、醫(yī)療、工業(yè)自動化、智能化儀器儀表、航空航天等各領域,單片機系統(tǒng)面臨著電磁干擾(EMI)日益嚴重的威脅。電磁兼容性(EMC)包含系統(tǒng)的發(fā)射和敏感度兩方面的問題。

關鍵字: 單片機 電磁兼容

以下內容中,小編將對單片機的相關內容進行著重介紹和闡述,希望本文能幫您增進對單片機的了解,和小編一起來看看吧。

關鍵字: 單片機 復位電路

在這篇文章中,小編將為大家?guī)韱纹瑱C的相關報道。如果你對本文即將要講解的內容存在一定興趣,不妨繼續(xù)往下閱讀哦。

關鍵字: 單片機 異常復位

今天,小編將在這篇文章中為大家?guī)韱纹瑱C的有關報道,通過閱讀這篇文章,大家可以對它具備清晰的認識,主要內容如下。

關鍵字: 單片機 仿真器

單片機將是下述內容的主要介紹對象,通過這篇文章,小編希望大家可以對它的相關情況以及信息有所認識和了解,詳細內容如下。

關鍵字: 單片機 中斷 boot

一直以來,單片機都是大家的關注焦點之一。因此針對大家的興趣點所在,小編將為大家?guī)韱纹瑱C的相關介紹,詳細內容請看下文。

關鍵字: 單片機 數(shù)字信號 模擬信號
關閉