STM32有哪些不同GPIO驅(qū)動

這篇文章主要介紹STM32有哪些不同GPIO驅(qū)動,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的興安盟網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

1 庫函數(shù)版

最常用的版本,使用ST標(biāo)準(zhǔn)外設(shè)庫

void  Led_Key_Init(void)
{  
  GPIO_InitTypeDef GPIO_Init_s;
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);//使能時鐘  
  GPIO_Init_s.GPIO_Pin = GPIO_Pin_4;
  GPIO_Init_s.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_Init_s.GPIO_OType = GPIO_OType_PP;
  GPIO_Init_s.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init_s.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOE, &GPIO_Init_s);
}

開源代碼:

https://github.com/strongercjd/STM32F207VCT6/tree/master/06-GPIO-Input-Output

2 寄存器版

寄存器版其實就是把ST標(biāo)準(zhǔn)外設(shè)庫拷貝出來,可以簡化一些操作

/********使用寄存器---start********/
//TP---PA15
 
#define TP_PORT      GPIOA      
#define TP_PIN      GPIO_Pin_15
 
#define TP_OUT()   TP_PORT->CRH&=0X0FFFFFFF; TP_PORT->CRH|=0X50000000;   //!IO輸出
#define TP_IN()    TP_PORT->CRH&=0X0FFFFFFF; TP_PORT->CRH|=0X40000000;   //!IO輸入
#define TP_READ()  (((TP_PORT->IDR)>>15)?1:0)   //!<IO讀入
 
#define TP_SET()    TP_PORT->BSRR = TP_PIN;//寫1
#define TP_CLR()    TP_PORT->BRR  = TP_PIN;//寫0
 
#define TP_DATA_SET()   TP_SET() //IO寫1
#define TP_DATA_CLR()   TP_CLR() //IO寫0
#define TP_DATA_OUT()   TP_OUT() //將IO設(shè)為輸出
#define TP_DATA_IN()    TP_IN()  //將IO設(shè)為輸入
#define TP_DATA_READ()  TP_READ()//讀取IO的電平
 
/********使用寄存器---end********/

開源代碼:

https://github.com/strongercjd/STM32F207VCT6/tree/master/06-GPIO-Input-Output

3 位段版

基于位段的,操作方便

/*LED配置---PE4*/
#define  GPIO_IDR_OFFSET  (GPIOE_BASE+0x10 - PERIPH_BASE)
#define  GPIO_ODR_OFFSET  (GPIOE_BASE+0x14 - PERIPH_BASE)
 
#define  GPIO_BitNumber   4
#define  GPIO_OUT_BB     (PERIPH_BB_BASE + (GPIO_ODR_OFFSET * 32) + (GPIO_BitNumber * 4))    
#define  GPIO_OUT_DATA           *(__IO uint32_t *)GPIO_OUT_BB
 
#define  GPIO_IN_BB     (PERIPH_BB_BASE + (GPIO_IDR_OFFSET * 32) + (GPIO_BitNumber * 4))    
#define  GPIO_IN_DATA           *(__IO uint32_t *)GPIO_IN_BB
 
#define  GPIO_DIR_REG     *(__IO uint32_t *)(GPIOE_BASE+0X00)
 
 
#define PE4_SET()  GPIO_OUT_DATA = 1   //!< IO寫1
#define PE4_CLR()  GPIO_OUT_DATA = 0   //!< IO寫0
#define PE4_OUT()  GPIO_DIR_REG = (((GPIO_DIR_REG) & 0xFFFFFCFF) | 0x00000100)  //!IO輸出
#define PE4_IN()   GPIO_DIR_REG = ((GPIO_DIR_REG) & 0xFFFFFCFF)  //!IO輸入
#define PE4_READ() GPIO_IN_DATA   //!<IO讀入

將上述整理為通用GPIO驅(qū)動代碼

*GPIO配置---PXX*/
#define GPIO_SET(GPIOx_BASE,GPIO_BitNumber)   *(__IO uint32_t *)((PERIPH_BB_BASE + ((GPIOx_BASE+0x14 - PERIPH_BASE) * 32) + (GPIO_BitNumber * 4))) = 1   //!< IO寫1
#define GPIO_CLR(GPIOx_BASE,GPIO_BitNumber)   *(__IO uint32_t *)((PERIPH_BB_BASE + ((GPIOx_BASE+0x14 - PERIPH_BASE) * 32) + (GPIO_BitNumber * 4))) = 0   //!< IO寫0
 
#define GPIO_OUT(GPIOx_BASE,GPIO_BitNumber)   *(__IO uint32_t *)(GPIOx_BASE+0X00)  &= ~(GPIO_MODER_MODER0 << (GPIO_BitNumber * 2));\
                                              *(__IO uint32_t *)(GPIOx_BASE+0X00) |= ((GPIO_Mode_OUT) << (GPIO_BitNumber * 2)); //!IO輸出
 
#define GPIO_IN(GPIOx_BASE,GPIO_BitNumber)    *(__IO uint32_t *)(GPIOx_BASE+0X00)  &= ~(GPIO_MODER_MODER0 << (GPIO_BitNumber * 2));\
                                              *(__IO uint32_t *)(GPIOx_BASE+0X00) |= ((GPIO_Mode_IN) << (GPIO_BitNumber * 2));  //!IO輸入
                                              
#define GPIO_READ(GPIOx_BASE,GPIO_BitNumber)  *(__IO uint32_t *)((PERIPH_BB_BASE + ((GPIOx_BASE+0x10 - PERIPH_BASE) * 32) + (GPIO_BitNumber * 4)))   //!<IO讀入

調(diào)用方法

GPIOx_BASE:GPIOE_BASE基地址,而不是GPIOE

GPIO_BitNumber:4,而不是GPIO_Pin_4

GPIO_OUT(GPIOE_BASE,4);

開源代碼:

https://github.com/strongercjd/STM32F207VCT6/tree/master/08-GPIO-bit-band

以上是“STM32有哪些不同GPIO驅(qū)動”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

本文標(biāo)題:STM32有哪些不同GPIO驅(qū)動
文章分享:http://m.kartarina.com/article28/gecgjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗搜索引擎優(yōu)化域名注冊自適應(yīng)網(wǎng)站軟件開發(fā)小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司
主站蜘蛛池模板: 精品无码AV无码免费专区| 久久久久亚洲精品无码网址| 亚洲精品高清无码视频| 亚洲精品无码专区在线在线播放| 国产a级理论片无码老男人| 无码国产色欲XXXXX视频| 无码人妻一区二区三区免费视频 | 国产成人亚洲综合无码| 日韩av无码免费播放 | 人妻在线无码一区二区三区| 东京热人妻无码人av| 久久久久久亚洲精品无码| 国产AV无码专区亚洲AV手机麻豆| 无码人妻精品一区二区三区蜜桃| 亚洲av中文无码| 性色AV无码中文AV有码VR| 亚洲日韩国产精品无码av| 中文字幕久无码免费久久 | 天堂Aⅴ无码一区二区三区| 亚洲日韩中文字幕无码一区| 无码一区二区三区在线观看| 2014AV天堂无码一区| 国产免费av片在线无码免费看| 在线观看成人无码中文av天堂| 熟妇人妻AV无码一区二区三区| 自拍中文精品无码| 黑人无码精品又粗又大又长 | 亚洲另类无码一区二区三区| 国产av永久无码天堂影院| 亚洲人成无码网WWW| 日韩AV无码精品一二三区| 亚洲av无码成人精品国产 | 寂寞少妇做spa按摩无码| 无码激情做a爰片毛片AV片| 免费无码精品黄AV电影| 无码人妻精品一区二区蜜桃| 无码中文字幕av免费放| 四虎国产精品永久在线无码| 中文字幕无码中文字幕有码| 亚洲熟妇无码av另类vr影视 | 日本精品无码一区二区三区久久久|