STM32F103學習筆記(二) 創(chuàng)建工程模板+點亮LED+蜂鳴器
搗鼓了幾天,終于點亮led了,那個欣慰啊。。。
至于建立工程模板,對于我這種小白來說確實不容易上手,搗鼓了好久,不是忘記添加.c文件,就是忘記加入頭文件的路徑(頭文件的路徑千萬要是英文)。其實模板建立好之后,只需要編寫兩個文件夾(1)USER,用來編輯主函數(shù)的。(2)HADEWARE(硬件)用來配置相關硬件的,eg:包含led.c led.h 后面要用的話,直接在這里邊調(diào)用就行了。
接下來就是led的點亮和蜂鳴器發(fā)出響聲了。
對于led,首先上個電路圖:
板子上有兩個led,DS0和DS1分別接了PB5,PE5,.
重要的是對init(初始化)的配置:
voidLED_Init(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|
RCC_APB2Periph_GPIOE,ENABLE);//使能PB,PE端口時鐘
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;//LED0-->PB.5推挽輸出
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽輸出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_5);//PB.5輸出高
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;//LED1-->PE.5推挽輸出
GPIO_Init(GPIOE,&GPIO_InitStructure);
GPIO_SetBits(GPIOE,GPIO_Pin_5);/PE.5輸出高
}
要調(diào)好GPIO_InitTypeDef結(jié)構(gòu)體中三個成員,傳遞參數(shù)進去完成初始化。
每個HADEWARE中的.c文件對應一個.h文件,再看#include "led.h",這是自己寫的頭文件
#ifndef__LED_H
#define__LED_H
#include"sys.h"
//LED端口定義
#defineLED0PBout(5)//DS0
#defineLED1PEout(5)//DS1
voidLED_Init(void);//初始化
#endif
這段代碼里面最關鍵就是 2 個宏定義:
#defineLED0PBout(5)//DS0
#defineLED1PEout(5)//DS1
這樣調(diào)用led更加方便,增加可讀性。
重要的是要將led.c加到HADEWARE這個組里邊:
然后就是主函數(shù)了,挺簡單的:
#include"led.h"
#include"delay.h"
#include"sys.h"
//ALIENTEK戰(zhàn)艦STM32開發(fā)板實驗1
144
//跑馬燈實驗
intmain(void)
{
delay_init();//延時函數(shù)初始化
LED_Init();//初始化與LED連接的硬件接口
while(1)
{LED0=0;
LED1=1;
delay_ms(300);//延時300ms
LED0=1;
LED1=0;
delay_ms(300);//延時300ms
}
}
對于蜂鳴器,電路圖沒看懂,模數(shù)電沒學過,電路也只學到11章,考了83分的渣渣,確實不知道NPN三極管怎么用,只是記住當 PB.8 輸出高電平的時候,蜂鳴器將發(fā)聲, 當 PB.8 輸出低電平的時候,蜂鳴器停止發(fā)聲。
蜂鳴器在HADEWARE中配置beep.c和beep.h和led差不多不再贅述,
#include"beep.h"
151
//初始化PB8為輸出口.并使能這個口的時鐘
//LEDIO初始化
voidBEEP_Init(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
//使能GPIOB端口時鐘
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//BEEP-->GPIOB.8端口配置
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽輸出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//速度為50MHz
GPIO_Init(GPIOB,&GPIO_InitStructure);//根據(jù)參數(shù)初始化GPIOB.8
GPIO_ResetBits(GPIOB,GPIO_Pin_8);//輸出0,關閉蜂鳴器輸出
}
注意要使能相應的時鐘端口
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
同樣,beep.h中
#define__BEEP_H
#include"sys.h"
//蜂鳴器端口定義
#defineBEEPPBout(8)//BEEP,蜂鳴器接口
voidBEEP_Init(void);//初始化
#endif
主函數(shù):
#include"sys.h"
#include"delay.h"
#include"led.h"
#include"beep.h"
//ALIENTEK戰(zhàn)艦STM32開發(fā)板實驗2
//蜂鳴器實驗
intmain(void)
{
delay_init();//延時函數(shù)初始化
LED_Init();//初始化與LED連接的硬件接口
BEEP_Init();//初始化蜂鳴器端口
while(1)
{LED0=0;
BEEP=0;
delay_ms(300);
LED0=1;
BEEP=1;
delay_ms(300);
}