這篇文章主要介紹STM32有哪些不同GPIO驅(qū)動(dòng),文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的興安盟網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
最常用的版本,使用ST標(biāo)準(zhǔn)外設(shè)庫(kù)
void Led_Key_Init(void) { GPIO_InitTypeDef GPIO_Init_s; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);//使能時(shí)鐘 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
寄存器版其實(shí)就是把ST標(biāo)準(zhǔn)外設(shè)庫(kù)拷貝出來(lái),可以簡(jiǎn)化一些操作
/********使用寄存器---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) //!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
基于位段的,操作方便
/*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 //!將上述整理為通用GPIO驅(qū)動(dòng)代碼
*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))) //!調(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ū)動(dòng)”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
當(dāng)前題目:STM32有哪些不同GPIO驅(qū)動(dòng)
文章位置:http://weahome.cn/article/gecgjp.html