学习目标:
完成跑马灯实验
学习内容:
1,硬件原理
用到的硬件只有 LED(DS0 和 DS1)。其电路在 ALIENTEK MiniSTM32 开发板上默认 是已经连接好了的。DS0 接 PA8,DS1 接 PD2。所以在硬件上不需要动任何东西。其连接原理图如图所示
2,软件设计
跑马灯实验我们主要用到的固件库文件是:
新建一个 HARDWARE 的文 件夹,用来存储以后与硬件相关的代码,然后在 HARDWARE 文件夹下新建一个 LED 文件夹, 用来存放与 LED 相关的代码。
然后我们打开 USER 文件夹下的 LED.uvprojx 工程(如果是使用的上面新建的工程模板,那 么就是 Template. uvprojx,大家可以将其重命名为 LED. uvprojx),按 按钮新建一个文件,然后保存在 HARDWARE->LED 文件夹下面,保存为 led.c。在该文件中输入如下代码:
此段代码是将PA8 和 PD2 配置为为推挽输出模式。
#include "led.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE); //使能PA,PD端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //LED0-->PA.8 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化GPIOA.8
GPIO_SetBits(GPIOA,GPIO_Pin_8); //PA.8 输出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //LED1-->PD.2 端口配置, 推挽输出
GPIO_Init(GPIOD, &GPIO_InitStructure); //推挽输出 ,IO口速度为50MHz
GPIO_SetBits(GPIOD,GPIO_Pin_2); //PD.2 输出高
}
按同样的方法,新建一个 led.h 文件,也保存在 LED 文件夹下面。输入以下代码
#ifndef __LED_H
#define __LED_H
#include "sys.h"
//LED 端口定义
#define LED0 PAout(8) // PA8
#define LED1 PDout(2) // PD2
void LED_Init(void);//初始化
#endif
不要忘了将led.c头文件的路径加入到工程中
在main函数中输入以下代码
#include "led.h"
#include "delay.h"
#include "sys.h"
//ALIENTEK miniSTM32 开发板实验 1
//跑马灯实验
int main(void)
{
delay_init(); //延时函数初始化
LED_Init(); //初始化与 LED 连接的硬件接口
while(1)
{ LED0=0;
LED1=1;
delay_ms(300); //延时 300ms
LED0=1;
LED1=0;
delay_ms(300); //延时 300ms
}
}
最后编译工程
一个基于库函数的跑马灯实验就结束了