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