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

歷史上的今天

今天是:2025年03月13日(星期四)

正在發生

2019年03月13日 | STM32F4開發板----GPIO(001)

發布者:Shuxiang 來源: eefocus關鍵字:STM32F4  GPIO 手機看文章 掃描二維碼
隨時隨地手機看文章

STM32F4開發板快速入門—-GPIO篇 

GPIO 

設置輸入/出總共8種模式


* 輸入浮空,輸入上拉,輸入下拉,模擬輸入。


* 開漏輸出,推挽輸出,推挽復用共功能,開漏復用功能


模式選擇的話,一般得看具體電路了,具體看輸入的信號,比如接低電平信號,上拉成高電平,接高電平信號下拉成低電平。


初始化參數

/**

  * @brief   GPIO Init structure definition  

  */

typedef struct

{

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

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


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

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


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

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


  GPIOOType_TypeDef GPIO_OType;   /*!< Specifies the operating output type for the selected pins.

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


  GPIOPuPd_TypeDef GPIO_PuPd;     /*!< Specifies the operating Pull-up/Pull down for the selected pins.

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

}GPIO_InitTypeDef;



初始化實例,設置GPIOF.9|10普通輸出模式 

推挽輸出,速度為100MHz,上拉,同時引腳置高


 GPIO_InitTypeDef  GPIO_InitStructure;


  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//ê使能GPIOF時鐘


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通輸出模式1

  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽輸出

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉

  GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化


  GPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);//GPIOF9,F10引腳置高


相關所有的庫函數

/*  Function used to set the GPIO configuration to the default reset state ****/

void GPIO_DeInit(GPIO_TypeDef* GPIOx);


/* Initialization and Configuration functions *********************************/

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);

void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);


/* GPIO Read and Write functions **********************************************/

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

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

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);


/* GPIO Alternate functions configuration function ****************************/

void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF);


設置高低電平語句


void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);


GPIO_SetBits(GPIOA, GPIO_Pin_5);    //GPIOA.5=1,置位高電平·;

void GPIO_ResetBits(GPIOA, GPIO_Pin_5);    //GPIOA.5=0,置位低電平;


或者按照這種模式


//IO操作,只對單一IO口

//確保n的值小于16

#define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  //輸出

#define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n)  //輸入


#define PBout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)  //輸出

#define PBin(n)    BIT_ADDR(GPIOB_IDR_Addr,n)  //輸出


設置實例對比


/*下面方式是直接操作庫函數方式讀取IO*/

#define KEY0         GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) //PE4

#define KEY1         GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)    //PE3

#define KEY2         GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) //PE2

#define WK_UP     GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)    //PA0


下面是直接同為位帶操作讀取IO


/*

#define KEY0         PEin(4)       //PE4

#define KEY1         PEin(3)        //PE3

#define KEY2         PEin(2)        //P32

#define WK_UP     PAin(0)        //PA0

*/


按鍵處理,矩陣鍵盤

對于按鍵,使用讀函數 

邏輯分析


//支持連續按下

void key_scan(){

    if(key按下){

    return 按鍵按下

   }else

    return 按鍵沒有按下

}


//不支持連續按下

void key_scan(){

    static u8 key_up=1;//記錄上次狀態,初始化松開

    if(key按下){

        if(key_up=1)//松開了,按鍵有效

            return 按鍵按下

        else

            return 按鍵松開

        key_up=0

    }else

    key_up=1;//松開

}


實例對比


u8 KEY_Scan(u8 mode)

{    

    static u8 key_up=1;//按鍵松開標志

    if(mode)key_up=1;  //支持連按         

    if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))

    {

        delay_ms(10);//去抖動

        key_up=0;

        if(KEY0==0)return 1;

        else if(KEY1==0)return 2;

        else if(KEY2==0)return 3;

        else if(WK_UP==1)return 4;

    }else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1;      

    return 0;// 無按鍵按下

}


矩陣鍵盤的話


u8 KEY_Scan(u8 mode)  //mode=0  ?????  mode=1  

{    


  if(mode)key_up=1;  


    GPIO_SetBits(GPIOD,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);    


  if(key_up && GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15)==1)

  {

    delay_ms(10);//去抖動

    key_up=0;


    GPIO_SetBits(GPIOD,GPIO_Pin_8);     

    GPIO_ResetBits(GPIOD,GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);   

    if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_12)==1) return 1;

    else if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_13)==1) return 2;

    else if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_14)==1) return 3;

    else if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_15)==1) return 4;


    GPIO_SetBits(GPIOD,GPIO_Pin_9);

    GPIO_ResetBits(GPIOD,GPIO_Pin_8|GPIO_Pin_10|GPIO_Pin_11);

    if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_12)==1) return 5;

    else if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_13)==1) return 6;

    else if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_14)==1) return 7;

    else if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_15)==1) return 8;


    GPIO_SetBits(GPIOD,GPIO_Pin_10);

    GPIO_ResetBits(GPIOD,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_11);

    if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_12)==1) return 9;

    else if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_13)==1) return 10;

    else if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_14)==1) return 11;

    else if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_15)==1) return 12;


    GPIO_SetBits(GPIOD,GPIO_Pin_11);

    GPIO_ResetBits(GPIOD,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10);

    if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_12)==1) return 13;

    else if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_13)==1) return 14;

    else if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_14)==1) return 15;

    else if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_15)==1) return 16;

  }

  else if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_12)==0&&GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_13)==0&&GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_14)==0&&GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_15)==0) 


key_up=1;   

return 0;

}

關鍵字:STM32F4  GPIO 引用地址:STM32F4開發板----GPIO(001)

上一篇:STM32F4開發板----串口(002)
下一篇:關于STM32精準采頻率的實現

推薦閱讀

自從消費級無人機市場有所謂“紅海”一說以來,工業級會是下一個“藍海”的論調就在無人機領域不斷涌現。然而,即便是“藍海”的工業級領域,創投資本也已經沒有“元年”時期的搶灘積極性,反倒成了作壁上觀者,很多工業級領域的從業者,也因為融資難以及暫時無法精準定位而苦惱。工業級無人機,按照其應用,用北航無人駕駛飛行器設計研究所工程師楊炯的觀...
我們都知道,智慧工廠代表了高度互聯和智能化的數字時代,工廠的智能化通過互聯互通、數字化、大數據、智能裝備與智能供應鏈等關鍵領域得以體現。根據麥肯錫全球研究院最新預測,到2025年智慧工廠帶來的經濟影響價值將達每年1.2萬億美元至3.7萬億美元。張宏輝女士在工廠的智能化升級過程中,對于傳感、處理器、控制單元等需求旺盛。如此大的潛力市場,自然...
realme今年對于首發新處理器十分執著,不僅首發了第一款搭載Helio G70處理器的realme C3,還首發了搭載了驍龍720G的realme 6 Pro?! ?月13日,realme又宣布了一款首發新機realme 6i,將全球首發聯發科Helio G80處理器?! elio G80是聯發科剛剛于2月份推出的全新中端芯片,基于12nm工藝,設計為8核心。采用2+6“Big.Little”設計,大...
氣孔產生的原因焊接過程中出現氣孔的原因可以分為外在原因和內在原因,外在原因主要包括環境因素以及操作工人使用不當導致的,在焊接過程中,由于保護不好,導致氣體進入熔池中,在痛斥冷卻的過程中氣體排不出去,導致了工件內部出現氣孔,再就是周圍空氣如果過于潮濕,也會導致工件表現出現氣孔。焊接機器人電弧過長會造成空氣進入產生氮氣孔,表面清理不...

史海拾趣

問答坊 | AI 解惑

ARM基礎知識

ARM基礎知識 ARM處理器共有37個寄存器。其中包括: **31個通用寄存器,包括程序計數器(PC)在內。這些寄存器都是32位寄存器。 **6個狀態寄存器。這些寄存器都是32位寄存器。 ARM處理器共有7種不同的處理器模式,每一種模式中都有一組相應的寄 ...…

查看全部問答∨

一個小問題,困惑著我(圖片格式改為jpg后重發)

我是想從手機的耳機孔取信號,來推動一個單穩態電路   從左往右把門電路分別稱為門1、門2、門3、門4. 門3、門4.組成的單穩態電路,很成功 ,用手指碰門2的輸入端可使單穩態翻轉。   門1組成的放大器,把手機的耳機信號放大后送到后面 ...…

查看全部問答∨

關于控制多個步進電動機的問題

我想用一個單片機控制大概3到4個步進電動機,請問應該使用那種方法將單片機與步進電動機互聯起來呢?有效而簡單的辦法是什么???具體應該怎么樣實現呢?…

查看全部問答∨

關于visualstate的

有哪位大哥用過IAR VISUALSTATE的,麻煩介紹下(越詳細越好),謝謝…

查看全部問答∨

ping一段時間后出現網絡斷開的問題

現在我寫了一個類似于ping的程序在pc機上運行,只是該程序不是一秒發一次,而是如果收到對方的應答就立即發送另一個ping的包.也就是只是ping得更快. ping一段時間之后就出現網絡斷開. 我想問下是不是因為底下bsp的原因造成的? 又該怎么解決? 謝謝 ...…

查看全部問答∨

關于在STM32中使用printf函數的問題!

調試RTC例程時發現每次仿真到printf函數就死機。于是上網搜索解決方案,看到一個最簡單有效的方法就是要在KEIL上的microLIB要打勾勾,但是我試了,還是死機。這是怎么回事呢?難道還有什么要注意的地方?…

查看全部問答∨

請問硬件乘法器在math.h的庫函數中有沒有用到?

如題!希望大家能明我問了些什么?!?

查看全部問答∨

求推薦型號和原因

老師讓做一個加速度計,來記錄人一天的行走路線?,F在需要確定使用的有加速度計型號,板子型號和SD卡。求推薦。特別是加速度計,我看論壇上很多用7455的,有什么優勢?其他的如何?求推薦?…

查看全部問答∨

用51收集地磁傳感器的程序和源代碼

本人想通過測加速度和偏轉角度來做一個指揮棒,現在被地磁困住了,求救急 ?。。。?!…

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

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 买车| 玛多县| 三亚市| 临颍县| 浏阳市| 和龙市| 台州市| 元朗区| 准格尔旗| 隆子县| 上饶市| 那曲县| 鸡泽县| 永安市| 临沧市| 宁南县| 桐庐县| 治县。| 龙门县| 盐边县| 华阴市| 彭山县| 玉林市| 岳池县| 武陟县| 云和县| 景宁| 隆子县| 五莲县| 福建省| 金坛市| 芜湖市| 乡宁县| 元朗区| 顺昌县| 西宁市| 溆浦县| 尉氏县| 隆化县| 金塔县| 丹江口市|