娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

簡介

不同的開發(fā)板的原理圖結構也不盡相同,筆者在這里使用野火的MINI-V3(F103VET6)簡易開發(fā)板對GPIO口的設置做一個簡單的介紹,并實現(xiàn)按鍵控制LED燈的亮滅。方便讀者可以快速熟悉并靈活應用。


原理圖分析

首先我們來看一下發(fā)光二極管部分和按鍵部分的原理圖。

LED原理圖

下面是按鍵的原理圖部分:

button

在這里,我們將使用KEY1(PA0)來控制紅燈PB5的亮滅。由原理圖可知,其控制LED燈的PB5引腳為低電平時,燈亮。當KEY1按下時,PA0引腳由之前的低電平轉為高電平(3V3)。明確了目的之后我們就可以分析GPIO口并進行設置了。


GPIO設置

經(jīng)過上述的功能明確之后,我們將其分為兩大類,分別是輸入類(如按鍵)和輸出類(LED燈)。

STM32系列單片機的引腳有著豐富的功能,在這里將其芯片的GPIO口部分的結構圖放出,有興趣的朋友可自行研究或在評論區(qū)留言討論。在這里筆者將不再講解時鐘樹的相關內(nèi)容,以免對初學者造成較大壓力,有興趣的朋友可自行參考官方文檔。

GPIO結構圖

輸入輸出模式

GPIO的輸入、輸出種類詳見下表。

功能名稱簡述
輸入上拉輸入(GPIO_Mode_IPU)默認狀態(tài)下(引腳無輸入),讀得的數(shù)據(jù)為1,高電平
輸入下拉輸入(GPIO_Mode_IPD)與上拉輸入相反,默認為0,低電平
輸入浮空輸入(GPIO_Mode_IN_FLOATING)輸入不確定,無上拉和下拉。輸入阻抗較大,一般用于標準通信協(xié)議如、USART的接收端
輸入模擬輸入模式(GPIO_Mode_AIN)一般由ADC采集電壓信號時將其設置為模擬輸入。
輸出普通推挽輸出(GPIO_Mode_Out_PP)輸出電平為3.3V
輸出普通開漏輸出(GPIO_Mode_Out_OD)若要輸出5V,則需外加上拉電阻,電源為5V。輸出為高阻態(tài)時,由上拉電阻和電源向外輸出5V的高電平
輸出復用推挽輸出(GPIO_Mode_AF_PP)引腳復用功能采用復用模式
輸出復用開漏輸出(GPIO_Mode_AF_OD)復用模式,且加入上拉電阻

由上表可知,我們需要將LED燈的引腳設置為推挽輸出。按鍵部分的輸入可以是上拉輸入也可以是下拉輸入。在這里,因為我們的電路原理圖設置的是按鍵按下為高,釋放為低。所以我們使用下拉輸入的模式 。

結構體設置

STM32以高效的庫函數(shù)開發(fā)而著稱。由于其寄存器過多,不適合類似51系列單片機的寄存器操作,所以我們將直接采用庫函數(shù)開發(fā)的方法(CMSIS 3.5.0版本)。


STM32的庫函數(shù)將結構體的功效發(fā)揮到了極致,我們首先來看一下GPIO口的結構體定義:


typedef struct {

  uint16_t GPIO_Pin;             /*!< Specifies the GPIO pins to be configured.

                                      This parameter can be any value of @ref GPIO_pins_define */


  GPIOSpeed_TypeDef GPIO_Speed;  /*!< Specifies the speed for the selected pins.

                                      This parameter can be a value of @ref GPIOSpeed_TypeDef */


  GPIOMode_TypeDef GPIO_Mode;    /*!< Specifies the operating mode for the selected pins.

                                      This parameter can be a value of @ref GPIOMode_TypeDef */

}GPIO_InitTypeDef;


在這個結構體之中,主要包括三個成員:引腳設置(GPIO_Pin)、引腳最大輸出速度(GPIO_Speed)和引腳模式(GPIO_Mode)。在這之中,GPIO還有一個重要的定義,即確定組別:GPIOA~GPIOG.

他們的種類又可以分別劃分為:


GPIO_Speed:

GPIO_Speed_10MHz

GPIO_Speed_2MHz

GPIO_Speed_50MHz

GPIO_Mode:

GPIO_Mode_AIN

GPIO_Mode_IN_FLOATING

GPIO_Mode_IPD

GPIO_Mode_IPU

GPIO_Mode_Out_OD

GPIO_Mode_Out_PP

GPIO_Mode_AF_OD

GPIO_Mode_AF_PP

GPIO_Pin:

GPIO_Pin_0

GPIO_Pin_1

GPIO_Pin_2

GPIO_Pin_3

GPIO_Pin_4

GPIO_Pin_5

GPIO_Pin_6

GPIO_Pin_7

GPIO_Pin_8

GPIO_Pin_9

GPIO_Pin_10

GPIO_Pin_11

GPIO_Pin_12

GPIO_Pin_13

GPIO_Pin_14

GPIO_Pin_15

熟悉結構體類別以后我們可以進行結構體的定義以及GPIO口的初始化。由于GPIO處于APB2時鐘線下,所以我們必須要開啟相應的時鐘。代碼如下:


void key_gpio_config(void) {

    GPIO_InitTypeDef key_struct;    // 定義結構體

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);   // 開啟時鐘

    key_struct.GPIO_Pin = GPIO_Pin_0;    //結構體成員設置;對于按鍵初始化而言,由于GPIO是輸入模式,故不必設置最大輸出速度

    key_struct.GPIO_Mode = GPIO_Mode_IPD;

    GPIO_Init(GPIOA, &key_struct);    // 初始化引腳

}


void led_gpio_config(void) {    // 同上

    GPIO_InitTypeDef led_struct;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

    led_struct.GPIO_Pin = GPIO_Pin_5;

    led_struct.GPIO_Speed = GPIO_Speed_50MHz;

    led_struct.GPIO_Mode = GPIO_Mode_Out_PP;

    GPIO_Init(GPIOB, &led_struct);

}


自此,結構體設置結束。下面進行GPIO口的操作。


GPIO操作

對于庫函數(shù)開發(fā)來說,一切硬件操作都可以使用函數(shù)來解決。如:



uint16_t  GPIO_ReadInputData (GPIO_TypeDef *GPIOx) 

  // Reads the specified GPIO input data port. 


uint8_t  GPIO_ReadInputDataBit (GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) 

  // Reads the specified input port pin. 


uint16_t  GPIO_ReadOutputData (GPIO_TypeDef *GPIOx) 

  // Reads the specified GPIO output data port. 


uint8_t  GPIO_ReadOutputDataBit (GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) 

  // Reads the specified output data port bit. 


void  GPIO_ResetBits (GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) 

  // Clears the selected data port bits. 


void  GPIO_SetBits (GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) 

  // Sets the selected data port bits. 


void  GPIO_StructInit (GPIO_InitTypeDef *GPIO_InitStruct) 

  // Fills each GPIO_InitStruct member with its default value. 


void  GPIO_Write (GPIO_TypeDef *GPIOx, uint16_t PortVal) 

  // Writes data to the specified GPIO data port. 


void  GPIO_WriteBit (GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, BitAction BitVal) 

  // Sets or clears the selected data port bit. 


對于本題目而言,使用簡單的寫入操作即可。


int main()

{

    led_gpio_config();

    GPIO_WriteBit(GPIOB, GPIO_Pin_5, 1);    //初始化,使燈為熄滅狀態(tài)

    key_gpio_config();


    while(1) {

        if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 1) {

            GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_RESET);

        }

        else {

            GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_SET);

        }

    }

}


至此,GPIO的操作完成,功能也成功實現(xiàn)。但是按鍵部分未加消抖處理,所以可能出現(xiàn)不穩(wěn)定的狀態(tài)。不過對于本示例來說,這一現(xiàn)象并不明顯。


關鍵字:STM32  GPIO設置  LED燈 引用地址:STM32——GPIO設置:快速點亮第一個LED燈

上一篇:STM32筆記(三)GPIO的配置(用GPIO點亮LED)
下一篇:STM32 基于 CubeMX配置GPIO點亮LED燈

推薦閱讀

? ??8月28日晚間消息,今日8848鈦金手機舉辦發(fā)布會推出新品M5手機,售價9999元起,9月1日開售。從2015年發(fā)布至今,8848鈦金手機的一直保持在奢侈級定位,而這三年的時間帶來了40萬的銷量,并且據(jù)官方介紹一年期留存率85%。雖然40萬的銷量在動輒幾百萬銷量的手機品牌來說不值一提,但對于CEO周佳甚至8848來說確是個小成績。而在這款M5身上,8848在產(chǎn)品...
摘要:CAN總線廣泛應用于汽車電子、現(xiàn)代工業(yè)及軍工航空等安全要求較高的領域,優(yōu)質(zhì)的CAN信號是各節(jié)點穩(wěn)定通信的基礎,那么,如何判斷總線信號質(zhì)量的優(yōu)劣呢?我們可以對信號做一次質(zhì)量評估。 一、為什么要評估檢查CAN信號的質(zhì)量? 信號質(zhì)量較差的CAN信號,可能會導致發(fā)送或接收節(jié)點無法正確識別信號電平,使通信受到影響。信號質(zhì)量評估是分析CAN通信信號質(zhì)...
大多數(shù)示波器上都有個FFT功能,也叫快速傅立葉變換,但很多人不了解這個功能是做什么用的,百度以后又會遇到各種各樣的高數(shù)公式,看的一頭霧水,遂而放棄這塊知識。我們來看百度百科的解釋:FFT,即為快速傅氏變換,是離散傅氏變換的快速算法,它是根據(jù)離散傅氏變換的奇、偶、虛、實等特性,對離散傅立葉變換的算法進行改進獲得的。這一看,頭都大了。今天...
近日,韓國KNCAP公布了2021款 特斯拉Model 3 ( 參數(shù) | 詢價 ) 安全測試結果:綜合分83.3分,但在自動剎車環(huán)節(jié)失利。在韓國KNCAP所設計的AEB自動緊急制動測試環(huán)節(jié)中,特斯拉Model 3分別以20km/h、25km/h和40km/h三個速度與行駛中的自行車、行人發(fā)生多次碰撞,導致該車的在行人安全與事故預防方面丟分較多,僅為三級(最高為一級)。在韓國,汽車安全測試...

史海拾趣

問答坊 | AI 解惑

現(xiàn)場總線基礎知識講座

現(xiàn)場總線(Fieldbus)是80年代末、90年代初國際上發(fā)展形成的,用于過程自動化、制造自動化、樓宇自動化等領域的現(xiàn)場智能設備互連通訊網(wǎng)絡。它作為工廠數(shù)字通信網(wǎng)絡的基礎,溝通了生產(chǎn)過程現(xiàn)場及控制設備之間及其與更高控制管理層次之間的聯(lián)系。它不 ...…

查看全部問答∨

關于深度漢化Protel99SESP6HH2_TSG問題

安裝Protel99SESP6HH2_TSG深度漢化版后,原理圖的元件圖編輯后無法保存,而且保存后會把原有的元件圖刪除成空的。經(jīng)對比發(fā)現(xiàn)這問題是由ADVSCH.DLL(1.05M)文件引起的,我把原來未漢化前備份的這個文件再復制到原來的位置,就能保存了。…

查看全部問答∨

大量資源分享(持續(xù)更新中!)

yayasoso的博客 http://home.eeworld.com.cn/my/space.php?uid=45925 內(nèi)容如下:   51單片機C語言入門教程   24c02中文官方資料手冊      6n137光耦.pdf  6n137光耦中文資料,  &nbs ...…

查看全部問答∨

單片機可燃氣報警器的設計論文

誰有單片機可燃氣報警器的設計論文,發(fā)下給我,萬分感謝!!我的郵箱是dunqu.deyi@163.com    謝謝好心人了…

查看全部問答∨

windows ddk driverstudio 攝像機驅動開發(fā)

不知道怎么做,大家熟悉的給點意見,有啥資料也共享下,謝謝!…

查看全部問答∨

evc初始化問題,在線等,急!!!!!!

cListCtrol.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES);         LV_COLUMN lvc;         lvc.mask=LVCF_FMT|LVCF_WIDTH|LVCF_TEXT;         lv ...…

查看全部問答∨

【L】新手,沒錢!我現(xiàn)在想把從鍵盤得來的ASK碼存到F060外接的FALSH中,怎樣把ASK....

本帖最后由 辛昕 于 2018-9-6 21:58 編輯 我現(xiàn)在想把從鍵盤得來的ASK碼存到F060外接的FALSH中,怎樣把ASK碼轉為無符號整型?用C51。…

查看全部問答∨

開發(fā)ARM9程序需要具備什么知識?

不了解硬件能開發(fā)ARM程序嗎? 聽有人說可以不用關心硬件,在PC上模擬成功后直接下載到芯片中既可。是不是這樣?有六年的c、c#軟件開發(fā)經(jīng)驗。 //解決以下問題,另開帖送分。 哪里有ARM的入門資料可以下載? 誰能提供一款ARM開發(fā)板,價格不要太貴 ...…

查看全部問答∨

關于UCOS中信號量的問題

在寫程序中突然遇到一個怪事情,我使用的ARM是LPC2148,操作系統(tǒng)用的是UCOS,程序是串口發(fā)送接收程序,其中數(shù)據(jù)的接收是用信號量來控制的,當中斷中接收到數(shù)據(jù)后,向接收任務發(fā)送一個信號量,接收任務在接收到信號量后,對數(shù)據(jù)進行處理.程序可以正常運行,但 ...…

查看全部問答∨

LM3S811做一個智能電表怎么實現(xiàn)

菜鳥,問的問題很基礎。要求以該ARM芯片為核心做一個智能電表,我是這么想的,設計了采樣電壓電流信號的電路,將采得的值給mcu,然后通過顯示電路顯示出來,并可以和電腦通信。有幾個基礎的問題,聽說這個芯片帶AD轉換,采樣得到的模擬量從哪個引腳 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 江口县| 巴东县| 郎溪县| 福海县| 尉氏县| 台安县| 商都县| 遵义县| 青阳县| 呼伦贝尔市| 铁岭县| 朔州市| 孝感市| 昔阳县| 丹阳市| 南和县| 梅州市| 海淀区| 华阴市| 广灵县| 周口市| 比如县| 寻甸| 文水县| 峡江县| 平武县| 隆德县| 南皮县| 长海县| 平泉县| 富锦市| 如东县| 常山县| 天祝| 靖江市| 宜春市| 孟州市| 中方县| 潜江市| 北海市| 英山县|