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

歷史上的今天

今天是:2025年05月30日(星期五)

2019年05月30日 | STM32F4開發板----GPIO(001)

發布者:不見南師久 來源: 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;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

初始化實例,設置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引腳置高

1

2

3

4

5

6

7

8

9

10

11

12

13

相關所有的庫函數

/*  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)
下一篇:HAL庫教程14:查表法測量NTC熱敏電阻

推薦閱讀

  在晉江舉辦的首屆全國集成電路“創業之芯”大賽總決賽及頒獎儀式上華登國際投資集團合伙人王林進行了《半導體產業格局以及創新機遇》的主題演講,其中針對中國半導體創新創業機會進行了解讀。下面就隨網絡通信小編一起來了解一下相關內容吧?! ⊥趿直硎荆?000年初的山寨市場催生了我國集成電路的創新與發展,而如今山寨紅利耗盡,廉價替代的時代已經...
??串口收到的兩組數據之間,往往會有一定的時間間隔??梢耘袛噙@個間隔,來實現無需結束符,無需指定長度,串口可接收不定長數據的功能。如果串口在一定的時間內沒有收到新的數據,可以認為一組數據已經接收完畢了。思路是用定時器來設置一個“鬧鐘”,連續的一段時間沒有收到新的數據,鬧鐘響起,就把已經收到的數據打包,做相應處理。定時器溢出時間配...
在現代生產中,人們對焊接的質量越來越高,然而優秀的焊接工人卻越來越難找。隨著技術、技術、數控及機器人技術的發展,自動焊接機器人, 從開始用于生產以來,其技術已日益成熟。焊接機器人主要包括機器人和焊接設備兩部分。但是焊接設備目前采用的工裝平臺幾乎還是傳統的普通平板平臺。完全不適應現在變化多樣多品種多規格的產品狀況。采用性能優越的...

史海拾趣

問答坊 | AI 解惑

電子設計競賽相關資料(很全)

本帖最后由 paulhyde 于 2014-9-15 09:42 編輯 電子設計競賽相關資料  …

查看全部問答∨

視頻消費電子設備的無線連接預計強勁增長

本帖最后由 jameswangsynnex 于 2015-3-3 19:59 編輯 據iSuppli公司,消費電子(CE)產業正在進入連接無處不在的新時代,刺激裝備高帶寬無線視頻接口解決方案的視頻導向CE設備蓬勃發展?! Suppli公司預測,2014年具有高帶寬無線視頻接口的支持視 ...…

查看全部問答∨

波特率問題

我想知道為什么波特率越大串口通訊時數據越容易出錯…

查看全部問答∨

如何讓兩個驅動共用一個全局變量

我想在兩個驅動里調用一個全局變量,并且 一個驅動調用這個變量并改變它,然后另外一個程序的這個變量也隨之改變,不知道能做到這樣嗎??…

查看全部問答∨

我是學國際經濟與貿易的的,以前沒學過電子,由于工作中的需要,想了解CCL和FR-4方面的知識,請問在網上哪里能夠找到這方面的知識???另外有哪些書或資料有講解啊?

我是學國際經濟與貿易的的,以前沒學過電子,由于工作中的需要,想了解CCL和FR-4方面的知識,請問在網上哪里能夠找到這方面的知識???另外有哪些書或資料有講解?。俊?

查看全部問答∨

求友善之臂2440系列的開發板

求友善之臂2440系列的開發板,有意的聯系我,QQ84025463…

查看全部問答∨

stm32usb驅動哪里有,謝謝

在做usb實驗的時候電腦發現識別不了板子的usb設備,電腦一側的驅動誰有…

查看全部問答∨

求 基于stm32的串口攝像頭驅動程序設計

求 基于stm32的串口攝像頭驅動程序設計  的完整程序   我用的是mdk和jlink進行仿真調試!謝謝了!急?。。?!…

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

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 潜山县| 辽宁省| 临桂县| 濮阳市| 台安县| 东方市| 克东县| 灵川县| 筠连县| 堆龙德庆县| 安吉县| 安多县| 稷山县| 佳木斯市| 五华县| 清水县| 西和县| 鹤岗市| 行唐县| 柳林县| 涡阳县| 湛江市| 镇坪县| 合阳县| 海原县| 正定县| 绥中县| 阿鲁科尔沁旗| 乐安县| 扬中市| 乌拉特后旗| 禹州市| 上犹县| 宜昌市| 太康县| 涿鹿县| 东乌| 西青区| 清涧县| 驻马店市| 友谊县|