新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM8L探索套件學(xué)習(xí)筆記-GPIO端口操作(一)

STM8L探索套件學(xué)習(xí)筆記-GPIO端口操作(一)

作者: 時(shí)間:2016-11-24 來(lái)源:網(wǎng)絡(luò) 收藏
STM8與STM32一樣提供了固件庫(kù)函數(shù),方便用戶快速開發(fā),不需要花費(fèi)很多時(shí)間去查寄存器。不過(guò)沒有STM32的庫(kù)完善,給的說(shuō)明文檔是chm格式的,名字是stm8l15x_stdperiph_lib_um.chm,這個(gè)官網(wǎng)有下載,今天按照官方給的模板自己做個(gè)模板文件夾,方便后期的移植,這樣就不要再重復(fù)設(shè)置了。首先我們看看GPIO模塊,在用固件庫(kù)之前先了解下GPIO里面的大體的寄存器,方便后期使用固件庫(kù)。缺點(diǎn)是你所以輸入的參數(shù)都會(huì)檢測(cè)是否符合規(guī)范,必須得按照庫(kù)函數(shù)里面定義的參數(shù)寫。
GPIO寄存器有:輸出寄存器(ODR),輸入寄存器(IDR),方向寄存器(DDR),控制寄存器1(CR1)和控制寄存器2(CR2).后面三個(gè)寄存器組和可以配置為8種GPIO的模式,如下圖:


而固件庫(kù)函數(shù)給出了8中模式,在上面的基礎(chǔ)上加入了輸出高/輸出低電平的狀態(tài)。

GPIO_Mode_In_FL_No_IT浮空輸入無(wú)中斷Input floating, no external interrupt
GPIO_Mode_In_PU_No_I上拉輸入無(wú)中斷Input pull-up, no external interrupt
GPIO_Mode_In_FL_IT浮空輸入有中斷Input floating, external interrupt
GPIO_Mode_In_PU_IT上拉輸入有中斷Input pull-up, external interrupt
GPIO_Mode_Out_OD_Low_Fast
開漏-輸出低-高速
Output open-drain, low level, 10MHz
GPIO_Mode_Out_PP_Low_Fast
推挽-輸出低-高速
Output push-pull, low level, 10MHz
GPIO_Mode_Out_OD_Low_Slow
開漏-輸出低-低速
Output open-drain, low level, 2MHz
GPIO_Mode_Out_PP_Low_Slow
推挽-輸出低-低速
Output push-pull, low level, 2MHz
GPIO_Mode_Out_OD_HiZ_Fast
開漏-輸出高阻-高速
Output open-drain, high-impedance level, 10MHz
GPIO_Mode_Out_PP_High_Fast
推挽-輸出高-高速
Output push-pull, high level, 10MHz
GPIO_Mode_Out_OD_HiZ_Slow
開漏-輸出高阻-低速
Output open-drain, high-impedance level, 2MHz
GPIO_Mode_Out_PP_High_Slow
推挽-輸出高-低速
Output push-pull, high level, 2MHz
其他的一些函數(shù)可以參考固件庫(kù):

下面是GPIO操作的應(yīng)用,GPIO寫操作---板上的兩個(gè)LED燈閃爍的代碼
void main(void)
{
/* Infinite loop */
GPIO_Init(LED1_PORT, LED1_PIN, GPIO_Mode_Out_PP_Low_Fast);
GPIO_Init(LED2_PORT, LED2_PIN, GPIO_Mode_Out_PP_Low_Fast);
while (1)
{
GPIO_ToggleBits(LED1_PORT, LED1_PIN);
Delay(0xFFFF);
GPIO_ToggleBits(LED2_PORT, LED2_PIN);
Delay(0xFFFF);

}
}
GPIO讀操作---查詢按鍵點(diǎn)亮LED
void main(void)
{
/* Infinite loop */
GPIO_Init(LED1_PORT,LED1_PIN,GPIO_Mode_Out_PP_Low_Fast);
//輸出低電平-高速10M
GPIO_Init(KEY_PORT,KEY_PIN,GPIO_Mode_In_FL_No_IT);
//輸入浮空-無(wú)中斷
while (1)
{
if(GPIO_ReadInputDataBit(KEY_PORT,KEY_PIN))
GPIO_WriteBit(LED1_PORT,LED1_PIN,RESET);
else
GPIO_WriteBit(LED1_PORT,LED1_PIN,SET);
}
}


評(píng)論


技術(shù)專區(qū)

關(guān)閉