STM32F103RCT6第一個程序——跑馬燈程序

下面簡單介紹下跑馬燈程序主要需要配置的方面:

1. 配置GPIO模式

CRL和CRH寄存器用於配置STM32的IO口的模式和速率;
GPIO有8種工作模式:
1、輸入浮空
2、輸入上拉
3、輸入下拉
4、模擬輸入
5、開漏輸出
6、推輓輸出
7、推輓式複用功能
8、開漏複用功能
對應代碼如下:

typedef enum
{
  GPIO_Mode_AIN=0x0,  模擬輸入
  GPIO_Mode_IN_FLOATING=0x4,  浮空輸入
  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=0x0x18  複用推輓
}GPIOMode_TypeDef;

配置IO口的速率,定義IO的速率如下:

typedef enum
{
  GPIO_Speed_10MHz=1,
  GPIO_Speed_2MHz,
  GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;

下面再來看看如何定義配置速率、模式和引腳的結構體的,

typedef struct
{
  uint 16_t GPIO_Pin;
  GPIOSpeed_Typedef GPIO_Speed;
  GPIOMode_Typedef GPIO_Mode;
}GPIO_InitTypeDef;

另外:

GPIO_InitTypeDef  GPIO_InitStructure

上面代碼語句表示的意思是:定義結構體變量GPIO_InitStructure;類似於int a的意思;GPIO_InitTypeDef可以理解爲類似於int,GPIO_InitStructure可理解爲類似於a的意思;

下面舉例說明初始化PA8和PD2,代碼如下:

void LED_Init(void)
{
   GPIO_InitTypeDef GPIO_InitStructure
 RCC_APB2PeriphClockCmd(RCC_APB2_Periph_GPIOA|RCC_APB2_Periph_GPIOD,ENABLE);
 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50Hz;
 GPIO_Init(GPIOA,&GPIO_InitStructure);
 GPIO_SetBits(GPIOA,GPIO_Pin_8);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
GPIO_Init(GPIOD,&GPIO_InitStructure);
 GPIO_SetBits(GPIOD,GPIO_Pin_2); 
}

另外,設置PA8口爲1,可以用如下語句:
GPIO_SetBits(GPIOA,GPIO_Pin_8);
若設置PA8位0,可以用如下語句:
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
最後就是在主函數main.c裏面設置LED0和LED1的狀態,然後翻轉,實現小燈的交替閃爍,程序如下:

int main(void)
{
 delay_init();
 LED_Init();
 while(1)
 {
 LED0=0;
 LED1=1;
 delay_ms(300);
 LED0=1;
 LED1=0;
 delay_ms(300);
 }
}

今天還學到了:在定義結構體時,裏面的成員變量之間是分號;二定義枚舉類型時,裏面的成員變量之間用逗號分開;
另:int main(void)中,第一個int表示主函數的返回類型時整型,括號中的void表示形參是void;
2. 如果用戶需要添加或者刪除.h文件,但是一定要注意在頭文件FWLib下的stm32f10x_conf.h 文件中註釋掉刪除的源文件對應的頭文件;

3. 遺留問題

以後如果有時間的話,把GPIO的8種工作模式的各個含義整理一下,8種工作模式分別代表什麼意思,在哪種情況下用哪種模式,都好好再整理下;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章