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() |