天天看點

STM32——庫函數開發小結

STM32——庫函數開發小結

宗旨:技術的學習是有限的,分享的精神是無限的。

基本上所有外設都有以下幾類寄存器:【CR/DR/SR】

(1)控制寄存器 xxx_CR(Control/Configuration Register):這類寄存器是用來配置、控制 相應 外 設 的 工 作 方 式 的 。 如 GPIOx_CRL、GPIOx_CRH, AFIO_EXTICR1~AFIO_EXTICR4,序列槽的 USART_CR1~USART_CR3等。

(2)資料寄存器 xxx_DR(Data Register):這類寄存器主要是存儲了外設進行輸出輸入的資料。如 GPIOx_IDR、GPIOx_ODR、USART_DR 等。

(3)狀态寄存器 xxx_SR(Status Register):這類寄存器主要存儲了目前外設的運作狀态,主要為一些标志位。如 USART_SR、ADC_SR等。

一、初始化

GPIO_InitTypeDef型的 GPIO_InitStructure 用來配置 GPIO;

NVIC_InitTypeDef型的 NVIC_InitStructure 用來配置 NVIC;

EXTI_InitTypeDef型的 EXTI_InitStructure 用來配置 EXTI;

USART_InitTypeDef型的 USART_InitStructure 用來配置 USART。

初始化結構體的控制參數,一般就是與相應外設的控制寄存器 xxx_CR 對應的。

使用ST庫對外設進行初始化,一般有以下步驟:

(1)定義一個xxx_InitTypeDef類型的初始化結構體。

(2)根據使用需求,向這些初始化結構體的成員寫入特定的控制參數。

(3)填充好結構體之後,把這個結構體作為輸入參數調用相應的外設庫函數xxx_Init(),進而實作向寄存器寫入控制參數,并配置好外設。

       如ADC_InitTypeDef, ADC_Init() , I2C_InitTypeDef ,I2C_Init() 等。它們的應用方法都是相同的,差別在于不同的外設其結構體成員不一樣,可輸入參數相應也不同。

二、資料的輸入輸出

       對外設的使用,一般涉及其輸入和輸出資料。如GPIO 的 輸入輸出 函 數: GPIO_ReadOutputDataBit()、GPIO_ReadInputData()、GPIO_SetBits();還有USART 的收發資料函數:USART_ReceiveData()、USART_SendData(),這類函數都是用于控制輸入輸出資料的。這些函數控制相應外設資料寄存器 DR 的内容,達到控制輸入輸出的目的。

(1)通過輸入參數,向函數指定要使用的是什麼外設,如用(GPIOA,GPIO_Pin_5)標明PA5進行控制,用(USART1)來指定使用序列槽1外設。

(2)若向外輸出資料,則調用Output或 Send函數,把将要輸出的資料變量作為函數的輸入參數。

(3)若為接收外部資料,則調用Read或Receive函數,讀取函數的傳回值來得到外部輸入資料。對于其他外設,也有類似的控制資料輸入輸出函數。如用ADC_GetConversionValue()函數來擷取ADC轉換所得到的數值;用I2C_SendData()函數來使用I 2 C接口進行發送資料。

三、狀态位、标志位

         xxx_GetFlagStatus() 或 xxx_GetITStatus(),功能分别為擷取事件标志位狀态和中斷标志位狀态。xxx_ClearFlag() 或 xxx_ClearITPendingBit() 函數,功能分别為清除事件标志位和清除挂起的中斷标志位。這四類函數都是對應到外設的 xxx_SR 寄存器的。

四、外設函數分類

函數名 功能 輸入參數 傳回值 具體函數舉例
XXX_Init() 對外設進行初始化 XXX_InitTypeDef初始化類型結構體 void

GPIO_Init()

USART_Init()

XXX_DeInit 以系統預設的形式對外設進行初始化 将要進行預設初始化的外設名 void

USART_DeInit()

I2C_DeInit()

XXX_StructInit() 以預設資料填充初化結構體 将要進行預設填的xXX_InitTypeDef初始化類型結構體 void GPIO_StructInit()
XXX_SendData() 使用外設發送資料 XXX(相應的外設名);将要發送的資料 void

USART_SendData()

I2C_SendData()

XXX_ReceiveData() 擷取外接收到的資料 XXX(相應的外設名) 傳回接收到的資料

USART_ReceiveData()

I2C_ReceiveData()

XXX_GetFlagStatus() 檢查外設事件标志位 要檢查的事件标志名 傳回标志位狀态(SET或ESET)

USART_GetFlagStatus()

SDIO_GetFlagStatus()

XXX_GetITStatus() 檢查中斷标志

要檢查的中斷标志名(大部分跟事

件标志相同)

傳回标志位狀态 (SET或RESET)

USART_GetITStatus()

I2C_GetITStatus()

XXX_ClearFlag() 清除事件标志位 要清除的事件标志名 void USART_ClearFlag() RTC_ClearFlag()
XXX_ClearITPendingBit() 清除挂起的中斷标志位 要檢查的中斷标志名(大部分跟事件标志相同) void

USART_ClearITPendingBit()

RTC_ClearITPendingBit()

XXX_ITConfig() 設定外設的中斷 XXX(相應外設的名字);選擇要開啟外設的某種中斷(如接收中斷,發送完成中斷);ENABLE 或DISABLE 中斷 void

USART_ITConfig()

ADC_ITConfig()

XXX_Cmd() 使能或關閉外設 要 配 置 的 外 設名;ENABLE 或DISABLE void

USART_Cmd()

TIM_Cmd()

XXX_DMACmd()要 配置外是否可 使用DMA 請求

配置的外設名;選擇要配置DMA 請求 (DMA 接收請求,DMA 發 送 請求);ENABLE 或

DISABLE

void

USART_DMACmd()

SDIO_DMACmd()