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

簡介

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


原理圖分析

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

LED原理圖

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

button

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


GPIO設置

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


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

GPIO結構圖

輸入輸出模式

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

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

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


結構體設置

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


STM32的庫函數將結構體的功效發揮到了極致,我們首先來看一下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操作

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



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);    //初始化,使燈為熄滅狀態

    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的操作完成,功能也成功實現。但是按鍵部分未加消抖處理,所以可能出現不穩定的狀態。不過對于本示例來說,這一現象并不明顯。


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

上一篇:STM32之LED配置
下一篇:STM32單片機基礎03——使用GPIO點亮一個LED

推薦閱讀

從美國對華為的態度可以看出,華為在美國的發展會很不順,而澳大利亞竟然公開禁止華為供應5G設備,雖然華為在抗議,在爭取,但能否讓澳大利亞政府做出改變還很懸。中國外交部官方網站顯示,在今日的外交部例行記者會上,有記者就相關動態進行了提問。??記者在會上提問到,在美國和澳大利亞都禁止使用華為和中興的通訊設備后,日本方面也決定禁止華為設備...
Strategy Analytics最新發布的研究報告《美國5G認知&智能手機品牌偏好》指出,用戶對 5G的認知很高,57%的用戶聲稱基本熟悉或非常熟悉5G。 好消息是,幾乎一半的高端機型(1000美元以上)用戶愿意支付更多。 壞消息是智能手機價格昂貴是絕大多數消費者不買5G手機的最大因素。 報告的關鍵發現包括: · 25%的非洲裔美國人和23%的西班牙裔美國人預...
單片機源程序如下://按4X4鍵盤的F鍵 進入設定狀態//E D 鍵是前后移動鍵//C按鍵是調整數值按鍵#include "reg52.h"#define uchar unsigned charsbit key_h=P1^0;sbit key_m=P1^1;sbit key_s=P1^2;unsigned char Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //段碼表unsigned int h,m,s,counter;void delay1ms(unsigned...
導讀:歐洲電池制造商InoBat公司宣布與美國電池材料供應商Group14 Technologies公司進行合作,將使用Group14的專利硅基負極材料為汽車生產高能量密度的電池。InoBat公司表示,高能量密度電池市場需求飆升,相比傳統鋰離子電池,硅基負極材料的單位體積能量密度更高。Group14表示,能源部已經認可其“新穎的、可投入使用的納米材料和可靠的工業規模工藝”...

史海拾趣

問答坊 | AI 解惑

GPP有人了解么

不知道GPP是否有人了解,愿意賜教,呵呵。。。…

查看全部問答∨

DE2-70

想知道一下有沒有人用過DE2_70的板子,我剛用不太懂,尤其是狀態機那部分…

查看全部問答∨

[提問]有關WINCE下DS編程

下午花了3個多小時搭建DS開發環境 一開始包含頭文件 streams.h 出現一大堆的重定義問題 查詢資料后是庫文件載入優先DX的目錄即可 更正后還剩下2個錯誤 d:\\dxsdk\\include\\strmif.h(6166) : error C2011: \'_RGNDATAHEADER\' : \'struct\' type ...…

查看全部問答∨

大家都是用的那種移動設備

我想問問大家都是使用的那種手持式設備進行開發的? 能不能介紹一下? 使用win Ce 系統,有接觸式IC卡讀寫設備,有沒有做過這類平臺產品的推薦一下?…

查看全部問答∨

請教, 精密整流電路問題

本帖最后由 paulhyde 于 2014-9-15 09:42 編輯   請教各位大俠,我的精密整流電路輸出正負不對稱, 當輸入1V時,輸約1.5V, 輸入2V, 輸出約為2.5V.輸入負電壓時, 輸出與輸入相等.   不好意思, 圖怎么貼不上去呀.  …

查看全部問答∨

請教一下香版主stm32和LCD連接問題

能否利用stm32的5v容忍管腳和其開漏輸出功能, 實現stm32直接連接5v的lcd模塊?…

查看全部問答∨

基于FPGA的棋類比賽計時器

學校沒教過FPGA/CPDL這門課程,但是畢業設計卻要我做這個題目。我真是一頭霧水。每個人個都在工作階段了,難道要我花一段時間來學一門課程再完成一個設計嗎?抽到題目是我在忙考研,考研失敗了,我就找工作,現在工作都找到了,但是星期一到六都要 ...…

查看全部問答∨

求一個advanteck labtool 48編程器的ICTEST軟件

advanteck labtool 48編程器帶一個測試TTL門電路的功能。需要在dos下運行的ICTEST。這幾天搜遍了網絡也沒有找到,只有燒錄的軟件。哪位大哥大姐有的話發給我下,謝謝。論壇附件也可,郵箱也可fengcheche76@163.com謝謝了。…

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

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 临猗县| 宁强县| 太保市| 安陆市| 哈巴河县| 任丘市| 天等县| 海原县| 青川县| 肇州县| 井研县| 青州市| 宜兴市| 德格县| 凉城县| 湖北省| 大连市| 夏邑县| 卢龙县| 黔南| 弋阳县| 贵州省| 天津市| 于都县| 临桂县| 丹巴县| 富蕴县| 天气| 丹阳市| 湘阴县| 建水县| 平安县| 观塘区| 通道| 阿拉善盟| 山丹县| 永靖县| 凌云县| 崇左市| 道孚县| 宁强县|