找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 7134|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

[零基礎(chǔ)學(xué)習(xí)STM32]第一講:GPIO輸出實(shí)驗(yàn)—點(diǎn)亮三色LED

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
一、概述:
1、發(fā)光二極管簡(jiǎn)介
     發(fā)光二極管是半導(dǎo)體二極管的一種,可以把電能轉(zhuǎn)化為光能,常簡(jiǎn)寫為LED。常用的是發(fā)紅光、綠光或黃光的二極管。發(fā)光二極管的反向擊穿電壓約為5V。它的正向伏安特性曲線很陡,使用時(shí)必須串聯(lián)限流電阻以控制通過管子的電流。限流電阻R可用下式計(jì)算:
                                                                                       R = (E - UF)/IF
式中E為電源電壓,UF為LED的正向壓降,IF為LED的一般工作電流。LED廣泛應(yīng)用于各種電子電路、家電、儀表等設(shè)備中,做電源或電平指示。

2、STM32 GPIO簡(jiǎn)介
     STM32F4每組通用I/O 端口包括4 個(gè)32 位配置寄存器(MODER、OTYPER、OSPEEDR 和PUPDR)、2 個(gè)32 位數(shù)據(jù)寄存器(IDR 和ODR)、1 個(gè)32 位置位/復(fù)位寄存器(BSRR)、1 個(gè)32 位鎖定寄存器(LCKR) 和2 個(gè)32 位復(fù)用功能選擇寄存器(AFRH 和AFRL)等。
GPIO可以配置成以下8種工作模式:
  • 浮空輸入:此端口在默認(rèn)情況下什么都不接,呈高阻態(tài),這種設(shè)置在數(shù)據(jù)傳輸時(shí)用的比較多。
  • 上拉輸入:上拉輸入模式與浮空輸入模式相比,僅僅是在數(shù)據(jù)通道上部,接入了一個(gè)上拉電阻,這個(gè)上拉電阻的阻值介于30K~50K歐姆,CPU可以隨時(shí)在輸入數(shù)據(jù)寄存器的另一端,讀出I/O端口的電平狀態(tài)。這種模式的好處在于我們什么都不輸入時(shí),由于內(nèi)部上拉電阻的原因,處理器會(huì)覺得我們輸入了高電平,這就避免了不確定的輸入。該端口在默認(rèn)情況下輸入為高電平。
  • 下拉輸入:下拉輸入模式與浮空輸入模式相比,僅僅是在數(shù)據(jù)通道上部,接入了一個(gè)下拉電阻。與上拉輸入模式類似,這種模式的好處在于外部沒有輸入時(shí),由于內(nèi)部下拉電阻的原因,我們的處理器會(huì)覺得我們輸入了低電平。
  • 模擬功能:STM32的模擬輸入通道的配置很簡(jiǎn)單,信號(hào)從I/O端口直接進(jìn)入ADC模塊。此時(shí),所有的上拉、下拉電阻和施密特觸發(fā)器,均處于斷開狀態(tài),因此輸入數(shù)據(jù)寄存器將不能反映端口上的電平狀態(tài),也就是說,模擬輸入配置下,信號(hào)不經(jīng)過輸入數(shù)據(jù)寄存器,CPU不能在輸入數(shù)據(jù)寄存器上讀到有效的數(shù)據(jù)。該輸入模式,使我們可以獲得外部的模擬信號(hào)。
  • 開漏輸出:開漏輸出不可以直接輸出高電平,開漏輸出的輸出端相當(dāng)于三極管的集電極,要得到高電平狀態(tài)需要上拉電阻才行。
  • 推挽輸出:推挽輸出可以輸出高、低電平,連接數(shù)字器件;推挽結(jié)構(gòu)一般是指兩個(gè)三極管分別受兩個(gè)互補(bǔ)信號(hào)的控制,總是在一個(gè)三極管導(dǎo)通的時(shí)候另一個(gè)截止。高低電平由IC的電源決定。
  • 開漏復(fù)用輸出:GPIO的基本功能是普通的I/O,而STM32有自己的各個(gè)功能模塊,這些內(nèi)置外設(shè)的外部引腳是與標(biāo)準(zhǔn)GPIO復(fù)用的,當(dāng)作為這些模塊的功能引腳時(shí)就叫復(fù)用。開漏復(fù)用輸出功能模式與開漏輸出模式相比,不同的是輸出控制電路的輸入,是和片上外設(shè)的輸出信號(hào)相連即與復(fù)用功能的輸出端相連,此時(shí),輸出數(shù)據(jù)寄存器在輸出通道被斷開。
  • 推挽復(fù)用輸出:推挽復(fù)用輸出功能模式與推挽輸出模式相比,不同的是輸出控制電路的輸入,是和片上外設(shè)的輸出信號(hào)相連,即與復(fù)用功能的輸出端相連,而輸出數(shù)據(jù)寄存器在輸出通道被斷開。

二、硬件電路:

      在icore3雙核心開發(fā)板中(如圖1-0,圖1-1所示),采用一個(gè)獨(dú)立的紅綠藍(lán)三色LEDSTM32F407相連,限流電阻為1K。其中,紅色LEDPI5引腳相連,綠色LEDPI6引腳相連,藍(lán)色LEDPI7引腳相連。

三、實(shí)驗(yàn)原理:

  本實(shí)驗(yàn)通過STM32的三個(gè)GPIO口驅(qū)動(dòng)三色LED的三個(gè)通道,將GPIO設(shè)置為推挽輸出模式,采用灌電流的方式與LED連接(如圖1-2所示),GPIO輸出高電平LED熄滅,GPIO輸出低電平LED點(diǎn)亮,通過控制GPIO輸出的電平高低從而控制LED的亮滅。

四、源代碼:
1、主函數(shù)
  1. /*
  2. * Name                : main
  3. * Description         : ---
  4. * Author              : ysloveivy.
  5. *
  6. * History
  7. * --------------------
  8. * Rev                 : 0.00
  9. * Date                : 11/21/2015
  10. *
  11. * create.
  12. * --------------------
  13. */
  14. int main(void)
  15. {
  16.         int i;

  17.         led.initialize();
  18.         
  19.         //三色LED交替點(diǎn)亮
  20.         while(1){
  21.                 LED_RED_ON;
  22.                 LED_GREEN_OFF;
  23.                 LED_BLUE_OFF;
  24.                 for(i = 0;i < 10000000;i++);
  25.                 LED_RED_OFF;
  26.                 LED_GREEN_ON;
  27.                 LED_BLUE_OFF;
  28.                 for(i = 0;i < 10000000;i++);
  29.                 LED_RED_OFF;
  30.                 LED_GREEN_OFF;
  31.                 LED_BLUE_ON;
  32.                 for(i = 0;i < 10000000;i++);
  33.         }
  34. }
復(fù)制代碼
2、GPIO初始化
  1. /*
  2. * Name                : initialize
  3. * Description         : ---
  4. * Author              : ysloveivy.
  5. *
  6. * History
  7. * --------------------
  8. * Rev                 : 0.00
  9. * Date                : 11/21/2015
  10. *
  11. * create.
  12. * --------------------
  13. */
  14. static int initialize(void)
  15. {
  16.         GPIO_InitTypeDef   GPIO_uInitStructure;

  17.         //LED IO初始化
  18.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOI,ENABLE);
  19.         GPIO_uInitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;    //設(shè)置連接三色LED的IO端口
  20.         GPIO_uInitStructure.GPIO_Mode = GPIO_Mode_OUT;                          //設(shè)置IO為輸出模式
  21.         GPIO_uInitStructure.GPIO_OType = GPIO_OType_PP;                         //設(shè)置IO輸出類型為推挽輸出
  22.         GPIO_uInitStructure.GPIO_PuPd = GPIO_PuPd_UP;                           //上拉輸出
  23.         GPIO_uInitStructure.GPIO_Speed = GPIO_Speed_100MHz;                     //設(shè)置IO速度等級(jí)
  24.         GPIO_Init(GPIOI,&GPIO_uInitStructure);

  25.         //IO輸出高電平,三色LED熄滅
  26.         GPIO_SetBits(GPIOI,GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);

  27.         return 0;
  28. }
復(fù)制代碼

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
這個(gè)函數(shù)兩個(gè)參數(shù),第一個(gè)參數(shù)是用來指定需要初始化的GPIO對(duì)應(yīng)的GPIO組,取值范圍為GPIOA~GPIOK。第二個(gè)參數(shù)為初始化參數(shù)結(jié)構(gòu)體指針,結(jié)構(gòu)體類型為GPIO_InitTypeDef。
結(jié)構(gòu)體定義為
typedef struct{  
  uint32_t GPIO_Pin;                           //設(shè)置IO端口           
  GPIOMode_TypeDef GPIO_Mode;      //設(shè)置端口工作模式
  GPIOSpeed_TypeDef GPIO_Speed;    //設(shè)置端口的速度等級(jí)
  GPIOOType_TypeDef GPIO_OType;   //設(shè)置端口的類型
  GPIOPuPd_TypeDef GPIO_PuPd;       //設(shè)置上下拉  
}GPIO_InitTypeDef;
五、實(shí)驗(yàn)現(xiàn)象:
iCore3雙核心板上與ARM相連的三色LED(PCB上標(biāo)示為ARM·LED),紅色、綠色、藍(lán)色交替點(diǎn)亮。

六、代碼包下載:
iCore3_1_LED.zip (793.24 KB, 下載次數(shù): 33)


評(píng)分

參與人數(shù) 1黑幣 +90 收起 理由
admin + 90 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:274013 發(fā)表于 2018-3-5 23:07 | 只看該作者
真·小白,怎么傳送數(shù)據(jù)???

IMG_20180305_225056.jpg (1.81 MB, 下載次數(shù): 114)

IMG_20180305_225056.jpg
回復(fù)

使用道具 舉報(bào)

板凳
ID:643486 發(fā)表于 2022-6-28 21:46 | 只看該作者
有USB口啊
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表