cortex_m3_stm32嵌入式學習筆記(一):建立工程模板+跑馬燈實驗(IO輸出)

ARM 346瀏覽

搞了一晚上+一上午 終于算是入門了 剛剛把LED點亮。。真是費勁啊

吐槽MDK對庫函數的封裝性。。太扯了 。。所有的固件庫函數都要自己手動添加到工程里面去。。還好建好一個模板之后就不用動了(以后直接復制就行了)

首先對于工程模板里的東西,我們要搞明白哪些是需要我們自己去編寫的,而哪些是不用動的, 其實初學者應該只需要編寫兩個文件夾里面的程序:1 USER 文件夾下的主函數

2. HARDWARE (硬件) 里面的硬件設置函數?

至于建工程模板我就不贅述了,照著視頻或課本建一個備份以后用就可以了

然后就是如何點亮LED并讓它交替閃爍了

還是要看一下原理圖

? ? ? ?

可以從開發板上看到兩個LED燈分別寫了 DS0,DS1 即對應的是LED0 LED1 ,LED0 對應stm32芯片上的PA8?LED1對應stm32芯片上的PD2

接下來寫配置 IO的函數

#include "led.h"
void LED_Init(void)
{
	GPIO_InitTypeDef GPIO_ist;
	//配置LED0
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD,ENABLE); //使能PA,PD端口時鐘
	GPIO_ist.GPIO_Pin=GPIO_Pin_8;//LED0-->PA.8 端口配置
	GPIO_ist.GPIO_Mode=GPIO_Mode_Out_PP; //選擇推挽輸出模式
	GPIO_ist.GPIO_Speed=GPIO_Speed_50MHz;//IO的速度設為50MHz
	GPIO_Init(GPIOA,&GPIO_ist);//?根據參數初始化GPIOA.8
	GPIO_SetBits(GPIOA,GPIO_Pin_8);//將PA.8設置為輸出高
	
	//配置LED1
	GPIO_ist.GPIO_Pin=GPIO_Pin_2; //LED1-->PD.2 端口配置
	GPIO_Init(GPIOD,&GPIO_ist);//?根據參數初始化GPIOD.2
	GPIO_SetBits(GPIOD,GPIO_Pin_2); //將PD.2設置為輸出高
}

調好GPIO_InitTypeDef結構體中的3個成員,傳參進去設置好初始化函數,看這條語句?GPIO_SetBits(GPIOA,GPIO_Pin_8);//將PA.8設置為輸出高

再找到上圖DS0 DS1 ?,這條語句的作用就是將這兩個口的電平初始化為1,(就是說燈最開始是不亮的)

然后看到?#include "led.h"

這個頭文件是需要自己寫的。。

#ifndef _LED_H
#define _LED_H
#include "sys.h"
#define LED0 PAout(8) //PA 8
#define LED1 PDout(2) //PD 2
void LED_Init(void);
#endif

上述代碼用到了條件編譯,不難。。了解一下就行了 作用是使得在主函數中可以識別LED0 LED1 LED_Init()。。其實就是聲明一堆東西

把上面兩個文件添加工程中 HARDWARE 文件中,注意要添加"led.h" 的路徑?

最后寫主函數就簡單了

#include "led.h"
#include "sys.h"
#include "delay.h"
int main(void)
{
	delay_init();
	LED_Init();
	while(1)
	{
		LED0=0;
		LED1=1;
		delay_ms(600);
		LED0=1;
		LED1=0;
		delay_ms(600);
	}
}

"delay.h" 里面主要是延時函數

七星彩走势图2元网官网