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 或 | void | USART_DMACmd() SDIO_DMACmd() |
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的STM32——库函数开发小结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 专家系统是一种智能计算机软件系统,人工智
- 下一篇: Tomcat日志分割