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