硬件檢測的工作很快完成了。接下來是開始調(diào)試一些程序了,對于調(diào)試一個新的MCU來說,最簡單的也是最重要的自然是能夠控制GPIO了。
為了對MCU有個直觀的了解,這里給出模塊框圖
1、GPIO模式的相關(guān)介紹:
STM32的所有GPIO都可以設(shè)置成8中模式,主要的設(shè)置可以參考固件庫的typedefine
/* Configuration Mode enumeration --------------------------------------------*/
typedef enum
{
GPIO_Mode_AIN = 0x0,//AD輸入模式
GPIO_Mode_IN_FLOATING = 0x04,//普通輸入模式(浮空)
GPIO_Mode_IPD = 0x28,//帶下拉輸入模式
GPIO_Mode_IPU = 0x48,//帶上拉輸入模式
GPIO_Mode_Out_OD = 0x14,//開漏輸出模式
GPIO_Mode_Out_PP = 0x10,//推挽輸出模式
GPIO_Mode_AF_OD = 0x1C,//復用功能的開漏輸出模式
GPIO_Mode_AF_PP = 0x18//復用功能的推挽輸出模式
}GPIOMode_TypeDef;
2、GPIO初始化
通過系統(tǒng)模塊圖可以發(fā)現(xiàn),所有的GPIO都處于APB2通道上的。所以要使用GPIO必須對APB2進行的相關(guān)設(shè)置。主要設(shè)置如下:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能APB2中GPIOC的時鐘
然后就可以進行GPIO的初始化了,這里引用了一個典型例程來解釋。
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//聲明一個GPIO_InitTypeDef
/* Enable the USART2 Pins Software Remapping */
GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);//重映射管腳
/* Configure USART1 Tx (PA.09) as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//指定初始化的引腳位
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//指定初始化GPIO的速度
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//設(shè)置GPIO的模式
GPIO_Init(GPIOA, &GPIO_InitStructure);//利用GPIO_InitStructure來初始化GPIO
}
從上面的內(nèi)容可以看出。主要的初始化步驟其實有兩個。
一個是填寫GPIO_InitStructure中的內(nèi)容
/* GPIO Init structure definition */
typedef struct
{
u16 GPIO_Pin;
GPIOSpeed_TypeDef GPIO_Speed;
GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef;
然后是利用GPIO_Init(。。。)函數(shù)來初始化指定的GPIO。
最后可以使用
GPIO_SetBits(GPIOC, GPIO_Pin_0 | GPIO_Pin_1);
GPIO_ResetBits(GPIOC, GPIO_Pin_2 | GPIO_Pin_3);
來使GPIO置1或置0。