一、概述:
1、發(fā)光二極管簡介
發(fā)光二極管是半導體二極管的一種,可以把電能轉化為光能,常簡寫為LED。常用的是發(fā)紅光、綠光或黃光的二極管。發(fā)光二極管的反向擊穿電壓約為5V。它的正向伏安特性曲線很陡,使用時必須串聯(lián)限流電阻以控制通過管子的電流。限流電阻R可用下式計算:
R = (E - UF)/IF
式中E為電源電壓,UF為LED的正向壓降,IF為LED的一般工作電流。LED廣泛應用于各種電子電路、家電、儀表等設備中,做電源或電平指示。
2、STM32 GPIO簡介
STM32F4每組通用I/O 端口包括4 個32 位配置寄存器(MODER、OTYPER、OSPEEDR 和PUPDR)、2 個32 位數(shù)據(jù)寄存器(IDR 和ODR)、1 個32 位置位/復位寄存器(BSRR)、1 個32 位鎖定寄存器(LCKR) 和2 個32 位復用功能選擇寄存器(AFRH 和AFRL)等。
GPIO可以配置成以下8種工作模式:
浮空輸入:此端口在默認情況下什么都不接,呈高阻態(tài),這種設置在數(shù)據(jù)傳輸時用的比較多。 上拉輸入:上拉輸入模式與浮空輸入模式相比,僅僅是在數(shù)據(jù)通道上部,接入了一個上拉電阻,這個上拉電阻的阻值介于30K~50K歐姆,CPU可以隨時在輸入數(shù)據(jù)寄存器的另一端,讀出I/O端口的電平狀態(tài)。這種模式的好處在于我們什么都不輸入時,由于內(nèi)部上拉電阻的原因,處理器會覺得我們輸入了高電平,這就避免了不確定的輸入。該端口在默認情況下輸入為高電平。 模擬功能:STM32的模擬輸入通道的配置很簡單,信號從I/O端口直接進入ADC模塊。此時,所有的上拉、下拉電阻和施密特觸發(fā)器,均處于斷開狀態(tài),因此輸入數(shù)據(jù)寄存器將不能反映端口上的電平狀態(tài),也就是說,模擬輸入配置下,信號不經(jīng)過輸入數(shù)據(jù)寄存器,CPU不能在輸入數(shù)據(jù)寄存器上讀到有效的數(shù)據(jù)。該輸入模式,使我們可以獲得外部的模擬信號 開漏輸出:開漏輸出不可以直接輸出高電平,開漏輸出的輸出端相當于三極管的集電極,要得到高電平狀態(tài)需要上拉電阻才行。 開漏復用輸出:GPIO的基本功能是普通的I/O,而STM32有自己的各個功能模塊,這些內(nèi)置外設的引腳是與標準GPIO復用的,當作為這些模塊的功能引腳時就叫復用。開漏復用輸出功能模式與開漏輸出模式相比,不同的是輸出控制電路的輸入,是和片上外設的輸出信號相連即與復用功能的輸出端相連,此時,輸出數(shù)據(jù)寄存器在輸出通道被斷開。 推挽復用輸出:推挽復用輸出功能模式與推挽輸出模式相比,不同的是輸出控制電路的輸入,是和片上外設的輸出信號相連,即與復用功能的輸出端相連,而輸出數(shù)據(jù)寄存器在輸出通道被斷開。
二、硬件電路:
在iCore3雙核心開發(fā)板中,采用一個獨立的紅綠藍三色LED與STM32F407相連,限流電阻為1K。其中,紅色LED與PI5引腳相連,綠色LED與PI6引腳相連,藍色LED與PI7引腳相連。
三、實驗原理:
本實驗通過STM32的三個GPIO口驅動三色LED的三個通道,將GPIO設置為推挽輸出模式,采用灌電流的方式與LED連接,GPIO輸出高電平LED熄滅,GPIO輸出低電平LED點亮,通過控制GPIO輸出的電平高低從而控制LED的亮滅。
四、源代碼:
1、主函數(shù)
/*
* Name : main
* Description : ---
* Author : ysloveivy.
*
* History
* --------------------
* Rev : 0.00
* Date : 11/21/2015
*
* create.
* --------------------
*/
int main(void)
{
int i;
led.initialize();
//三色LED交替閃爍
while(1){
LED_RED_ON;
LED_GREEN_OFF;
LED_BLUE_OFF;
for(i = 0;i < 10000000;i++);
LED_RED_OFF;
LED_GREEN_ON;
LED_BLUE_OFF;
for(i = 0;i < 10000000;i++);
LED_RED_OFF;
LED_GREEN_OFF;
LED_BLUE_ON;
for(i = 0;i < 10000000;i++);
}
}
2、GPIO初始化
* Name : initialize
* Description : ---
* Author : ysloveivy.
*
* History
* --------------------
* Rev : 0.00
* Date : 11/21/2015
*
* create.
* --------------------
*/
static int initialize(void)
{
GPIO_InitTypeDef GPIO_uInitStructure;
//LED IO初始化
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOI,ENABLE);
GPIO_uInitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; //初始化連接三色LED燈的IO端口
GPIO_uInitStructure.GPIO_Mode = GPIO_Mode_OUT; //設置端口為輸出模式
GPIO_uInitStructure.GPIO_OType = GPIO_OType_PP; //設置輸出類型為推挽輸出模式
GPIO_uInitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉輸出
GPIO_uInitStructure.GPIO_Speed = GPIO_Speed_100MHz; //設置速度等級
GPIO_Init(GPIOI,&GPIO_uInitStructure);
//PI5、PI6、PI7、接三色LED燈,置高電平,燈熄滅
GPIO_SetBits(GPIOI,GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);
return 0;
}
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef*GPIO_InitStruct)
這個函數(shù)兩個參數(shù),第一個參數(shù)是用來指定需要初始化的GPIO對應的GPIO組,取值范圍為GPIOA~GPIOK。第二個參數(shù)為初始化參數(shù)結構體指針,結構體類型為GPIO_InitTypeDef。
結構體定義為
typedef struct{
uint32_t GPIO_Pin; //設置IO端口
GPIOMode_TypeDef GPIO_Mode; //設置端口工作模式
GPIOSpeed_TypeDef GPIO_Speed; //設置端口的速度等級
GPIOOType_TypeDef GPIO_OType; //設置端口的類型
GPIOPuPd_TypeDef GPIO_PuPd; //設置上下拉
}GPIO_InitTypeDef;
五、實驗現(xiàn)象:
-
led
+關注
關注
242文章
23614瀏覽量
669118 -
STM32
+關注
關注
2283文章
10986瀏覽量
361318 -
GPIO
+關注
關注
16文章
1238瀏覽量
53311
原文標題:STM32學習1:GPIO輸出實驗——點亮三色LED
文章出處:【微信號:changxuemcu,微信公眾號:暢學單片機】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
三色發(fā)光二極管原理圖 led三色調(diào)光的概念

【LeMaker Guitar試用體驗】7.GPIO方式操作板載三色LED
自己制作的三色LED仿真模型
【零基礎學習STM32】第一講:GPIO輸出實驗——點亮三色LED
【Station M2 娛樂·極客主機試用體驗】用Station M2主機做開發(fā),點個三色LED跑馬燈玩玩
三色RGB LED模塊學習筆記
用Stduino可以對三色LED模塊進行控制
三色LED顯示屏的設計與實現(xiàn)

STM32 GPIO輸出實驗——點亮三色LED資料下載

使用樹莓派GPIO口點亮雙色LED燈

評論