久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7097|回復: 2
打印 上一主題 下一主題
收起左側

[零基礎學習STM32]第一講:GPIO輸出實驗—點亮三色LED

[復制鏈接]
跳轉到指定樓層
樓主
一、概述:
1、發光二極管簡介
     發光二極管是半導體二極管的一種,可以把電能轉化為光能,常簡寫為LED。常用的是發紅光、綠光或黃光的二極管。發光二極管的反向擊穿電壓約為5V。它的正向伏安特性曲線很陡,使用時必須串聯限流電阻以控制通過管子的電流。限流電阻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 位數據寄存器(IDR 和ODR)、1 個32 位置位/復位寄存器(BSRR)、1 個32 位鎖定寄存器(LCKR) 和2 個32 位復用功能選擇寄存器(AFRH 和AFRL)等。
GPIO可以配置成以下8種工作模式:
  • 浮空輸入:此端口在默認情況下什么都不接,呈高阻態,這種設置在數據傳輸時用的比較多。
  • 上拉輸入:上拉輸入模式與浮空輸入模式相比,僅僅是在數據通道上部,接入了一個上拉電阻,這個上拉電阻的阻值介于30K~50K歐姆,CPU可以隨時在輸入數據寄存器的另一端,讀出I/O端口的電平狀態。這種模式的好處在于我們什么都不輸入時,由于內部上拉電阻的原因,處理器會覺得我們輸入了高電平,這就避免了不確定的輸入。該端口在默認情況下輸入為高電平。
  • 下拉輸入:下拉輸入模式與浮空輸入模式相比,僅僅是在數據通道上部,接入了一個下拉電阻。與上拉輸入模式類似,這種模式的好處在于外部沒有輸入時,由于內部下拉電阻的原因,我們的處理器會覺得我們輸入了低電平。
  • 模擬功能:STM32的模擬輸入通道的配置很簡單,信號從I/O端口直接進入ADC模塊。此時,所有的上拉、下拉電阻和施密特觸發器,均處于斷開狀態,因此輸入數據寄存器將不能反映端口上的電平狀態,也就是說,模擬輸入配置下,信號不經過輸入數據寄存器,CPU不能在輸入數據寄存器上讀到有效的數據。該輸入模式,使我們可以獲得外部的模擬信號。
  • 開漏輸出:開漏輸出不可以直接輸出高電平,開漏輸出的輸出端相當于三極管的集電極,要得到高電平狀態需要上拉電阻才行。
  • 推挽輸出:推挽輸出可以輸出高、低電平,連接數字器件;推挽結構一般是指兩個三極管分別受兩個互補信號的控制,總是在一個三極管導通的時候另一個截止。高低電平由IC的電源決定。
  • 開漏復用輸出:GPIO的基本功能是普通的I/O,而STM32有自己的各個功能模塊,這些內置外設的外部引腳是與標準GPIO復用的,當作為這些模塊的功能引腳時就叫復用。開漏復用輸出功能模式與開漏輸出模式相比,不同的是輸出控制電路的輸入,是和片上外設的輸出信號相連即與復用功能的輸出端相連,此時,輸出數據寄存器在輸出通道被斷開。
  • 推挽復用輸出:推挽復用輸出功能模式與推挽輸出模式相比,不同的是輸出控制電路的輸入,是和片上外設的輸出信號相連,即與復用功能的輸出端相連,而輸出數據寄存器在輸出通道被斷開。

二、硬件電路:

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

三、實驗原理:

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

四、源代碼:
1、主函數
  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交替點亮
  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. }
復制代碼
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;    //設置連接三色LED的IO端口
  20.         GPIO_uInitStructure.GPIO_Mode = GPIO_Mode_OUT;                          //設置IO為輸出模式
  21.         GPIO_uInitStructure.GPIO_OType = GPIO_OType_PP;                         //設置IO輸出類型為推挽輸出
  22.         GPIO_uInitStructure.GPIO_PuPd = GPIO_PuPd_UP;                           //上拉輸出
  23.         GPIO_uInitStructure.GPIO_Speed = GPIO_Speed_100MHz;                     //設置IO速度等級
  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. }
復制代碼

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
這個函數兩個參數,第一個參數是用來指定需要初始化的GPIO對應的GPIO組,取值范圍為GPIOA~GPIOK。第二個參數為初始化參數結構體指針,結構體類型為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;
五、實驗現象:
iCore3雙核心板上與ARM相連的三色LED(PCB上標示為ARM·LED),紅色、綠色、藍色交替點亮。

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


評分

參與人數 1黑幣 +90 收起 理由
admin + 90 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

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

IMG_20180305_225056.jpg
回復

使用道具 舉報

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产乱码精品1区2区3区 | 日韩精品福利 | 国产伦精品一区二区三区照片91 | 黄色精品 | 精品久久久久香蕉网 | 日本久草| 亚洲三级在线观看 | 特级生活片 | 老司机狠狠爱 | 羞羞在线视频 | 亚洲电影中文字幕 | 成人精品久久久 | 黄色毛片在线看 | 精品国产欧美一区二区三区成人 | 91在线看片| 欧美三区在线观看 | 日本电影韩国电影免费观看 | 成人午夜av| 国产精品久久av | 欧美激情一区二区三级高清视频 | 午夜免费视频 | 亚洲精品久久久一区二区三区 | 亚洲综合大片69999 | 国产专区免费 | 美女福利视频一区 | 精品日韩在线观看 | 免费的黄色片子 | 国产激情网站 | 精品国产一区二区三区久久久久久 | 国产一级黄色网 | 亚洲va在线va天堂va狼色在线 | 成人免费在线视频 | 99精品免费视频 | 91精品91久久久 | 久久一及片 | 国产成人a亚洲精品 | 亚洲国产成人精品久久久国产成人一区 | 国产精品96久久久久久 | 大吊一区二区 | 精品国产乱码久久久久久丨区2区 | 欧美成年人网站 |