娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

STM32基于HAL庫實現微秒延時

發布者:TranquilJourney最新更新時間:2024-09-04 來源: elecfans關鍵字:STM32  HAL庫  微秒延時 手機看文章 掃描二維碼
隨時隨地手機看文章

HAL只提供了ms級的延時,但有些特殊場景,比如與通信速率較慢的設備通信時,會需要用到us級延時。STM32標準庫一般是使用系統嘀嗒定時器來進行微妙級別的延時,而HAL庫將SysTick定時器用做了庫函數的超時定時器,使用的地方非常多,自己修改代碼使用嘀嗒定時器的話就會引起錯亂,所以此時就需要自己實現一個us級別延時函數


這里介紹一種使用定時器設計us級延時函數的方法。


思路:我們將定時器設置為1MHZ的計數頻率,這樣定時器計一個數就是1us,我們就可以通過定時器計數值得知計時時間。

以使用TIM1為例,這里我們采用STM32F103內部8MHz晶振,故需要設置預分頻系數PSC為8-1=7。同時配置PA1為GPIO輸出模式,之后用于測試延時函數的效果。

圖片

Untitled


編寫微秒延時函數:


/* USER CODE BEGIN PD */

#define DLY_TIM_Handle (&htim1)  // Timer handle

/* USER CODE END PD */


/* USER CODE BEGIN PFP */

void delay_us(uint16_t nus);

/* USER CODE END PFP */


/* USER CODE BEGIN 4 */

void delay_us(uint16_t nus)

 __HAL_TIM_SET_COUNTER(DLY_TIM_Handle, 0);  // set the counter value a 0

 __HAL_TIM_ENABLE(DLY_TIM_Handle);          // start the counter

  // wait for the counter to reach the us input in the parameter

 while (__HAL_TIM_GET_COUNTER(DLY_TIM_Handle) < nus);

 __HAL_TIM_DISABLE(DLY_TIM_Handle);         // stop the counter

}

/* USER CODE END 4 */

編寫微秒延時函數測試程序,使PA1高低電平間隔100us轉換一次:


/* USER CODE BEGIN WHILE */

  while (1)

  {

    /* USER CODE END WHILE */


    /* USER CODE BEGIN 3 */

    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_1);

    delay_us(100);

  }

  /* USER CODE END 3 */


燒錄程序,通過邏輯分析儀觀察PA1電平變化:

圖片

圖片

可以看到PA1高電平持續時間和低電平持續時間都和符合100us的預設,延時效果較好。


關鍵字:STM32  HAL庫  微秒延時 引用地址:STM32基于HAL庫實現微秒延時

上一篇:ROS與STM32串口通信代碼
下一篇:stm32怎么讀取io口輸入電平

推薦閱讀最新更新時間:2025-05-20 16:41

STM32基本定時器 HAL庫
1.定時器分類 STM32F1系列中,除了互聯型的產品,共有8個定時器,分為基本定時器、通用定時器和高級定時器。 基本定時器是一個16位只能向上計數的定時器,只能定時,沒有外部IO。 通用定時器是一個16位可以向上/下計數的定時器,可以定時,可以輸出比較,可以輸入捕捉,每個定時器有四個外部IO。 高級定時器是一個16位可以向上/下計數的定時器,可以定時,可以輸出比較,可以輸入捕捉,還可以有三相電機互補輸出信號,每個定時器有8個外部IO。 2.基本定時器功能框圖 時鐘源:定時器時鐘TIMxCLK(內部時鐘CK_INT),是經APB1預分頻器后分頻提供,APB1預分頻系數為1,則頻率不變,否則*2; 計數器時鐘:定
[單片機]
<font color='red'>STM32</font>基本定時器 <font color='red'>HAL庫</font>
STM32低功耗(STM32G0+HAL庫+STOP模式+中斷喚醒)
一、知識點: 1.STM32低功耗一共有三種模式: (1)睡眠模式:功耗高,任意中斷,任意事件喚醒 (2)停機模式:功耗較低,可以任意外部中斷和RTC鬧鐘喚醒 (3)待機模式:功耗最低,但是只可以通過RTC喚醒,WKUP喚醒,NRST引腳復位,IWDG復位 綜上優缺點,所以最常用最實用的也就是STOP停機模式。 2.小白掃盲 1)STOP模式下,只要有外部中斷進來就可以喚醒,無需用戶自己配置具體代碼去實現喚醒操作。 2)STOP模式下被喚醒之后,單片機先執行外部中斷回調函數,然后再接著剛剛進入STOP模式下的語句繼續執行。 4)待機模式下被喚醒之后,單片機是類似于REST,從頭開始執行的 5)RTC鬧鐘喚醒實質也就是外部中
[單片機]
<font color='red'>STM32</font>低功耗(STM32G0+<font color='red'>HAL庫</font>+STOP模式+中斷喚醒)
STM32HAL庫 STM32CubeMX教程四---UART串口通信詳解
前言: 今天我們學習STM32CubeMX串口的操作,以及HAL庫串口的配置,我們會詳細的講解各個模塊的使用和具體功能,并且基于HAL庫實現Printf函數功能重定向,UART中斷接收,本系列教程將HAL庫與STM32CubeMX結合在一起講解,使您可以更快速的學會各個模塊的使用 所用工具: 1、芯片: STM32F407ZET6 2、STM32CubeMx軟件 3、IDE: MDK-Keil軟件 4、STM32F1xx/STM32F4xxHAL庫 5、串口: 使用USART1 PA9,PA10 知識概括: 通過本篇博客您將學到: STM32CubeMX創建串口例程 HAL庫UATR函數庫
[單片機]
【<font color='red'>STM32</font>】<font color='red'>HAL庫</font> STM32CubeMX教程四---UART串口通信詳解
STM32 中 CAN進入錯誤回調函數后無法接收問題(HAL庫
CPU進入錯誤回調函數后 ,無法接收新的數據包 void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan) 經檢查,如果CPU在進入錯誤回調函數之前,我們調用 HAL_CAN_Receive_IT(&Can1Handle, CAN_FIFO0); 一般來說,我們會認為CPU一直處于可以接收新的can包的狀態,但是只要CPU進入錯誤回調函數之后,就無法接收新的數據包,進debug 單步運行后 得到問題的原因 void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan) { ...................................
[單片機]
HAL庫中do{...} while(0U)宏定義的作用和意義
1寫在前面 很多初學者,以及有一定工作經驗的朋友都不知道這個“do{...} while(0U)”作用和意義,甚至覺得這樣寫的代碼復雜且沒意義。 相信使用過STM32Cube HAL庫的朋友都知道,源碼里面有許多do{...} while(0U)的宏定義語句。 今天講的主要知識點是:HAL庫中do{...} while(0U)作用和意義。 當然,do{...} while(0U) 不限于HAL庫中,適用于很多地方。 2 HAL庫中do{} while(0U)宏定義 在HAL庫中,很多.h文件都有do{...} while(0U)這樣的宏定義,比如:在stm32f1xx_hal_rcc.h中,使能GPIO時鐘:
[單片機]
<font color='red'>HAL庫</font>中do{...} while(0U)宏定義的作用和意義
HAL庫 STM32CubeMX教程五----看門狗(獨立看門狗,窗口看門狗)
前言: 今天我們來學習看門狗的配置與函數,看門狗可以有效解決程序的跑飛,在使用過程中比較常見,是防止芯片故障的有效外設,我們一起來學習下HAL庫 STM32CubeMX的獨立看門狗,靠窗看門狗的使用。本系列教程將HAL庫與STM32CubeMX結合在一起講解,使您可以更快速的學會各個模塊的使用 所用工具: 1、芯片: STM32F407ZET6 2、STM32CubeMx軟件 3、IDE: MDK-Keil軟件 4、STM32F1xx/STM32F4xxHAL庫 知識概括: 通過本篇博客您將學到: STM32CubeMX創建看門狗例程 獨立看門狗,靠窗看門狗 工作原理 看門狗 在
[單片機]
<font color='red'>HAL庫</font> STM32CubeMX教程五----看門狗(獨立看門狗,窗口看門狗)
HAL庫之485+DMA通信(STM32F746)
1.首先一定要保證硬件正確,包括接線,工具正常; 2.其次基本配置一定要正確,例如此次配置485的時候,可以實現DMA發送,卻不能實現接收。而同樣的串口參數配置使用中斷方式和232接口都能實現發送接收,個人判斷是是接收DMA部分配置有問題,結果卡了很久才發現是基本的管腳配置有誤。485的三根引腳要配置成推挽輸出,復用,復用模式。 3.最后,還是要多總結經驗,多看看源代碼。 硬件如下: 其實本質上還是串口通信,只不過多了一個開關控制(485-DIR),用來控制是發送數據還是接收數據,因此是半雙工模式。 配置流程:時鐘使能,引腳配置,串口配置(波特率,校驗位等),DMA配置(需要配置串口中斷)。 void US
[單片機]
<font color='red'>HAL庫</font>之485+DMA通信(STM32F746)
stm32F4XX之UART&DMA HAL庫
1:串口相關的初始化操作 我們都知道stm32相關外設的初始化都需要打開相應的時鐘,配置相應的IO,除此之外我們還需要對串口庫中的相關成員變量賦值,這里我們就直接看一下這些結構體成員有哪些。 HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart);這個函數就是對串口的初始化操作,形參是一個結構體指針,該結構體主要包含哪些部分,下面會做相應的介紹 typedef struct { USART_TypeDef *Instance; UART_InitTypeDef Init; uint8_t *pTxBuffPtr; uint16_t TxXferSize;
[單片機]
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 包头市| 宜章县| 江西省| 临西县| 肃南| 宜宾县| 红原县| 松江区| 兴国县| 潜山县| 容城县| 甘泉县| 中山市| 清新县| 木兰县| 观塘区| 南溪县| 安达市| 衡水市| 镇巴县| 政和县| 观塘区| 鹰潭市| 奈曼旗| 盐源县| 沈丘县| 怀安县| 凤台县| 灵台县| 商河县| 花莲县| 河源市| 鹤岗市| 石首市| 游戏| 宜丰县| 吉木萨尔县| 雅江县| 阿拉善盟| 会宁县| 宜黄县|