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