STM32F10XX之應(yīng)用筆記-GPIO設(shè)置
ST公司為STM32系列的芯片編寫了固件庫,給我們開發(fā)帶來了很多方便;所以大家都覺得它好用,最重要的原因就是這了。但是要完全玩透它還是得去看看底層是怎么設(shè)置寄存器的,這對我們完成某個功能有更深刻的了解。
首先從設(shè)置GPIO開始,要使用一個IO口得有兩個過程:一是使能IO口組的時鐘;二是設(shè)置IO口的方向。牽扯到的寄存器有CCR_APBXENR,GPIOX_CRL,GPIOX_CRH,GPIOX_IDR,GPIOX_ODR,GPIOX_BSRR,GPIOX_BRR。ST公司已經(jīng)把這些宏定義已經(jīng)做好了,相應(yīng)的名字對應(yīng)的就是寄存器的名字。做過RAM9開發(fā)的都知道宏定義一邊都是這樣的:
#define REGXXXXX (*(volatile 數(shù)據(jù)類型*)(數(shù)據(jù)類型)0xXXXXXXXXXX))
但是呢,用STM32開發(fā)時這些在頭文件里已經(jīng)做好了(stm32f10x.h)。我就以GPIOA的Pin_0作為輸出引腳為例:
庫函數(shù):
void GPOIA_CONFIG(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //開啟GPIOA的時鐘
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
寄存器:
CCR->APB2ENR
GPIOA->CRL
void GPOIA_CONFIG(void)
{
CCR->APB2ENR |=(1<<2);//開啟GPIOA的時鐘
GPIOA->CRL &=0XFFFFFFF0;
GPIOA->CRL |=0X000000003;//Pin_0推挽輸出
}
一看都會覺得寄存的簡單;庫函數(shù)更好讀也更讓別人理解;這就仁者見仁智者見智了,我自己還是更喜歡寄存器,因為保密性要好些(庫函數(shù)只要是編過程的一眼就讀懂了),當(dāng)然是團(tuán)隊合作肯定要用庫函數(shù)咯。
評論