中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

STM32有哪些不同GPIO驅動

發布時間:2021-12-27 11:25:47 來源:億速云 閱讀:183 作者:小新 欄目:互聯網科技

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

1 庫函數版

最常用的版本,使用ST標準外設庫

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標準外設庫拷貝出來,可以簡化一些操作

/********使用寄存器---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設為輸出
#define TP_DATA_IN()    TP_IN()  //將IO設為輸入
#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驅動代碼

*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讀入

調用方法

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驅動”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

呼和浩特市| 庄河市| 奉新县| 祁门县| 土默特右旗| 萝北县| 岳普湖县| 昂仁县| 凤台县| 中超| 岑巩县| 连南| 淅川县| 贵德县| 阜阳市| 钟祥市| 铜川市| 墨玉县| 扎鲁特旗| 阳谷县| 修武县| 新余市| 闽清县| 鄄城县| 长葛市| 同江市| 万全县| 阿拉善右旗| 乌兰浩特市| 固阳县| 福贡县| 开封县| 临泽县| 金溪县| 伽师县| 弋阳县| 永年县| 上犹县| 资阳市| 巴林右旗| 汉川市|