日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年07月19日(星期六)

2018年07月19日 | stm32CubeMX HAL庫(kù)中延時(shí)的幾種方式解析

發(fā)布者:不懂之人 來(lái)源: eefocus關(guān)鍵字:stm32CubeMX  HAL庫(kù)  延時(shí) 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

HAL_Dalay()是毫秒級(jí)延時(shí),為了使用微秒級(jí)延時(shí)最近學(xué)習(xí)了一下,總結(jié)如下,推薦使用最后一種方式。


/*

 * 本文件包括四種延時(shí)方式:

 * 1. 原來(lái)的HAL庫(kù)函數(shù)HAL_Delay()    2. 采用定時(shí)器2設(shè)置延時(shí)函數(shù)     3. 采用系統(tǒng)滴答中斷方式的ms和us級(jí)延時(shí)

 * 4. 采用系統(tǒng)滴答非中斷方式的ms和us級(jí)延時(shí)(在一次計(jì)數(shù)值范圍內(nèi)的延時(shí))

 */

 

 

/* Includes ------------------------------------------------------------------*/

#include "stm32l1xx_hal.h"

#include "tim.h"

#include "usart.h"

#include "gpio.h"

 

/* USER CODE BEGIN Includes */

 

/* USER CODE END Includes */

 

/* Private variables ---------------------------------------------------------*/

 

/* USER CODE BEGIN PV */

/* Private variables ---------------------------------------------------------*/

 

volatile unsigned int timenum;      //必須要加volatile?。?!

volatile unsigned long time_delay; // 延時(shí)時(shí)間,注意定義為全局變量

 

/* USER CODE END PV */

 

/* Private function prototypes -----------------------------------------------*/

void SystemClock_Config(void);

void Error_Handler(void);

 

/* USER CODE BEGIN PFP */

/* Private function prototypes -----------------------------------------------*/

HAL_StatusTypeDef delay_10us(uint32_t num);

void delay_us(volatile unsigned long nms);

void delay_ms(volatile unsigned long nms);

void delay_ms2(int32_t nms);

 

/* USER CODE END PFP */

 

/* USER CODE BEGIN 0 */

 

int fputc(int ch, FILE *f)  

{  

HAL_UART_Transmit(&huart2 , (uint8_t *)&ch, 1, 0xFFFF);  

return ch;  

}

 

/* USER CODE END 0 */

 

int main(void)

{

 

  /* USER CODE BEGIN 1 */

 

  /* USER CODE END 1 */

 

  /* MCU Configuration----------------------------------------------------------*/

 

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

  HAL_Init();

 

  /* Configure the system clock */

  SystemClock_Config();

 

  /* Initialize all configured peripherals */

  MX_GPIO_Init();

  MX_TIM2_Init();

  MX_USART2_UART_Init();

 

  /* USER CODE BEGIN 2 */

 

     

  /*##-1- Start the TIM Base generation in interrupt mode ####################*/

  //HAL_TIM_Base_Start_IT(&htim2);

     

 

printf("Testing timer2\n");

HAL_Delay(1000);

printf("Testing timer2\n");

HAL_Delay(1000);

printf("Testing timer2\n");

HAL_Delay(1000);

printf("Testing timer2\n");

HAL_Delay(1000);

printf("Testing timer2\n");

 

 

  /* USER CODE END 2 */

 

  /* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {

  /* USER CODE END WHILE */

 

  /* USER CODE BEGIN 3 */

//HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);

delay_ms2(500);

printf("12\n");

//HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);

 

//delay_us(500000);

 

  }

  /* USER CODE END 3 */

 

}

 

/** System Clock Configuration

*/

void SystemClock_Config(void)

{

 

  RCC_OscInitTypeDef RCC_OscInitStruct;

  RCC_ClkInitTypeDef RCC_ClkInitStruct;

 

  __HAL_RCC_PWR_CLK_ENABLE();

 

  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

 

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;

  RCC_OscInitStruct.HSEState = RCC_HSE_ON;

  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;

  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12;

  RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV3;

  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

  {

    Error_Handler();

  }

 

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;

  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)

  {

    Error_Handler();

  }

 

  HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_SYSCLK, RCC_MCODIV_1);

 

  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);  //注意這里HAL庫(kù)重裝了系統(tǒng)計(jì)數(shù)器的值,使美1ms中斷一次??!

 

  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

 

  /* SysTick_IRQn interrupt configuration */

  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);

}

 

/* USER CODE BEGIN 4 */

 

/**

  * @brief  Period elapsed callback in non blocking mode

  * @param  htim: TIM handle

  * @retval None

  */

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//定時(shí)器2中斷處理函數(shù)

{

    if (htim->Instance == htim2.Instance)

    {

HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_8);

if(timenum)

{

timenum--;

//printf("%d\n", timenum);

}

    }

}

 

HAL_StatusTypeDef delay_10us(uint32_t num)//自定義的定時(shí)器2實(shí)現(xiàn)延時(shí)的函數(shù)

{

timenum = num;

HAL_TIM_Base_Start_IT(&htim2);

while(timenum) //為什么一直停在這個(gè)循環(huán)中???3-2-1-2-3……怎么會(huì)這樣?。。?-volatile!

;

HAL_TIM_Base_Stop_IT(&htim2);

return HAL_OK;

}

 

 

 

//SysTick實(shí)現(xiàn)延時(shí)n_ms,中斷方式

void delay_ms(volatile unsigned long nms)

{

    //SYSTICK分頻--1ms的系統(tǒng)時(shí)鐘中斷

    if (SysTick_Config(HAL_RCC_GetHCLKFreq()/1000))

    {

   

        while (1);

    }

    time_delay=nms;//讀取定時(shí)時(shí)間

    while(time_delay);

    SysTick->CTRL=0x00; //關(guān)閉計(jì)數(shù)器

    SysTick->VAL =0X00; //清空計(jì)數(shù)器

}

 

 

//SysTick實(shí)現(xiàn)延時(shí)n_us,中斷方式

void delay_us(volatile unsigned long nus)

{

 //SYSTICK分頻--1us的系統(tǒng)時(shí)鐘中斷

    if (SysTick_Config(HAL_RCC_GetHCLKFreq()/1000000))

    {

   

        while (1);

    }

    time_delay=nus;//讀取定時(shí)時(shí)間

    while(time_delay);

    SysTick->CTRL=0x00; //關(guān)閉計(jì)數(shù)器

    SysTick->VAL =0X00; //清空計(jì)數(shù)器

}

 

//SysTick實(shí)現(xiàn)延時(shí)中斷方式的中斷處理函數(shù)

//在中斷中將time_delay遞減。實(shí)現(xiàn)延時(shí)

//void SysTick_Handler(void)

//{

//    if(time_delay)

//        time_delay--;

//}

 

 

//void HAL_SYSTICK_Callback(void)//原cube HAL庫(kù)中中斷處理回調(diào)函數(shù)重寫

//{

// if(time_delay)

// time_delay--;

//}

 

 

//void HAL_IncTick(void)//原cube HAL庫(kù)中,重寫

//{

// if(time_delay)

// time_delay--;

//}

 

/********************************* 優(yōu)選的方式 ***********************************************************************/

/*一次填充系統(tǒng)計(jì)時(shí)器以實(shí)現(xiàn)非中斷延遲,受限系統(tǒng)計(jì)時(shí)器stmtick只有24位,所以最長(zhǎng)計(jì)時(shí)有所限制*/

void delay_ms2(int32_t nms)

{

 int32_t temp;

 SysTick->LOAD = 8000*nms;

 SysTick->VAL=0X00;//清空計(jì)數(shù)器

 SysTick->CTRL=0X01;//使能,減到零是無(wú)動(dòng)作,采用外部時(shí)鐘源

 do

 {

  temp=SysTick->CTRL;//讀取當(dāng)前倒計(jì)數(shù)值

 }while((temp&0x01)&&(!(temp&(1<<16))));//等待時(shí)間到達(dá)

    SysTick->CTRL=0x00; //關(guān)閉計(jì)數(shù)器

    SysTick->VAL =0X00; //清空計(jì)數(shù)器

}

 

/* USER CODE END 4 */

 

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

 

 

/*********************************************************************************************************************/

/*********************************************************************************************************************/

/*********************************************************************************************************************/

 

/*如果自寫系統(tǒng)時(shí)鐘中斷處理函數(shù),需要在stml1xx_it.c中注釋掉一下函數(shù)*/

 

/**

* @brief This function handles System tick timer.

*/

#if 1

void SysTick_Handler(void)

{

  /* USER CODE BEGIN SysTick_IRQn 0 */

 

  /* USER CODE END SysTick_IRQn 0 */

  HAL_IncTick();

  HAL_SYSTICK_IRQHandler();

  /* USER CODE BEGIN SysTick_IRQn 1 */

 

  /* USER CODE END SysTick_IRQn 1 */

}

#endif

 


關(guān)鍵字:stm32CubeMX  HAL庫(kù)  延時(shí) 引用地址:stm32CubeMX HAL庫(kù)中延時(shí)的幾種方式解析

上一篇:STM32 CubeMX如何生成微秒(us)級(jí)延時(shí)
下一篇:STM32F401 SDIO HAL driver初始化SD卡

推薦閱讀

樂(lè)視網(wǎng)正式宣布另外創(chuàng)立樂(lè)融品牌,負(fù)責(zé)智能電視等業(yè)務(wù)的運(yùn)營(yíng)。這也引起市場(chǎng)擔(dān)心,樂(lè)視品牌未來(lái)是否會(huì)成為“棄子”。事實(shí)上,樂(lè)視等昔日火紅的互聯(lián)網(wǎng)電視品牌,在互聯(lián)網(wǎng)電視進(jìn)入“下半場(chǎng)”之時(shí),如今一路走衰。同時(shí),由于互聯(lián)網(wǎng)電視品牌陣營(yíng)的“啞火”,創(chuàng)維旗下酷開(kāi)、TCL旗下雷鳥、康佳旗下KKTV等傳統(tǒng)彩電企業(yè)的互聯(lián)網(wǎng)子品牌則開(kāi)始轉(zhuǎn)型,重心從單純賣硬件...
移動(dòng)機(jī)器人是一個(gè)集環(huán)境感知、動(dòng)態(tài)決策與規(guī)劃、行為控制與執(zhí)行等多功能于一體的綜合系統(tǒng),它集中了傳感器技術(shù)、信息處理、電子工程、計(jì)算機(jī)工程、自動(dòng)化控制工程以及人工智能等多學(xué)科的研究成果。移動(dòng)機(jī)器人既可以接受人類指揮,又可以運(yùn)行預(yù)先編排的程序,同時(shí)也可以根據(jù)以人工智能技術(shù)制定的原則綱領(lǐng)行動(dòng)。近年來(lái),我國(guó)人口出生率呈持續(xù)下降趨勢(shì),制造業(yè)...
1、串口的模式有3種,一是查詢模式,二是中斷模式,三是DMA模式HAL_UART_Transmit();串口輪詢模式發(fā)送,使用超時(shí)管理機(jī)制HAL_UART_Receive();串口輪詢模式接收,使用超時(shí)管理機(jī)制HAL_UART_Transmit_IT();串口中斷模式發(fā)送HAL_UART_Receive_IT();串口中斷模式接收HAL_UART_Transmit_DMA();串口DMA模式發(fā)送HAL_UART_Transmit_DMA();串口DMA模式接收2、阻塞傳...
鋰電池負(fù)極材料主要分為天然石墨負(fù)極材料和人造石墨負(fù)極材料。其中,天然石墨負(fù)極材料的上游為天然石墨礦石,人造石墨負(fù)極材料的上游包括針狀焦、石油焦、瀝青焦等原料。鋰電池負(fù)極材料下游行業(yè)為鋰電池行業(yè),下游行業(yè)的產(chǎn)品最終應(yīng)用于動(dòng)力電池、3C消費(fèi)電池及工業(yè)儲(chǔ)能電池三大領(lǐng)域。行業(yè)主要上市公司:璞泰來(lái)(603659)、杉杉股份(600884)、中科電氣(30...

史海拾趣

問(wèn)答坊 | AI 解惑

(畢業(yè)設(shè)計(jì))基于FPGA的數(shù)據(jù)采集系統(tǒng)

亂了  一大堆的資料  可現(xiàn)在確實(shí)不知道該從何處下手了。。 求哪個(gè)做個(gè)這個(gè)題目的大哥大姐給個(gè)參考啊 謝謝了。。 我的郵箱:wendy0109@sina.com…

查看全部問(wèn)答∨

請(qǐng)教關(guān)于PXA270喚醒源的設(shè)置

專家好:    我的PDA前兩天在公司測(cè)試部門發(fā)現(xiàn),按鍵進(jìn)入深度休眠后,不能馬上按鍵喚醒,只有等5~6秒(大約值)后才能馬上喚醒 我的按鍵休眠是設(shè)置的GPIO0,喚醒源也是GPIO0 具體的設(shè)置如下:          &nbs ...…

查看全部問(wèn)答∨

如何在win ce下設(shè)置圖片的3D凸起效果?(C#) 謝謝了!

如何在win ce下設(shè)置圖片的3D凸起效果?(C#) 謝謝了!…

查看全部問(wèn)答∨

關(guān)于TAPI的lineInitializeEx的困惑

Windows Embedded CE 6.0幫助文檔中介紹,Establishing a Modem Connection的流程如下: lineInitializeEx      ↓ lineOpen      ↓ lineMakeCall      ↓ lineGetMessage & ...…

查看全部問(wèn)答∨

串口輸出 程序調(diào)試

#include #include void main() { int i=7,j=2; float f=(float)i/j; SCON = 0x50; TMOD |= 0x20; TH1 = 0xf3; TR1 = 1; TI = 1; printf(\"%f\",f); while(1) {} } 這個(gè)程序?yàn)槭裁丛谶\(yùn)行的時(shí)候 在串口輸入串口 沒(méi)看到東西啊 ...…

查看全部問(wèn)答∨

全球首個(gè)太空機(jī)器人

$(\'swf_vSx\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://www.tudou.com/v/IJy11e9LXmk/v.swf\'), \'quality\', ...…

查看全部問(wèn)答∨

求教!新手求指點(diǎn)

若我有一臺(tái)17KW  600V的無(wú)刷電機(jī),控制器的驅(qū)動(dòng)部分因該選用哪種IGBT和驅(qū)動(dòng)芯片呀,求個(gè)型號(hào)以供參考,謝謝了…

查看全部問(wèn)答∨

【設(shè)計(jì)工具】quartus ii中文用戶教程及配置與下載

quartus ii中文用戶教程是全中文的,利于我們快速進(jìn)入開(kāi)發(fā)流程。配置與編程下載文檔為我們開(kāi)發(fā)掃清前期障礙,順利入門。…

查看全部問(wèn)答∨

熱電式傳感器PPT介紹

熱電式傳感器的基本介紹,概念性的?!?

查看全部問(wèn)答∨

做一臺(tái)自己的CD機(jī)~Ver2.0 可以用了~

上次發(fā)的CD機(jī),怎么看都是很寒酸的東西…… 沒(méi)有外殼……板子和機(jī)器分離……哎…… 改進(jìn)嘛~~總之,這一版不裸奔了~~ 先上圖~ 嗯……這一版的方案是:CD模擬輸出——放大器——聲音出來(lái)啦~~ 這樣搞,音質(zhì)還是欠佳,畢竟CD機(jī)芯不值錢。 注 ...…

查看全部問(wèn)答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved