cortex_m3_stm32嵌入式学习笔记(一):建立工程模板+跑马灯实验(IO输出)

ARM 339浏览

搞了一晚上+一上午 终于算是入门了 刚刚把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" 里面主要是延时函数