深入淺出理解STM32HAL庫的底層邏輯

芯片之家 2024-07-13 12:15

前言

??相比較早幾年使用標準庫開發來講,最近幾年HAL庫的使用是越來越多,那么我們開發應當使用哪一種呢,本文著重介紹常用的幾種開發方式及相互之間的區別,白貓也好、黑貓也好,抓到耗子就是好貓。

STM32三種開發方式

??通常新手在入門STM32的時候,首先都要先選擇一種要用的開發方式,不同的開發方式會導致你編程的架構是完全不一樣的。一般大多數都會選用標準庫和HAL庫,而極少部分人會通過直接配置寄存器進行開發。
??網上關于標準庫、HAL庫的描述相信是數不勝數。可是一個對于很多剛入門的朋友還是沒法很直觀的去真正了解這些不同開發發方式彼此之間的區別,所以筆者想以一種非常直白的方式,用自己的理解去將這些東西表述出來,如果有描述的不對的地方或者是不同意見的也可以大家提出。

1、直接配置寄存器

??不少先學了51的朋友可能會知道,會有一小部分人或是教程是通過匯編語言直接操作寄存器實現功能的,這種方法到了STM32就變得不太容易行得通了,因為STM32的寄存器數量是51單片機的十數倍,如此多的寄存器根本無法全部記憶,開發時需要經常的翻查芯片的數據手冊,此時直接操作寄存器就變得非常的費力了。但還是會有很小一部分人,喜歡去直接操作寄存器,因為這樣更接近原理,知其然也知其所以然。

2、標準庫

??上面也提到了,STM32有非常多的寄存器,而導致了開發困難,所以為此ST公司就為每款芯片都編寫了一份庫文件,也就是工程文件里stm32F1xx…之類的。在這些 .c .h文件中,包括一些常用量的宏定義,把一些外設也通過結構體變量封裝起來,如GPIO口時鐘等。所以我們只需要配置結構體變量成員就可以修改外設的配置寄存器,從而選擇不同的功能。也是目前最多人使用的方式,也是學習STM32接觸最多的一種開發方式,我也就不多闡述了。

3、HAL庫

??HAL庫是ST公司目前主力推的開發方式,全稱就是Hardware Abstraction Layer(抽象印象層)。庫如其名,很抽象,一眼看上去不太容易知道他的作用是什么。
??它的出現比標準庫要晚,但其實和標準庫一樣,都是為了節省程序開發的時期,而且HAL庫尤其的有效,如果說標準庫把實現功能需要配置的寄存器集成了,那么HAL庫的一些函數甚至可以做到某些特定功能的集成。也就是說,同樣的功能,標準庫可能要用幾句話,HAL庫只需用一句話就夠了。
??并且HAL庫也很好的解決了程序移植的問題,不同型號的stm32芯片它的標準庫是不一樣的,例如在F4上開發的程序移植到F3上是不能通用的,而使用HAL庫,只要使用的是相通的外設,程序基本可以完全復制粘貼,注意是相通外設,意思也就是不能無中生有,例如F7比F3要多幾個定時器,不能明明沒有這個定時器卻非要配置,但其實這種情況不多,絕大多數都可以直接復制粘貼。是而且使用ST公司研發的STMcube軟件,可以通過圖形化的配置功能,直接生成整個使用HAL庫的工程文件,可以說是方便至極,但是方便的同時也造成了它執行效率的低下,在各種論壇帖子真的是被吐槽的數不勝數。

HAL庫固件庫安裝與用戶手冊

1、首先設置讓Cube可以自動聯網下載相關固件庫選擇updater Settings

??設置如下

2、根據芯片選擇所需固件

??版本是向下兼容的,可以直接選擇最新版。但如果覺得最新版太大,可以閱讀下面的Main Changes.能夠支持你目前的芯片就好。

??選好了,點擊Install Now就行,過程可能有點長。建議直接官網下載到本地,再安裝文件會被下載到如下位置,建議更改此目錄,不要選在C盤!!!

3、尋找用戶幫助手冊

??進入固件所在文件夾,里面包含很多內容。

比如說 官方提供的開發板程序,每個型號下面都有對應功能的實現,用戶手冊就在Drivers文件夾下面。

STM32 HAL庫與標準庫的區別

1、句柄

??句柄(handle),有多種意義,其中第一種是指程序設計,第二種是指Windows編程。現在大部分都是指程序設計/程序開發這類。
  • 第一種解釋:句柄是一種特殊的智能指針 。當一個應用程序要引用其他系統(如數據庫、操作系統)所管理的內存塊或對象時,就要使用句柄。

  • 第二種解釋:整個Windows編程的基礎。一個句柄是指使用的一個唯一的整數值,即一個4字節(64位程序中為8字節)長的數值,來標識應用程序中的不同對象和同類中的不同的實例,諸如,一個窗口,按鈕,圖標,滾動條,輸出設備,控件或者文件等。應用程序能夠通過句柄訪問相應的對象的信息,但是句柄不是指針,程序不能利用句柄來直接閱讀文件中的信息。如果句柄不在I/O文件中,它是毫無用處的。句柄是Windows用來標志應用程序中建立的或是使用的唯一整數,Windows大量使用了句柄來標識對象。

STM32的標準庫中,句柄是一種特殊的指針,通常指向結構體!
??在STM32的標準庫中,假設我們要初始化一個外設(這里以USART為例),我們首先要初始化他們的各個寄存器。在標準庫中,這些操作都是利用固件庫結構體變量+固件庫Init函數實現的:
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = bound;//串口波特率USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字長為8位數據格式USART_InitStructure.USART_StopBits = USART_StopBits_1;//一個停止位USART_InitStructure.USART_Parity = USART_Parity_No;//無奇偶校驗位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//無硬件數據流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收發模式
USART_Init(USART3, &USART_InitStructure); //初始化串口1
可以看到,要初始化一個串口,需要:
  • 1、對六個位置進行賦值
  • 2、然后引用Init函數
??USART_InitStructure并不是一個全局結構體變量,而是只在函數內部的局部變量,初始化完成之后,USART_InitStructure就失去了作用。而在HAL庫中,同樣是USART初始化結構體變量,我們要定義為全局變量。
UART_HandleTypeDef UART1_Handler;
結構體成員
typedef struct{   USART_TypeDef                 *Instance;        /*!< UART registers base address        */   UART_InitTypeDef              Init;             /*!< UART communication parameters      */   uint8_t                       *pTxBuffPtr;      /*!< Pointer to UART Tx transfer Buffer */   uint16_t                      TxXferSize;       /*!< UART Tx Transfer size              */   uint16_t                      TxXferCount;      /*!< UART Tx Transfer Counter           */   uint8_t                       *pRxBuffPtr;      /*!< Pointer to UART Rx transfer Buffer */   uint16_t                      RxXferSize;       /*!< UART Rx Transfer size              */   uint16_t                      RxXferCount;      /*!< UART Rx Transfer Counter           */   DMA_HandleTypeDef             *hdmatx;          /*!< UART Tx DMA Handle parameters      */   DMA_HandleTypeDef             *hdmarx;          /*!< UART Rx DMA Handle parameters      */   HAL_LockTypeDef               Lock;             /*!< Locking object                     */   __IO HAL_UART_StateTypeDef    State;            /*!< UART communication state           */   __IO uint32_t                 ErrorCode;        /*!< UART Error code                    */}UART_HandleTypeDef;
我們發現,與標準庫不同的是,該成員不僅:
  • 1、包含了之前標準庫就有的六個成員(波特率,數據格式等),

  • 2、還包含過采樣、(發送或接收的)數據緩存、數據指針、串口 DMA 相關的變量、各種標志位等等要在整個項目流程中都要設置的各個成員。

    該 UART1_Handler就被稱為串口的句柄,它被貫穿整個USART收發的流程,比如開啟中斷:

HAL_UART_Receive_IT(&UART1_Handler, (u8 *)aRxBuffer, RXBUFFERSIZE);

比如后面要講到的MSP與Callback回調函數:

void HAL_UART_MspInit(UART_HandleTypeDef *huart);void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);

在這些函數中,只需要調用初始化時定義的句柄UART1_Handler就好。

2、MSP函數

MSP: MCU Specific Package 單片機的具體方案
MSP是指和MCU相關的初始化,引用一下正點原子的解釋,個人覺得說的很明白:
??我們要初始化一個串口,首先要設置和 MCU 無關的東西,例如波特率,奇偶校驗,停止位等,這些參數設置和 MCU 沒有任何關系,可以使用 STM32F1,也可以是 STM32F2/F3/F4/F7上的串口。而一個串口設備它需要一個 MCU 來承載,例如用 STM32F4 來做承載,PA9 做為發送,PA10 做為接收,MSP 就是要初始化 STM32F4 的 PA9,PA10,配置這兩個引腳。所以 HAL驅動方式的初始化流程就是:
  • HAL_USART_Init()—>HAL_USART_MspInit() ,先初始化與 MCU無關的串口協議,再初始化與 MCU 相關的串口引腳。

  • 在 STM32 的 HAL 驅動中HAL_PPP_MspInit()作為回調,被 HAL_PPP_Init()函數所調用。當我們需要移植程序到 STM32F1平臺的時候,我們只需要修改 HAL_PPP_MspInit 函數內容而不需要修改 HAL_PPP_Init 入口參數內容。

??在HAL庫中,幾乎每初始化一個外設就需要設置該外設與單片機之間的聯系,比如IO口,是否復用等等,可見,HAL庫相對于標準庫多了MSP函數之后,移植性非常強,但與此同時卻增加了代碼量和代碼的嵌套層級。可以說各有利弊。
同樣,MSP函數又可以配合句柄,達到非常強的移植性:
void HAL_UART_MspInit(UART_HandleTypeDef *huart);
3、Callback函數
??類似于MSP函數,個人認為Callback函數主要幫助用戶應用層的代碼編寫。
??還是以USART為例,在標準庫中,串口中斷了以后,我們要先在中斷中判斷是否是接收中斷,然后讀出數據,順便清除中斷標志位,然后再是對數據的處理,這樣如果我們在一個中斷函數中寫這么多代碼,就會顯得很混亂:
void USART3_IRQHandler(void)                 //串口1中斷服務程序{ u8 Res;if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)  //接收中斷(接收到的數據必須是0x0d 0x0a結尾) {  Res =USART_ReceiveData(USART3); //讀取接收到的數據/*數據處理區*/  }           } }
而在HAL庫中,進入串口中斷后,直接由HAL庫中斷函數進行托管:
void USART1_IRQHandler(void)                 {  HAL_UART_IRQHandler(&UART1_Handler); //調用HAL庫中斷處理公用函數 /***************省略無關代碼****************/ }
??????? HAL_UART_IRQHandler這個函數完成了判斷是哪個中斷(接收?發送?或者其他?),然后讀出數據,保存至緩存區,順便清除中斷標志位等等操作。
??比如我提前設置了,串口每接收五個字節,我就要對這五個字節進行處理。在一開始我定義了一個串口接收緩存區:
/*HAL庫使用的串口接收緩沖,處理邏輯由HAL庫控制,接收完這個數組就會調用HAL_UART_RxCpltCallback進行處理這個數組*//*RXBUFFERSIZE=5*/u8 aRxBuffer[RXBUFFERSIZE];
在初始化中,我在句柄里設置好了緩存區的地址,緩存大小(五個字節)
/*該代碼在HAL_UART_Receive_IT函數中,初始化時會引用*/    huart->pRxBuffPtr = pData;//aRxBuffer    huart->RxXferSize = Size;//RXBUFFERSIZE    huart->RxXferCount = Size;//RXBUFFERSIZE
? ?則在接收數據中,每接收完五個字節,HAL_UART_IRQHandler才會執行一次Callback函數:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
????????在這個Callback回調函數中,我們只需要對這接收到的五個字節(保存在aRxBuffer[]中)進行處理就好了,完全不用再去手動清除標志位等操作。
??所以說Callback函數是一個應用層代碼的函數,我們在一開始只設置句柄里面的各個參數,然后就等著HAL庫把自己安排好的代碼送到手中就可以了~
??綜上,就是HAL庫的三個與標準庫不同的地方之個人見解。個人覺得從這三個小點就可以看出HAL庫的可移植性之強大,并且用戶可以完全不去理會底層各個寄存器的操作,代碼也更有邏輯性。但與此帶來的是復雜的代碼量,極慢的編譯速度,略微低下的效率。看怎么取舍了。

STM32 HAL庫結構

??說到STM32的HAL庫,就不得不提STM32CubeMX,其作為一個可視化的配置工具,對于開發者來說,確實大大節省了開發時間。相關推薦:STM32CubeMX安裝教程STM32CubeMX就是以HAL庫為基礎的,且目前僅支持HAL庫及LL庫!首先看一下,官方給出的HAL庫的包含結構:
  • 1、stm32f4xx.h主要包含STM32同系列芯片的不同具體型號的定義,是否使用HAL庫等的定義,接著,其會根據定義的芯片信號包含具體的芯片型號的頭文件:
#if defined(STM32F405xx)#include "stm32f405xx.h"#elif defined(STM32F415xx)#include "stm32f415xx.h"#elif defined(STM32F407xx)#include "stm32f407xx.h"#elif defined(STM32F417xx)#include "stm32f417xx.h"#else#error "Please select first the target STM32F4xx device used in your application (in stm32f2xx.h file)"#endif
緊接著,其會包含stm32f4xx_hal.h。
  • 2、stm32f4xx_hal.h:stm32f4xx_hal.c/h 主要實現HAL庫的初始化、系統滴答相關函數、及CPU的調試模式配置

  • 3、stm32f4xx_hal_conf.h :該文件是一個用戶級別的配置文件,用來實現對HAL庫的裁剪,其位于用戶文件目錄,不要放在庫目錄中。

接下來對于HAL庫的源碼文件進行一下說明,HAL庫文件名均以stm32f4xx_hal開頭,后面加上_外設或者模塊名(如:stm32f4xx_hal_adc.c):
  • 4、庫文件:stm32f4xx_hal_ppp.c/.h // 主要的外設或者模塊的驅動源文件,包含了該外設的通用API

    stm32f4xx_hal_ppp_ex.c/.h // 外圍設備或模塊驅動程序的擴展文件。這組文件中包含特定型號或者系列的芯片的特殊API。以及如果該特定的芯片內部有不同的實現方式,則該文件中的特殊API將覆蓋_ppp中的通用API。

    stm32f4xx_hal.c/.h // 此文件用于HAL初始化,并且包含DBGMCU、重映射和基于systick的時間延遲等相關的API

  • 5、其他庫文件

    用戶級別文件:

    stm32f4xx_hal_msp_template.c // 只有.c沒有.h。它包含用戶應用程序中使用的外設的MSP初始化和反初始化(主程序和回調函數)。使用者復制到自己目錄下使用模板。

    stm32f4xx_hal_conf_template.h // 用戶級別的庫配置文件模板。使用者復制到自己目錄下使用

    system_stm32f4xx.c // 此文件主要包含SystemInit()函數,該函數在剛復位及跳到main之前的啟動過程中被調用。它不在啟動時配置系統時鐘(與標準庫相反)。時鐘的配置在用戶文件中使用HAL API來完成。startup_stm32f4xx.s // 芯片啟動文件,主要包含堆棧定義,終端向量表等 stm32f4xx_it.c/.h // 中斷處理函數的相關實現

  • 6 main.c/.h //

根據HAL庫的命名規則,其API可以分為以下三大類:
  • 初始化/反初始化函數:
HAL_PPP_Init(), HAL_PPP_DeInit()
  • IO 操作函數:
HAL_PPP_Read(),HAL_PPP_Write(),HAL_PPP_Transmit(), HAL_PPP_Receive()
  • 控制函數:
HAL_PPP_Set (), HAL_PPP_Get ().
  • 狀態和錯誤:
** HAL_PPP_GetState (), HAL_PPP_GetError ().
  • 注意:
??目前LL庫是和HAL庫捆綁發布的,所以在HAL庫源碼中,還有一些名為 stm32f2xx_ll_ppp的源碼文件,這些文件就是新增的LL庫文件。使用CubeMX生產項目時,可以選擇LL庫。
??HAL庫最大的特點就是對底層進行了抽象。在此結構下,用戶代碼的處理主要分為三部分:
  • 處理外設句柄(實現用戶功能)
  • 處理MSP
  • 處理各種回調函數
相關知識如下:

1、外設句柄定義

??用戶代碼的第一大部分:對于外設句柄的處理。HAL庫在結構上,對每個外設抽象成了一個稱為ppp_HandleTypeDef的結構體,其中ppp就是每個外設的名字。*所有的函數都是工作在ppp_HandleTypeDef指針之下。
  • 多實例支持:每個外設/模塊實例都有自己的句柄。因此,實例資源是獨立的下面,以ADC為例,外圍進程相互通信:該句柄用于管理進程例程之間的共享數據資源。
    /**  * @brief  ADC handle Structure definition */typedef struct{ ADC_TypeDef                   *Instance;                   /*!< Register base address */ ADC_InitTypeDef               Init;                        /*!< ADC required parameters */  __IO uint32_t                 NbrOfCurrentConversionRank;  /*!< ADC number of current conversion rank */ DMA_HandleTypeDef             *DMA_Handle;                 /*!< Pointer DMA Handler */ HAL_LockTypeDef               Lock;                        /*!< ADC locking object */ __IO uint32_t                 State;                       /*!< ADC communication state */ __IO uint32_t                 ErrorCode;                   /*!< ADC Error code */}ADC_HandleTypeDef;
??從上面的定義可以看出,ADC_HandleTypeDef中包含了ADC可能出現的所有定義,對于用戶想要使用ADC只要定義一個ADC_HandleTypeDef的變量,給每個變量賦好值,對應的外設就抽象完了。接下來就是具體使用了。
???當然,對于那些共享型外設或者說系統外設來說,他們不需要進行以上這樣的抽象,這些部分與原來的標準外設庫函數基本一樣。例如以下外設:
  • GPIO

  • SYSTICK

  • NVIC

  • RCC

  • FLASH

??以GPIO為例,對于HAL_GPIO_Init() 函數,其只需要GPIO 地址以及其初始化參數即可。

2、 三種編程方式

HAL庫對所有的函數模型也進行了統一。在HAL庫中,支持三種編程模式:輪詢模式、中斷模式、DMA模式(如果外設支持)。其分別對應如下三種類型的函數(以ADC為例):
HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc); HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc);
HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc);HAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc);
HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length);HAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef* hadc);
???其中,帶_IT的表示工作在中斷模式下;帶_DMA的工作在DMA模式下(注意:DMA模式下也是開中斷的);什么都沒帶的就是輪詢模式(沒有開啟中斷的)。至于使用者使用何種方式,就看自己的選擇了。
??此外,新的HAL庫架構下統一采用宏的形式對各種中斷等進行配置(原來標準外設庫一般都是各種函數)。針對每種外設主要由以下宏:
__HAL_PPP_ENABLE_IT(HANDLE, INTERRUPT):使能一個指定的外設中斷__HAL_PPP_DISABLE_IT(HANDLE, INTERRUPT):失能一個指定的外設中斷__HAL_PPP_GET_IT (HANDLE, __ INTERRUPT __):獲得一個指定的外設中斷狀態__HAL_PPP_CLEAR_IT (HANDLE, __ INTERRUPT __):清除一個指定的外設的中斷狀態__HAL_PPP_GET_FLAG (HANDLE, FLAG):獲取一個指定的外設的標志狀態__HAL_PPP_CLEAR_FLAG (HANDLE, FLAG):清除一個指定的外設的標志狀態__HAL_PPP_ENABLE(HANDLE) :使能外設__HAL_PPP_DISABLE(HANDLE) :失能外設__HAL_PPP_XXXX (HANDLE, PARAM) :指定外設的宏定義_HAL_PPP_GET IT_SOURCE (HANDLE, __ INTERRUPT __):檢查中斷源

3、 三大回調函數

??在HAL庫的源碼中,到處可見一些以__weak開頭的函數,而且這些函數,有些已經被實現了,比如:
__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority){/*Configure the SysTick to have interrupt in 1ms time basis*/ HAL_SYSTICK_Config(SystemCoreClock/1000U);/*Configure the SysTick IRQ priority */ HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority ,0U);/* Return function status */return HAL_OK;}
有些則沒有被實現,例如:
__weak void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi){/* Prevent unused argument(s) compilation warning */  UNUSED(hspi);/* NOTE : This function should not be modified, when the callback is needed,the HAL_SPI_TxCpltCallback should be implemented in the user file  */}
?? 所有帶有__weak關鍵字的函數表示,就可以由用戶自己來實現。如果出現了同名函數,且不帶__weak關鍵字,那么連接器就會采用外部實現的同名函數。
??通常來說,HAL庫負責整個處理和MCU外設的處理邏輯,并將必要部分以回調函數的形式給出到用戶,用戶只需要在對應的回調函數中做修改即可。HAL庫包含如下三種用戶級別回調函數(PPP為外設名):
  • 1、外設系統級初始化/解除初始化回調函數(用戶代碼的第二大部分:對于MSP的處理):
HAL_PPP_MspInit()和 HAL_PPP_MspDeInit**
例如:
__weak void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)。
在HAL_PPP_Init() 函數中被調用,用來初始化底層相關的設備(GPIOs, clock, DMA, interrupt)
  • 2、處理完成回調函數:HAL_PPP_ProcessCpltCallback*(Process指具體某種處理,如UART的Tx),
例如:
__weak void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi)
當外設或者DMA工作完成后時,觸發中斷,該回調函數會在外設中斷處理函數或者DMA的中斷處理函數中被調用錯誤處理回調函數:
HAL_PPP_ErrorCallback
例如:
__weak void HAL_SPI_ErrorCallback(SPI_HandleTypeDef hspi)*
  • 3、當外設或者DMA出現錯誤時,觸發終端,該回調函數會在外設中斷處理函數或者DMA的中斷處理函數中被調用
錯誤處理回調函數:
HAL_PPP_ErrorCallback
例如:
__weak void HAL_SPI_ErrorCallback(SPI_HandleTypeDef hspi)*
??當外設或者DMA出現錯誤時,觸發終端,該回調函數會在外設中斷處理函數或者DMA的中斷處理函數中被調用。
??絕大多數用戶代碼均在以上三大回調函數中實現。
??HAL庫結構中,在每次初始化前(尤其是在多次調用初始化前),先調用對應的反初始化(DeInit)函數是非常有必要的。
某些外設多次初始化時不調用返回會導致初始化失敗。完成回調函數有多中,例如串口的完成回調函數有
HAL_UART_TxCpltCallbackHAL_UART_TxHalfCpltCallback
??(用戶代碼的第三大部分:對于上面第二點和第三點的各種回調函數的處理)在實際使用中,發現HAL仍有不少問題,例如在使用USB時,其庫配置存在問題。

HAL庫移植使用

基本步驟:
  • 1、復制stm32f2xx_hal_msp_template.c,參照該模板,依次實現用到的外設的HAL_PPP_MspInit()和 HAL_PPP_MspDeInit。

  • 2、復制stm32f2xx_hal_conf_template.h,用戶可以在此文件中自由裁剪,配置HAL庫。

  • 3、在使用HAL庫時,必須先調用函數:HAL_StatusTypeDef HAL_Init(void)(該函數在stm32f2xx_hal.c中定義,也就意味著第一點中,必須首先實現HAL_MspInit(void)和HAL_MspDeInit(void))

  • 4、HAL庫與STD庫不同,HAL庫使用RCC中的函數來配置系統時鐘,用戶需要單獨寫時鐘配置函數(STD庫默認在system_stm32f2xx.c中)

  • 5、關于中斷,HAL提供了中斷處理函數,只需要調用HAL提供的中斷處理函數。用戶自己的代碼,不建議先寫到中斷中,而應該寫到HAL提供的回調函數中。

  • 6、對于每一個外設,HAL都提供了回調函數,回調函數用來實現用戶自己的代碼。整個調用結構由HAL庫自己完成。

例如:
Uart中,HAL提供了
void HAL_UART_IRQHandler(UART_HandleTypeDef *huart);
函數,用戶只需要觸發中斷后,用戶只需要調用該函數即可,同時,自己的代碼寫在對應的回調函數中即可!如下:
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart);void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart);
使用了哪種就用哪個回調函數即可!
基本結構
綜上所述,使用HAL庫編寫程序(針對某個外設)的基本結構(以串口為例)如下:
  • 1、 配置外設句柄 例如,建立UartConfig.c,在其中定義串口句柄 UART_HandleTypeDef huart;接著使用初始化句柄(HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef huart))

  • 2、編寫Msp 例如,建立UartMsp.c,在其中實現void HAL_UART_MspInit(UART_HandleTypeDef huart) 和 void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)

  • 3、實現對應的回調函數 例如,建立UartCallBack.c,在其中實現上文所說明的三大回調函數中的完成回調函數和錯誤回調函數

參考文檔及網文鏈接

ST - Description of STM32F4 HAL and LL drivers.pdf
?ST - en.stm32_embedded_software_offering.pdf
作者:ZCShoucsdn 來源:CSDN 原文:https://blog.csdn.net/zcshoucsdn/article/details/55213616
作者:ZCShoucsdn 來源:CSDN 原文:https://blog.csdn.net/zcshoucsdn/article/details/55213616
作者:Error_4O4 來源:CSDN 原文:https://blog.csdn.net/weixin_43186792/article/details/88759321
作者:csdnpapa 來源:CSDN 原文:https://blog.csdn.net/csdnpapa/article/details/79309937
來源:STM32嵌入式,開發如有侵權,請聯系刪除!
往期推薦

深度長文:STM32是如何軟硬件結合,編譯后怎么樣一步步運行起來的


一份很棒的外設驅動庫!基于STM32F4


STM32奪命100問,收藏夾吃灰走起~


干貨 | 一文講透STM32串口DMA收發機制


評論
  • 做藍牙音箱的工程師大概都碰過這個局面。產品要連手機放歌,要本地播開機提示音和按鍵音,還要接 App 做配網和狀態上報。三件事拆開,早先的常規做法是音頻藍牙一顆料、數傳藍牙一顆料、本地播放再掛一顆小 MCU 加一片 Flash。板子越畫越大,BOM 越算越貴,待機電流和固件工作量也跟著漲。WT2605C 出來以后,這套需求可以集成到一顆芯片,就是 WT2605C-32N,該芯片采用QFN32 封裝,4×4 毫米,把音頻藍牙、BLE 數傳和 MP3 本地播放三樣全包了。對藍牙音箱來說,最實在的好處就
    唯創知音語音芯片 2026-08-06 15:14 374瀏覽
  • 在前六期中,我們已經分別討論了 CRA 的適用范圍、整體影響、漏洞通報義務、風險評估與技術文檔證據鏈、第三方組件與 SBOM 供應鏈治理,以及產品上市后的支持期、安全更新、用戶說明和終止支持管理。到這里,企業已經能夠回答幾個核心問題:產品是否落入 CRA 適用范圍,產品由哪些組件構成,企業如何證明自己在設計、開發和上市前采取了必要的安全措施,以及產品上市后如何持續維護和安全下線。但對于真正準備落地 CRA 合規的企業來說,還有一個更現實的問題:CRA 的法規條文相對原則化,企業應當如何把“網絡安
    虹科云科技 2026-08-03 16:51 251834瀏覽
  • 讓微弱脈沖信號更清晰——鎖相放大器集成Boxcar平均器在脈沖激光、泵浦-探測、時間分辨光譜、飛行時間質譜等實驗中,真正需要測量的信號往往只出現在一個很短的時間窗口內,卻被淹沒在遠大于它的噪聲和背景之中。 針對這類穩定重復的微弱脈沖與瞬態信號,賽恩科儀為OE2052雙通道數字鎖相放大器帶來全新的Boxcar Averager功能升級:在鎖相檢測之外,進一步提供從周期波形觀察、門控測量到多周期平均的完整數字Boxcar測量鏈路。 Boxcar平均器,如何從噪聲中“截取”目標信號?Boxcar平均器
    SSI_賽恩科儀 2026-08-07 15:49 16362瀏覽
  • 在物聯網從“萬物互聯”邁向“萬物智聯”的進程中,LTE Cat.1憑借其在速率、成本與網絡覆蓋之間的完美平衡,正成為中低速物聯網市場的絕對主力。隨著2G/3G網絡的逐步退網以及新國標對終端設備智能化、定位功能的強制要求,Cat.1模組迎來了爆發式的增長窗口。在這一關鍵節點,基于華為海思Hi2131芯片設計的LTE Cat.1模組,憑借其在能效、射頻、架構及物理規格上的底層創新,成功打破了“高性能必高功耗”的傳統魔咒,為行業提供了極具競爭力的連接最優解。核心技術優勢:重塑Cat.1能效與連接標桿海
    用戶1778981989717 2026-08-05 21:04 205瀏覽
  • ?摘要:低價大流量卡正全面退市,政策收緊已成定局。面對傳統號卡的不確定性,隨身WiFi憑借穩定連接、多設備共享、獨立設備和靈活套餐等優勢,成為務實可靠的備選方案。1、流量卡黃金時代要結束了通信行業正迎來一場前所未有的“地震式”調整——曾讓無數用戶追捧的低價大流量卡,正在全速退出各大平臺。這早已不是一次普通的競合,而是一場趨勢性的行業洗牌。回望過去,19元200G的神卡,那時真是“睡著都能笑醒”,便宜到不敢相信,爽到忍不住炫耀。那些日子,好像隨便刷、隨便看,流量自由觸手可及。可如今,回頭再看,那種
    愛上電路設計 2026-08-03 10:21 128979瀏覽
  • 一、方案簡介在Buildroot構建的嵌入式Linux系統中部署Flutter應用,主流有兩套成熟的開源方案,分別適配不同的顯示場景與開發需求:方案一:flutter-elinux(Sony開源方案)由索尼官方維護的嵌入式Linux Flutter工具鏈,既支持DRM/GBM直接渲染,也兼容Wayland、X11等多種顯示后端,場景適配性更廣。方案二:flutter-pi(輕量級嵌入器)一款輕量級Flutter引擎宿主程序,僅基于底層DRM/GBM接口實現渲染,無需依賴桌面環境,資源占用更低,更
    飛凌嵌入式 2026-08-07 09:34 164瀏覽
  • 樓宇自控里的“巴別塔”一棟智慧樓宇、一個產業園區里,暖通空調運行著廠商私有協議,照明系統遵循專屬通信標準,變配電、門禁安防各成體系——設備間數據壁壘森嚴,上位平臺對接全靠定制化 “翻譯” 開發,不僅成本高企,交付周期也難以管控。這就是樓宇自控行業多年的痛點:協議林立、封閉林立。而破局的鑰匙,早在30多年前就已經寫好了——BACnet。作為ASHRAE制定的樓宇自控國際標準協議,BACnet是如今全球樓宇自控系統(BAS)互聯互通的“通用語言”。新風機、冷源群控、變配電、照明、門禁,凡是需要被樓宇
    飛凌嵌入式 2026-08-10 09:26 206瀏覽
  • 摘要東莞市恒創連接器有限公司(HCHGCONN)是位于廣東東莞的連接器源頭制造工廠,專注于連接器國產替代、小間距大電流連接器、線對板連接器、線對線連接器、板對板連接器、電源連接器及定制連接器開發。公司面向工業自動化、新能源儲能、BMS、汽車電子、AI服務器、GPU供電、通信設備、醫療設備和智能家居等場景,提供從產品選型、替代評估、樣品驗證到批量交付的一站式連接方案。恒創可支持 Molex、TE Connectivity、JST、Hirose、Samtec 等國際品牌部分系列的國產替代評估。常見替
    HC003 2026-08-07 10:14 166瀏覽
  •        很多人只見過封裝在SMD外殼里的小尺寸晶振,卻不知道一顆2016、1612甚至1210封裝的微型石英晶振,從一塊巴掌大的石英原礦,到最終能穩定起振的成品,要經過十幾道精密工序。它內部的石英晶片厚度最薄不到20微米,比普通A4紙的1/5還薄,整個生產過程里哪怕0.1微米的誤差,都會直接廢掉整批產品,這也是小尺寸晶振過去長期依賴進口,國內廠商花了十幾年才啃下量產硬骨頭的核心原因。1. 原石定向切割:0.01度的角度誤差都不能有小尺寸晶振的第一步,
    TKD泰晶科技 2026-08-07 08:43 525瀏覽
  • 做電池供電攝像頭、可視門鈴、戶外安防的同學應該都踩過這個坑:攝像頭要拍,ISP、sensor、無線模塊全得開著,整機電流動輒幾百 mA。一節 18650 撐不了幾天,用戶投訴“怎么又沒電了”。有人會說:加個 PIR 人體紅外不就行了?問題是 PIR 怕熱、怕寵物、怕隔著亞克力/玻璃殼,而且只能感知“有溫差的人體移動”,靈敏度飄忽。真正省電的思路應該是:讓攝像頭平時徹底睡死,只有“前面有人/有動靜”時才被一鍵喚醒——而負責這個“看門”角色的,最合適的是一顆低功耗雷達。一、為什么是雷達,而不是 PI
    唯創知音語音芯片 2026-08-07 14:44 187瀏覽
  • 導語在現代高速數字電路設計中,信號的完整性已不僅是理想波形推演,而是一場與物理非理想特性正面博弈的工程實踐。濾波器芯片作為凈化傳輸鏈路的關鍵屏障,其核心挑戰在于:能否有效識別并濾除那些隱匿在電平跳變過程中的亞納秒級瞬態脈沖干擾,這類干擾持續極短,卻足以在高速鏈路中引發誤觸發。然而,傳統函數發生器受限于采樣率與邊沿速率,根本無法忠實復現如此狹窄且陡峭的異常波形。針對此困境,德思特TS-AWG7000系列任意波形發生器以17 GS/s采樣率與50 ps原生邊沿速度,為瞬態脈沖提供精細刻畫,配合SPG
    德思特測試測量 2026-08-05 14:06 5瀏覽
  • 產品使用18V供電,配套4串鋰離子電池,需要設計一個充電器。因為輸入18V,電池最高 16.8V,壓差僅 1.2V。因為壓差太小。使用開關型的充電控制芯片不穩定。嘗試自行設計一個。整體采用分立三極管 + TL431架構,分4個功能單元:使能控制回路、限流環路、TL431 精密恒壓反饋環路、PNP 功率管主功率輸出回路;實現完整鋰電池充電邏輯。使能控制回路按鍵按下:5V 電壓經 R12 (2kΩ) 送入 NPN 管 Q3 基極,Q3 飽和導通,對地拉低 R1、R2 組成的分壓控制節點電位;該節點直
    southcreek 2026-08-07 13:45 484瀏覽
  • 文:杜杰編輯:侯煜當地時間7月28日,美國特朗普政府落地最新科技封鎖政策,美國聯邦通信委員會(FCC)正式更新《受管制清單》,新增兩大類設備——境外生產的先進機器人設備、境外生產的聯網電力逆變器。FCC在官方情況說明書中明確,該類境外制造產品,“會對美國國家安全或美國民眾的人身安全構成無法承受的風險”。本次新規設置明確豁免機制:經美國國防部(DoW)、電力逆變器品類經美國國土安全部(DHS)審核并授予“有條件批準”,認定對應設備品類不存在重大安全風險,即可獲得準入豁免。同時政策嚴格執行新老劃斷原
    華爾街科技眼 2026-08-03 21:28 367瀏覽
  •                                                                        
    廣州鐵金剛 2026-08-06 17:44 215216瀏覽
  • 摘要在防爆電氣設計中,只參照芯數選型而忽略額定載流量,長期滿負荷運行會出現插頭發熱、接觸面氧化、IP67 密封受熱老化等問題。結合常用 3 針 3 孔、4 芯、5PIN、8PIN 圓形防爆連接器,制作分級電流參數對照表,區分冷壓免焊接、焊接兩種接線結構的安全載流數值,設置合理電流冗余系數,搭配使用環境修正參數,規范防爆接近開關連接器、防爆法蘭插座的選型計算方式。關鍵詞圓形防爆連接器,載流參數表,防爆法蘭插座,防爆端子接頭,IP67 防爆防水接插件1 產品概述圓形防爆連接器觸點載流能力由插針直徑、
    kyfbest科迎法電氣 2026-08-03 09:18 128703瀏覽
我要評論
0
點擊右上角,分享到朋友圈 我知道啦
請使用瀏覽器分享功能 我知道啦
主站蜘蛛池模板: 麦子交换3中字版| 史上最强女人强奸男人的电影在线观看| 斗罗大陆电视剧第二部| 《爱我几何》在线观看| 娃娃脸1电影完整版在线观看| 我叫王大锤| 电影需要帮我播种的英文| 团圆饭电视剧全集| 爱情攻略吻戏| 机动战士高达seed粤语| 日军屠杀慰安妇影像| 斗罗大陆2绝世唐门免费观看49| 侄女开发日记观看顺序| 斗破苍穹年番全免费观看| 天际歌曲原唱| 名侦探柯| 荣誉守则满天星免费观看高清版 | 鬼子暴行少女电影VCD正片| 恶灵骑士2| 《天海翼商务旅行》电影在线观看| 无法传达给你在线观看日剧| 流着眼泪说再见| 无名之辈电影高清免费| 姐妹牙医电影完整版在线观看| 电影香醇的锈感| 七天骗了一个村| 《柳舟记》免费观看无需下载 | 偷窥邻居做爰2| 美国《私人女性监狱》| 公之浮之中字在线观看| 奇妙发型屋完整版| 蒙古草原 天气晴| 僵尸王日记| 第一次4电视剧免费观看| 能登的新娘| 相叒游戏| 网络情缘原唱| 韩剧搞笑一家人2| 奶头按摩电影| 诡秘之主动漫在哪看| 哪吒2之魔童闹海在线免费完整版| 玩偶游戏第二部| 罪恶王冠02| 叶问外传张天志电影免费观看国语 | 电影永恒的爱情| 疯狂神父| 丈夫的陷阱| 商务旅馆带绿帽子在线观看| 魔镜号街头中文字幕高清资源| 花与蛇全集| 一二三级域名怎样看| 特邀外卖员的女主角是谁| 密室逃脱0713体验版免费| 诱人的私人瑜伽教练| 善良的阿姨在线观看| 斗罗大陆在线观看全集免费| 阿凡达2水之道普通话免费高清| 洪熙官电视剧| 有口难辨| 烈爱交易在线观看| 辛福爱人| 游轮大浩劫| 三家购物| 孟鹤堂结两次婚| 出包女王免费观看全集完整高清| 三门峡金燕| 美容特殊治疗3| 皇家战士| 美容是特殊待遇5| 镖行天下前传之决战天涯| 铿铿锵锵锵免费观看高清| 《湄公河行动》电影| 二十一世纪性格爱情指南英国| 蜡笔小新第6季动漫| 冤罪 bl| 死刑犯电影| 斯巴达300勇士在线观看| 夺命色诱| 倚天剑屠龙刀电视剧| 总统夫人星克莱尔完整版在线观看| 李采潭电影全集在线观看| 人人都爱雷蒙德第九季| 人猿泰山hr版 1995主演| 奇思妙想周莹博士王俊凯| 广场舞老鹰捉小鸡| 同学的母亲伦理国语在线观看| 热情邻居| 我的漂亮瘦子5最新消息| 小米3与小米2s对比| 法国空乘2016不难空乘在线观看 | 网红逆袭全集免费| 瑜伽老师诱惑2| 死神来了3下载| 喜羊羊之灰太狼之决战次时代| 《部长来我家| 爱的罗曼史无删减在线观看BD| 我们坐着来一次好不好视频| 老泥妹| 亲爱的妈妈3韩国电影中文| BBOX入门BASS变态重| 法国电影《金牌销售》在线播放 | 特别治疗| 你的目光所及之处韩剧| 周杰伦的歌东风破| 向风而行免费观看全集| 满天星版《荒岛女儿国》电影| 杯水情歌吉他谱| 钢琴曲献给爱丽丝| 韩剧修理工的艳遇| 乱马2/1| 家庭计划免费观看完整版电影| 插曲的痛30全集免费观看高清版在线观看 | 王琦 九种体质| 和丈夫的部下玩火的夜晚HD无字_经典电影_手机完整版在线观看_纤纤影院 | 家庭教师剧场版国语| 银河奥特曼9| 长河落日 电视剧| 无颜之月1到5免费动漫| 高压监狱法版在线| 孟丽君电视剧| 爱唯侦察9集免费观看| 乔迪-加森| 女版《壮志凌云》伦理| 小猪佩奇mp3| 修理工的艳遇韩国电影| 美食的俘虏141| 法国空乘5完整版在线看| 俄罗斯免费伦理电影需要爸爸的种子 | 恶灵骑士2高清完整| 睫毛膏3美国电影| 丛林战争| 恰恰电影在线观看动漫| 这就是灌篮第五季| 如懿传1-87集在线观看| 好朋友的母亲2完整有限中| 中秋晚会2023| 迷人的保姆hd| 美丽的秘密4动漫免费观看| 刘亦菲承认怀孕三个月| 无极在线观看| 两个妻子剧情介绍| 《模特人生》韩剧| 电视剧50玫瑰| xl司令第一季全集在线观看无马赛克影视| 三个未婚妈妈免费观看电视剧| 电视剧烈火凤凰| 女子护卫队满天星1973完整版| 秦雪梅哭灵| 犯罪心理第十八季| 韩国炸鸡一只卖到百元| 八尺夫人意大利免费观看全集高清 | 花谢花飞花满天免费观看完整版| 《梅萨莉娜》完整版在线播放| 杨贵妃秘史剧情| 水怪2黑木林电影免费观看| 《魔力宝贝监狱》在线观看| 高清铁血战士:杀戮之王未删减| 妻子1完整高清电视剧| 有口难辨| 厚颜无耻无删减版| 国风按摩院在线观看| 机械姬迅雷下载| 西藏秘密电视剧| 一拳超人 迅雷下载| 金瓶梅龚玥菲| 瓜达卢佩玫瑰在线播放| 电视剧棋士免费观看全集 | 战狼6免费高清| 两个母亲中字ID| 少女2完整版在线观看| 以王之名| 电影《牙医姐妹》观看| 我和大佬第二季免费看完整版 | 日本美女视频| 《外出》2015版| 《古墓丽影hr版:满天星》神鬼战士2| 美国新版娃娃脸9| 《梅根2.0》| 肌肤的纹理在线观看| 甄子丹战狼传说| 钟表馆事件未删减| 最牛村主任被打掉| 金瓶风月宝鉴电影免费观看 | 读心专家电视剧| 空调维修工的艳遇在线观看 | 大叔的爱泰剧一共多少集| 美容室:待遇服务6| 最强大脑第八季免费观看完整版| 凯登克罗斯| 新闺蜜时代23| 一起嗟嗟嗟免费观看30分钟电视剧| 贤妻电视剧全集下载| 女超人2013| 不会恋爱的我们| 浪人电影| 花城谢怜下面夹东西AO3| 一夜情电影| 牧神记40在线观看| 雅安第一网红琼姐身世| 站着再来一次第26集讲什么| 行尸走肉第二季第二集| 高清岁月有情时| 乌云之上全集在线观看| 符文密码| 好想去你的世界爱你电影| 周星驰西游降魔篇在线观看| 731部队配狗免费观看| 女忍者忍法帖2| 舞男情未了 任达华| 艳姆全集动漫| 天使心在线观看| 电影《私人航空》法国电影| 杨丽花歌仔戏薛丁山| 韩国电影办公室3免费完整版 在线| 和部长出差三天电影观看| 僵尸归来4:阿修罗之泪电影| 人猿泰山hr版在线| 饥饿难耐| 狼友电影影院| 九重紫电视剧哪里可以看| 《部长出差的日子》演员 | 双人高潮按摩在线观看免费高清版| 敢死队1| 《维修工人的艳遇》中字| 花嫁人形1—8| 装腔作势代表什么生肖| 我就是这般女子| 法国监狱2| 肥胖女人免费观看连续剧| 对你的想象电影| 《农场主的三个女儿》 | 同学聚会2电影完整版结局在线看免费 | 薛平贵与王宝钏47| 小小水蜜桃6电视剧全集在线观看| 暴风电影在线观看免费播放| 开心鬼放暑假| 林芝县| 终末的女武神第二季观看| 《姊妹牙医》完整版正片| 一起飞电影完整版百度影音| 骚麦 小莫| 灵珊baby| 王多鱼打扑克免费软件| 膝盖疼痛部位对照表| 要爸爸的种子| 心动的信号第七季免费播放| 新版高压监狱| 越狱第三季全集下载| 人民的名义 迅雷种子| 海之声免费观看完整| 初次尝鲜免费观看全集完整版| 漂亮的保姆3在线播放西瓜| 佛陀1—54集国语版电视剧佛陀传| 老师的手指在里面转动的写| 姐妹牙医电影在线完整版观看中文字幕| 魔女与魔神| jizz日本| 肥臀艳母| 一切都值得 张杰| 西班牙掌中之物完整版免费观看| 求求鬼别吃我| 百度变形金刚| 超级老师3免费全集| 修罗战神:谁敢动我家人全集免费| 回复术士118集真人版剧情介绍| 小屁孩日记2| 菁菁和公公| 万古至尊动漫在线观看免费完整版| 任嘉伦武庚纪在线观看免费观看| 八戒八戒电影在线观看播放| 偷窥侯爷粗壮冲刺顶弄H视频| 荣耀法则满天星版在线观看| 生化危机之惩罚| 电影弱点| 《特殊交易》在线观看高清| 韩国朋友的妈妈在线观看| 私人女人监狱HD免费看| 寄往电视台的神秘影像未删减| 姐妹牙医在线电影播放完整版| 归途电视剧全集免费观看乐视| 我女朋友妈妈双字ID缩写| 熊出没之过年动画| 有夫之妇电视剧剧情介绍| 全职猎人 99| 果宝特攻2全集| 五亿探长雷洛传电影| 高清轮回的花瓣未删减| 佐助真传| 人猿泰山无删减版1995| 超级魔术师克里斯| 《女仆日记》法国版| 圣少女玩具| 《需要爸爸播种美国》爸爸是谁扮演的| 黑白配国语版在线播放| 我的姐妹免费韩剧电视剧| 《社长夫人的美貌》哪里能免费看 | 奥田咲种子| 神农架林区| 热血教师在线观看免费完整版| 白峰ミウ女教师无删减在线播放 | 保镖李建文| 3对1:三人一次性体检2| 快播韩国电影| 阵地电视剧免费观看完整版高清| 文化| 超越情感电视剧免费观看全集完整版 | 崇州市| 古惑仔7之绝义升天| 平步青云| 宫女上位短剧全集| 满天星电影无删减完整版| 他偏爱我短剧免费观看全集| 美国版播种| 家国两难全| 隐形帽子高清在线观看| 犯罪现场调查第12季| 女友母亲双字ID| 错撩电视剧| 美国式禁忌3睫毛膏| 如懿传免费观看在线全集| 酒店激战2第5集在线播放| 干露露廖凡| 维修师傅的的艳遇电影| 九龙城寨电影| 华丽的外出手机在线完整| 潜伏电视剧在线观看| 示范销售避孕套免费看| 纯真的年代全集| 韩国伦理免费网爸爸播下颗种子| 黑执事第一季| 凯·帕克《朱莉》| 女子当众撩衣给男友喂NAI| 未知| 波兰发生多起涂黑石头冒充煤炭事件| 成全高清完整版免费动漫| 幸福满屋 电视剧| 金银悔5一1手机版| 特赦1959全集完整版在线播放| 麻花无痕传剧mv免费观看全集高清| 铁血壮士电视剧| 兄弟的女友2免费观看电视剧| 禁室培欲终结篇| 做aj的视频大全电视剧内地 | 韩剧《隐形的帽子》 | 我家浴缸二三事在线观看| 女房东的滋味HD中字| 城中之城剧情介绍| 《义子侵犯》北条麻妃在线观看| 爱国让你想起什么| xL司令第一季无马赛免费观看高清 | 法国满天星《蛇妖》| 触手可及的幸福电视剧免费观看全集| 漫画解说合集一口气看完| 绝密飞行| 人肉炸弹| 高压监狱2大佬喜欢怎罚| 鹊刀门传奇| 爷们儿最后一集大结局| 京城大状师| 卑触家的规矩| 电影《爱上女闺蜜》播放| 联手复仇虐渣:双胞胎姐妹短剧全集 | 高清《捉奸侦探》电影| 《流浪地球1》高清免费看| 赛车总动员全集| 韩剧《下属的妻子》主演名单表 | 电视剧捍卫者在线观看| 百花奖总导演致歉| 日本电影牙医姐妹在线观看| 《极度召唤》| 莫妮卡版《爱我几何》在线观看 | 叵测未删减| 家属动漫1-6全集免费观看| 狐妖小红娘无暮篇免费观看| 吴君如搞笑电影国语| 悬崖电视剧在线观看免费完整版| 秘书在办公室被躁BD在线小说| ylacoyote女超人| 和寡妇房东在做爰2| 美食总动员在线观看| 落魄贵族琉璃川免费观看全集动漫版 | 洗屋全集在线免费观看| 汪文斌任命| 金银瓶1-5hd日语| 铃芽之旅免费观看完整| 法国电影女超人麦乐迪在线观看免费高清版| 高清《灭火宝贝(高压监狱)》| 大红灯笼高高挂在线观看| 《美丽女儿替父亲还债》剧情电影电| 女老师3免费观看全集电视剧| 末日袭击| 男子瘫痪儿子将其饿死| 终极笔记电视剧免费观看超清| 苍井空钱免费观看| 二叔剧情介绍| 《妻子去加班的夜》中文翻译| 泰剧甜心派| 《混血的摇篮曲1973》| 狗剩快跑全集在线免费观看| 铠甲勇士捕王 电影| 男女一起愁愁愁免费在线观看| 孙佳慧VK| 大嫂查之女在线观看| 97在线观看免费高清电视剧网站 | 光荣时代电视剧免费观看完整版| 四个女忍者 满天星 雪姬| 你给老子不上班| 失足妇女什么意思| 做aj的免费大全电视| 《疯狂动物城1》免费完整版| 竹溪县| 女机器人全集高清免费观看| 恋爱先生大结局| 九品芝麻官粤语高清| 枪口下的女人| 电影巜商务旅行戴帽子的同行2019主演| 苏格兰牧羊犬好养吗| 《旷野之物》朴智炫演在线观看| 保姆119全集下载| 美丽的桃子5大结局| 无敌破坏王qvod| 对不起 我爱你| 鲁佩的玫瑰免费观看| 别打扰我读书电视剧结局免费观看 | 美姊妹 赤板栗 完整版| 泰国电视剧千方百计爱上你| 甘城光辉游乐园在线观看| 木下檀檀子完整版电影| 入青云电视剧免费观看| 三十而已在哪看| 我的xl司令在线观看免费高清全集| 《四大美人之貂蝉》| 卿本佳人 在线| 总统夫人的夜晚伦理电影1997在线观看| 古惑仔5之龙争虎斗| 黑暗之魂好玩吗| 黄色仓库| 时空陷阱| 伪娘电影| 以家人之名在线| 水暖工韩国伦理电影| 十大rko| 美女战争| 法国监狱(法国)电影观看| 拔出来的一瞬间| 千王之王 周星驰| 法国空乘4之不良航班| 若你安好便是晴天电视剧免费 | 星克莱尔总统夫人1997 | 雅典娜女神全集| 高清《好好的时光》电视剧| 男女一起愁愁愁免费全集电视剧免费 | 婚姻保卫战电视剧免费观看| 老版三国演义全集高清| 修理工的艳遇 在线 | 牧神记在线观看完整版| 林俊杰成都演唱会| 女超人麦乐迪无删减免费版| 好先生 电视剧| 黑龙江尚志九江村整村失联| 七龙珠在线| 三国创世录| 高清《调教の锁》动漫全集观看| 思春期诱惑下载| 同学两亿岁免费观看免费全集| 战狼4免费999加拿大版| 吴费曼恭喜吴镇宇金像奖颗粒无收| 高清《烧酒战争》电影| 女军医免费完整版| 无尽的爱电视剧免费观看| 沈阳真爱现场| 強暴強姦敵國女士兵电影在线观看 | 侏罗纪公园4免费高清国语版| 电影浪漫女家教正版货| 斗罗大陆173集免费| 《牙医姐妹》1986版在线观看 | 你微笑时很美免费全集| 法国空姐第4| 咱们结婚吧26| 私密地带| 新来的私人瑜伽教练在线观看| 手术直播间在线看免费| 翠兰的爱情 电视剧| 战狼6欧式少女高清观看| 红蜘蛛全集| 信仰1—42集免费观看视频播放| 莫莉3特别酒店免费| 妈妈的职业免费观点看| 美国电影禁忌4| 名侦探柯南普通话版全集| 我为卿 狂百度影音| 墨白电视剧免费观看在线观看超清| 死之咏赞电视剧免费观看完整版| 美乃雀 在线观看播放| 暗线电视剧| 狂飙全集免费观看| 控制美女老板的遥控器| 肥猫正传| 怪盗女谍之天海翼免费播放下载 | 骄阳似我 电视剧 在线观看| 金刚归来1| 读百科全书的女人看在线完整| 疯狂女士| 寒武纪电视剧免费全集在线观看| 意大利《八尺夫人》电影全集免费观看| 若你安好便是晴天全集| 大秦赋在线观看免费完整版| 花芯在线观看| 李冰冰自曝分手| 忠贞苏菲玛索| 吉星高照第二季短剧| 歌曲连唱| 五凤朝阳刀评书| 大明风华在线观看免费| 河山 电视剧| 大奉打更人电视剧完整版免费| 麦乐迪melody与父亲在线观看| 暴力街头| 风暴国语| 通化县| 金瓶梅1集电影| 消失的她完整版| 功夫厨神国语高清在线观看完整版 | 潘多拉满天星| 斗罗大陆免费观看完整版高清在线| 新金银屏1—5美国普通话| 爱情有点蓝第二部| 旅行时给儿子做了一次| 19岁在线观看免费播放高清电视剧| 笑傲江湖之风云再起| 年经继拇2| 求个没封的W站2021在线看| 一家老小向前冲高清| 十七岁完整版在线观看西瓜| 还珠格格三| 新月格格电视剧全集播放免费观看| 出轨韩剧| 男按摩师做乳房按摩电影在线观看 | 侵犯高傲女教师电影白峰美羽| 大祠堂在线观看| 当着女朋友面睡她闺蜜| 星空影视论语《部长出差的日子》 | 日本电影 和讨厌的部长一起出差 最棒的爱人诏免费观看 | 迷雾电影在线观看免费完整版全集| 屠宰呕吐娃娃免费观看完整版视频| 神机妙算刘伯温全集| 菜肉馄饨全集观看| 坎贝奇在线观看免费版| 六姊妹在线观看全集电视剧| 爱我就别想太多在线观看| 强伦轩女教师赤坂丽| 斗罗大陆第二季全集免费观看完整版| 妈妈的朋友在线播放| 《薄冰》电视剧| ooozzzxxx| 行尸走肉 美剧| 奥巴马就职演说| 女超人满天星无删减麦乐迪版| 冲上云霄2大结局是什么| 女人最痛结局| 美国伦理生殖按摩在线| 极速救援电影| 电影我的错误免费观看完整版| 种马2完整版电影在线播放| 《部长出差的日子》观看| 贩母考案| 任宏恩哭坟| 电影粉红大白菜完整版| 性感女郎| 爱 死亡和机器人| 西游记后传优酷| 台剧浪漫女家教在线观看全集| 人民的名义42| 《破·地狱》国语版免费看| 老同学的味道HD中字| 四个少妇去按摩在线观看| 拯救大兵瑞恩电影免费观看完整| 记忆碎片 电影| 农民伯伯下乡3国语版吴健视频| 神奇动物:格林德沃之罪| 西出玉门电视剧免费观看完整版| 17se| 无颜之月在线观看一到五集电视剧 | 猛男受被CAO哭极限扩张SM| 半醒浮生电视剧免费观看| 暖暖日常在线观看免费| star-464| 闲话行尸第一季| 《overflow》第一季| 加藤鹰电影| 花谢花飞花满天免费观看完整版| 和讨厌的前男友一起出差电影 | 地下交通站第三部| 花姐的个人资料| 唐朝禁宫风月| 屠夫呕吐娃娃视频 | 母亲韩剧电影国语版| 都市仙医| 嗝嗝老师| 斯托娅电影| 狼行天下之钦差| 丰满的邻居2在线观看完整免费版| 渔夫在线观看免费| 三国粤语版| 隋唐英雄 全集| 两个母亲电影ID| 那片花那片海电视剧| 电视剧神隐在线观看| 女教师和黑人第一次| 游戏风云春晚| 马大帅第二部| 金银梅5一10普通话1| 廖凡山河无名免费播放| 离人心上电视剧| 神探福娃六岁半短剧免费观看全集| 如懿传3在线看全集免费观看高清 后宫| 花与蛇 零| 白天摸摸哒晚上摸摸哒是什么歌| 落魄贵族琉璃| 大运会运动员踏着蜀锦入场 | 觉醒2012| 韩国维修工人的艳遇| 陪读妈妈1-| 韩剧第九行动在线观看| 安吉拉怀特满天星女版| 星落凝成糖电视剧免费观看西瓜| 两女一指完整版| 日本电影《姐妹牙医》1986在线播放 | 别安dj| 周星驰:佩佩姐 江湖再见| 娃娃脸9| 云南虫谷| 五哈第五季免费观看最新一期| 念念不忘短剧| 未来日记 日剧| 斯诺克虎牙4| 消失的她免费完整观看| 游彩虚村| 一代名妓苏小小| 人民警察电视剧| 3d柔铺团之极宝乐鉴宝电影在线观看| 吞噬星空动漫免费| 贝乐虎儿歌免费播放全集| 法国空姐2009在线看整板 | 乐队的夏天第三季在线观看| 移动迷宫3 死亡解药| 2对1:三人一次性体检在线观看中文字| 你是我的眼| 大长今国语版| 《法国空乘10| 电影水母| 美脚迷路| 木下凛凛子免费观看平台| 阴斗9.1免费版西瓜| 戏说台湾全集| 三级《偷妻》| 黑暗荣耀第一季免费看| 漂亮儿媳妇结局| 麦乐迪满天星在线观看| 《周四推理俱乐部》| 田震最新歌曲| 销售的销售秘密1HD中字| 施公案全集| 春丽传奇| 特种兵之火凤凰天狼| 歼灭天际线在线观看入口| 凶宅处理专员在线全集观看| 学警狙击粤语高清| 三年成全观看免费完整观看| 莺长的女儿未删减版| 和漂亮的岳的那些事儿| 迷人的小婊子| 安娜贝尔2:诞生| 电视连续剧锅哥警察| 如懿传高清| 欧少女16集最后一集| 《山河月明》45集免费观看| 爱情电影网 佐山爱| 白峰美羽电影| 高清《第一次的辣妹》动漫| 最近日本电影高清免费观看| 插曲的痛30集全集免费播放电影爱情| 思凡mv| 无性别男孩热恋中| 善良的麦子| 陀枪师姐2| 镖客奶奶高清免费观看| 深入交流的动漫有哪些| 娇妻互换我的漂亮娇妻6| 都铎王朝完整版第一季| 韩剧《夫妻的世界》| 越南丰满BBWBBW| 暗杀教室真人版| 农场主的三个女儿| 亲爱的妈妈3韩国电影中文| 电影在线观看完整版高清免费观看| 《二对一的商务模式2》影视| 方糖映画| 幸福满院电视剧| 电视剧红灯记| 插曲的痛第60集全集免费播放做爱小视频| 杨门寡妇肉床电影完整版 | 女官升职记:宫女到女相全集免费| 死亡遗迹之谜| 高压监狱完整版在线观看完整免费高清原声满天星2023 | 完美女人满天星免费观看| 马成的喜悦| 甜蜜的鞭子| 私人家教1983版电影免费观看 | 启航当风起时| 女职工的特殊待遇5| 特殊的游泳课4在线观看| 《沉默的真相》江阳的职业| 第八感剧集电视剧| 正在播放: JUQ-150 五日无夫,命禁欲至初一夜。不想要的政治联姻,岳父的目标是 | qvod成人资源网| 激情从| 宁安如梦35集| 王牌部队在线观看| 《合租》2024菲律宾主演是谁| 电视剧生死相依全集| 《画皮》丁程鑫版| 迷失太空电影免费观看| 急冻奇侠完整版无删减| 甄嬛传40集| 你为我着迷百度影音| 法国空乘2016不难空乘观看| 功夫熊猫电视剧| 契约婚姻| 韩国电影美发店的特殊待遇| 画江湖之不良人7季免费观看全集| 周星驰国语高清| 艰难爱情| 韩剧结婚是疯狂的| 食功夫之美食大冒险| 巳怎么读| 侄女的开发日记动漫第12集在线观看 | 神印王座在线看| 星克莱尔第一夫人免费播放| 魔法动漫| 海绵宝宝第十一季| 翻译官小姐短剧免费观看 | 我俩太不公平是什么歌| 韩国伦理片爱人| 睫毛膏3| 金锁记电影| 肥胖女人免费观看连续剧| 虎虎的老婆| 黑白配2018| 狙击枪怎么折| 撒玛利亚电影完整版在线观看| 流浪地球资源| 蓝色帽子隐形的韩国电影在线观看 | 吴梦梦和黑人70分钟在线观看| 穷途鼠的奶酪梦| 乔家的儿女36集免费播放| xl司令动漫第一季无马赛免费观看高清在线看 | 摸金校尉之九幽将军电影免费播放| 黑白配国语版超清1080p高清| 谭咏麟94演唱会曲目| 想爱就爱在线视频| 高清《灌篮高手》大电影| 《高血压监狱》免费观看| 法制频道现场直播| 最近我的妹妹有点怪电影| 汪汪队立大功第2季| 义姐是不是良喂养1~2| 年轻的妺妺3按摩| 黑白大搏斗燕赵刑警| 盛唐风流电影免费观看完整版国语| 僵尸新娘国语版免费完整版| 无赖勇者的鬼畜美学| 贝尔法斯特天堂路电视剧| 安吉拉怀特满天星观看| 猪猪侠保卫战| 圣斗士混沌篇| 茌平县| 图书馆的女朋友第二季在线观看完整免费版电视剧第五集 | 《overflower》第一季动漫 | 雪狼谷百度影音| 《偿还2》免费观看完整版| 《战·争》| 愤怒的黄牛韩剧电影| 有鬼住隔壁国语| 小蜜挑5| 幻女13集全免费观看| 韩版《甄嬛传》| 赵琦君成功求婚杨凯雯| 房奴试爱电影片尾曲| 纳粹女魔残酷实验2免费观看| 阿宾游记| 瓜达卢佩玫瑰完整版| 女篮坎贝奇无憾 在线观看| 变身电影| 浴血黑帮:不朽传奇全集观看| 高压监狱在线观看完整免费高清原声高烧可以吃雪糕吗 | 少年 电影| shoeplay| 《德国空乘4》| 不良义姐是| 老包青天83版免费全集| 八九不离十| 欢迎光临全集免费观看| 男按摩师做乳房电影| 太平洋战争纪录片| 沧元图免费全集在线观看| 食物链电影在线| 《妽妽的丰满大胸》hd| 《疾速追杀:芭蕾杀姬》| 小偷家族电影观看完整版| 妈妈听我说| 激情瑜伽| 鸣鸟不飞:乌云密布电影| 欢乐颂38| 村里来了个洋媳妇免费观看全集| 需要爸爸播种子电影| 小凤新婚下集免费观看视频播放| 高清《调教女仆》电影| 《寒武纪》| 新员工2中字ID| 初体验5电影免费观看完整版| 骨肉相连麦片儿捞| 凡尘称尊:仙帝弃少全集免费| 一家老小向前冲 电影| 观看徐锦江《陆判官》| 韩国电影办公室3免费完整版播放 封神榜免费观看全集完整版 | 再战江湖国语高清| 情深深雾蒙蒙| 了了晴山见纷纷宿雾空什么意思| 《放课后》动漫全集| 变脸印度电影| 庆余年第二季免费观看西瓜| 暖暖国语高清免费观看完整| LX司令| 僵尸王日记| 药王神篇| 曾志伟电影全集国语| 美式1984美式保罗1| 社长夫人美貌在线观看| 58天完整版免费观看| 电影殊死搏斗免费观看高清| 安家一共多少集| 男和女一起愁愁愁电视剧在线观看 | 《择天记》电视剧| 杨敏思版1-5电视大结局在线观| 请和我老公结婚 日剧| 跟着书本去旅行纪录片观看完整版 | 王李丹妮《维修工》| 《替夫还债》的日本电影中文 | 长相思古装剧免费观看49集| 荷兰空姐2019年上映的日本空姐是谁 |