**1.1 **寄存器
寄存器開發(fā)優(yōu)點
直接操作寄存器,運行效率高。
寄存器開發(fā)缺點
1、開發(fā)難度大,開發(fā)周期長
2、代碼可閱讀性差,可移植差
3、后期維護難度高
1.2****庫函數
庫函數開發(fā)優(yōu)點
1、開發(fā)難度較小,開發(fā)周期短
2、代碼可閱讀性強,可移植高
3、后期維護難度低
庫函數開發(fā)缺點
相對于寄存器開發(fā),運行效率略低
注意:庫函數其實是ST公司對寄存器的進一步封裝。
一、 庫函數開發(fā)LED
庫函數開發(fā)LED要添加的庫函數文件:stm32f4xx_gpio.c
1、理解led燈原理圖
LED0連接在PF9
PF9輸出低電平(0),燈亮;PF9輸出高電平(0),燈滅;
2、打開GPIOF組時鐘
在STM32芯片中,所有的外設時鐘是不打開,為了降低功耗
//打開GPIOF組時鐘
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
3、設置PF9燈為輸出模式 輸出推挽 上拉 速度(50MHZ)
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9; //引腳
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; //輸出模式
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; //輸出推挽
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHZ
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOF, &GPIO_InitStruct);
4、通過下面控制LED燈亮與滅
GPIO_SetBits() 引腳置1
GPIO_ResetBits() 引腳置0
官方參考案例
路徑:D:GZFX2103STM32STM32上課資料STM32F4xx固件庫stm32f4_dsp_stdperiph_libSTM32F4xx_DSP_StdPeriph_Lib_V1.4.0stm32f4xx_dsp_stdperiph_lib_um.chm官方參考案例
三、 按鍵庫函數開發(fā)
庫函數開發(fā)按鍵要添加的庫函數文件:stm32f4xx_gpio.c
1、理解按鍵控制原理
KEY0連接在PA0
按鍵未按下,PA0為高電平
按鍵 按下,PA0為低電平
2、打開GPIOA組時鐘
//打開GPIOA組時鐘
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
3、設置引腳為輸入,上拉。
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; //引腳0
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; //輸入模式
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOA, &GPIO_InitStruct);
4、通過下面函數獲取引腳電平
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
一、 中斷
中斷概念
中斷是指計算機運行過程中,出現某些意外情況需主機干預時,機器能自動停止正在運行的程序并轉入處理新情況的程序,處理完畢后又返回原被暫停的程序繼續(xù)運行(面試題)。
STM32外部中部需要注重知識點EXTI與 NVIC ,STM32所有引腳均可以做為外部中斷。
4.1、外部中斷 / **事件控制器 ** (EXTI)
EXTI 控制器的主要特性如下:
● 每個中斷/事件線上都具有獨立的觸發(fā)和屏蔽
● 每個中斷線都具有專用的狀態(tài)位
● 支持多達 23 個軟件事件/中斷請求
● 檢測脈沖寬度低于 APB2 時鐘寬度的外部信號。有關此參數的詳細信息,請參見
STM32F4xx 數據手冊的電氣特性部分。
引腳中斷線
上升沿:數字電路中,數字電平從低電平(數字“0”)變?yōu)楦唠娖剑〝底帧?”)的那一瞬間(時刻)叫作上升沿。
下降沿:數字電路中,數字電平從高電平(數字“1”)變?yōu)榈碗娖剑〝底帧?”)的那一瞬間叫作下降沿。
4.2 NVIC
嵌套向量中斷控制器 (NVIC)
**NVIC **特性
嵌套向量中斷控制器 NVIC 包含以下特性:
● STM32F405xx/07xx 和 STM32F415xx/17xx 具有 82 個可屏蔽中斷通道, STM32F42xxx
和 STM32F43xxx 具有多達 86 個可屏蔽中斷通道(不包括 Cortex?-M4F 的 16 根中
斷線)
● 16 個可編程優(yōu)先級(使用了 4 位中斷優(yōu)先級)
● 低延遲異常和中斷處理
● 電源管理控制
● 系統控制寄存器的實現
嵌套向量中斷控制器 (NVIC) 和處理器內核接口緊密配合,可以實現低延遲的中斷處理和晚
到中斷的高效處理。
NVIC優(yōu)先級分為搶占優(yōu)先級與響應優(yōu)先級。
數字越小,優(yōu)先級別越高
優(yōu)先級分組
搶占優(yōu)先級 & 響應優(yōu)先級區(qū)別: 搶占優(yōu)先級 > 響應優(yōu)先級
高優(yōu)先級的搶占優(yōu)先級是可以打斷正在進行的低搶占優(yōu)先級中斷的。
搶占優(yōu)先級相同的中斷,高響應優(yōu)先級不可以打斷低響應優(yōu)先級的中斷。
搶占優(yōu)先級相同的中斷,當兩個中斷同時發(fā)生的情況下,哪個響應優(yōu)先級高,哪個先執(zhí)行。
如果兩個中斷的搶占優(yōu)先級和響應優(yōu)先級都是一樣的話,則看哪個中斷先發(fā)生就先執(zhí)行;
例:
假定設置中斷優(yōu)先級組為2,然后設置中斷3(RTC中斷)的搶占優(yōu)先級為2,響應優(yōu)先級為1。中斷6(外部中斷0)的搶占優(yōu)先級為3,響應優(yōu)先級為0。中斷7(外部中斷1)的搶占優(yōu)先級為2,響應優(yōu)先級為0。
中斷7>中斷3>中斷6。
4.3****外部中斷配置流程
外部中斷配置流程要添加的庫函數:stm32f4xx_exti.c和stm32f4xx_syscfg.c
參考庫函數案例
1、理解按鍵原理
KEY0 連接PA0,選擇下降沿觸發(fā)
1、設置NVIC分組
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
3、使能SYSCFG及GPIOA****時鐘:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
4、 初始化IO口為輸入。
GPIO_Init();
5、設置IO口與中斷線的映射關系。
void SYSCFG_EXTILineConfig();
6、初始化線上中斷,設置觸發(fā)條件等。
EXTI_Init();
7、配置中斷分組(NVIC),并使能中斷。
NVIC_Init();
8、 編寫中斷服務函數。
EXTIx_IRQHandler();
9、清除中斷標志位
EXTI_ClearITPendingBit();
五、函數說明
void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState)
函數功能:使能AHB1外設時鐘
返回值:無
uint32_t RCC_AHB1Periph:哪個外設
FunctionalState NewState:ENABLE or DISABLE
void GPIO_Init(GPIO_TypeDef GPIOx, GPIO_InitTypeDef GPIO_InitStruct)**
函數功能:GPIO初始化
返回值:無
GPIO_TypeDef* GPIOx:哪個GPIO組
GPIO_InitTypeDef* GPIO_InitStruct:GPIO結構
typedef struct
{
uint32_t GPIO_Pin; //哪個引腳
GPIOMode_TypeDef GPIO_Mode; //模式
GPIOSpeed_TypeDef GPIO_Speed; //速度
GPIOOType_TypeDef GPIO_OType; //輸出類型
GPIOPuPd_TypeDef GPIO_PuPd; //上下拉
}GPIO_InitTypeDef;
void GPIO_SetBits(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin) *
函數說明:引腳置位
函數返回值:無
GPIO_TypeDef* GPIOx:哪個組IO
uint16_t GPIO_Pin:哪個引腳
void GPIO_ResetBits(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin) *
函數說明:引腳復位
函數返回值:無
GPIO_TypeDef* GPIOx:哪個組IO
uint16_t GPIO_Pin:哪個引腳
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin) * ;
函數說明:讀某個引腳輸入狀態(tài)
函數返回值:
Bit_RESET = 0 (低電平)
Bit_SET = 1 (高電平)
GPIO_TypeDef* GPIOx:哪個組IO
uint16_t GPIO_Pin:哪個引腳
void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex)
函數說明:設置IO口與中斷線的映射
函數返回值:無
uint8_t EXTI_PortSourceGPIOx:哪個組IO
uint8_t EXTI_PinSourcex:哪個引腳
void EXTI_Init(EXTI_InitTypeDef EXTI_InitStruct) *
函數說明:外部中斷控制器初始化
返回值:無
typedef struct
{
uint32_t EXTI_Line; //中斷線
EXTIMode_TypeDef EXTI_Mode; //模式
EXTITrigger_TypeDef EXTI_Trigger; //觸發(fā)條件
FunctionalState EXTI_LineCmd; //中斷線命令
}EXTI_InitTypeDef;
void NVIC_Init(NVIC_InitTypeDef NVIC_InitStruct) *
函數說明:NVIC初始化
返回值:無
NVIC_InitTypeDef* NVIC_InitStruct:NVIC結構體
typedef struct
{
uint8_t NVIC_IRQChannel; //中斷通道,可在stm32f4xx.h文件當中查找
uint8_t NVIC_IRQChannelPreemptionPriority; //搶占優(yōu)先級
uint8_t NVIC_IRQChannelSubPriority; //響應優(yōu)先級
FunctionalState NVIC_IRQChannelCmd; //中斷通道使能
} NVIC_InitTypeDef;
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
函數說明:判斷中斷線標志位
返回值:SET或RESET
uint32_t EXTI_Line:哪個中斷線
void EXTI_ClearITPendingBit(uint32_t EXTI_Line);
函數說明:清空中斷線標志位
返回值:無
uint32_t EXTI_Line:哪個中斷線
六、應用產品
1、LED
家用LED
指示燈
按鍵
-
led燈
+關注
關注
22文章
1592瀏覽量
107996 -
寄存器
+關注
關注
31文章
5343瀏覽量
120348 -
STM32
+關注
關注
2270文章
10900瀏覽量
355981 -
GPIO
+關注
關注
16文章
1204瀏覽量
52091 -
STM32F4
+關注
關注
3文章
194瀏覽量
28056
發(fā)布評論請先 登錄
相關推薦
評論