日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)的一些理解

發布時間:2024/10/14 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)的一些理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

((GPIO_TypeDef *) GPIOA_BASE)表示將GPIOA_BASE強制轉換為指針類型的結構體,?#define?GPIOA ((GPIO_TypeDef *) GPIOA_BASE) 表示用(GPIO_TypeDef *) GPIOA_BASE代替GPIOA ,那么現在GPIOA就表示以 GPIOA_BASE為基地址的一個類型為GPIO_TypeDef結構體的一個指針,所以你程序里可以用GPIOA->CRL。

例如:

#define GPIOA ? ? ? ? ? ? ? ((GPIO_TypeDef *) GPIOA_BASE)?

typedef struct
{
? __IO uint32_t CRL;
? __IO uint32_t CRH;
? __IO uint32_t IDR;
? __IO uint32_t ODR;
? __IO uint32_t BSRR;
? __IO uint32_t BRR;
? __IO uint32_t LCKR;
} GPIO_TypeDef;
//除了定義結構體,它還把寄存器做了一個映射,映射到地址


那代碼

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)

void LED_Init(void)
{
?
?GPIO_InitTypeDef ?GPIO_InitStructure;
?
?RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE); //使能PB,PE端口時鐘

?GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //LED0-->PB.5 端口配置
?GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;? //推挽輸出
?GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; ?//IO口速度為50MHz
?GPIO_Init(GPIOA, &GPIO_InitStructure); //根據設定參數初始化GPIOB.5
?GPIO_SetBits(GPIOA,GPIO_Pin_8); //PB.5 輸出高


?GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; ? ? //LED1-->PE.5 端口配置, 推挽輸出
?GPIO_Init(GPIOD, &GPIO_InitStructure); ? //推挽輸出 ,IO口速度為50MHz
?GPIO_SetBits(GPIOD,GPIO_Pin_2);? //PE.5 輸出高?
}


中GPIOA就是一個指向結構的指針,也就是首地址。

總結

以上是生活随笔為你收集整理的void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)的一些理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。