打印
[STM32F4]

Nucleo F401再探索——点亮NUCLEO板子上的灯

[复制链接]
2550|42
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在上节我们新建工程的基础上我们来实战一把,点亮板子上的LED。参考MB1136 原理图可以看到 NUCLEO F401一共有三颗LED

沙发
aizaixiyuanqian|  楼主 | 2018-5-25 17:28 | 只看该作者
LD1ST-Link的通讯指示灯,在我们烧录程序和调试的时候可以观察到LD1的变化。

使用特权

评论回复
板凳
aizaixiyuanqian|  楼主 | 2018-5-25 17:29 | 只看该作者
LD2:如下图该LED连接在PA5PB13引脚,默认情况下连接在PA5SB42通过0R电阻短接,SB29断开连接。

使用特权

评论回复
地板
aizaixiyuanqian|  楼主 | 2018-5-25 17:29 | 只看该作者
LD3LD3是作为5V的供电指示灯,当外部供电或者USB供电正常时该LED正常点亮。

使用特权

评论回复
5
aizaixiyuanqian|  楼主 | 2018-5-25 17:30 | 只看该作者
在新建工程模板上,添加APP文件夹(用于存放我们以后的外设驱动文件)。

使用特权

评论回复
6
aizaixiyuanqian|  楼主 | 2018-5-25 17:30 | 只看该作者
新建LED.CLED.H文件,存放在APP文件夹中的LED文件夹中。

使用特权

评论回复
7
aizaixiyuanqian|  楼主 | 2018-5-25 17:31 | 只看该作者
keil5软件中我们新建一个分组APPLED.C添加到该分组中去。

使用特权

评论回复
8
aizaixiyuanqian|  楼主 | 2018-5-25 17:31 | 只看该作者
同时在C/C++选项卡中包含LED.H头文件,避免编译会报错。

使用特权

评论回复
9
aizaixiyuanqian|  楼主 | 2018-5-25 17:32 | 只看该作者
首先我们对LED.H进行编写程序,包括GPIO的(管脚、时钟)以及点亮和熄灭LED的宏操作,方便以后移植和快速开发。本套开发板的LD2接在PA5引脚,具体相关定义请参看以下代码。

使用特权

评论回复
10
aizaixiyuanqian|  楼主 | 2018-5-25 17:32 | 只看该作者
#ifndef _LED_H_
#define _LED_H_
#include "stm32f4xx.h"

//LED引脚定义
#define LD2_PIN              GPIO_Pin_5
#define LD2_GPIO_PORT        GPIOA
#define LD2_GPIO_CLK         RCC_AHB1Periph_GPIOA

//控制LED亮灭的宏

#define ON   1
#define OFF  0


#define  LD2(a)  if (a) \
                                 GPIO_SetBits(LD2_GPIO_PORT,LD2_PIN);\
                                 else \
                                 GPIO_ResetBits(LD2_GPIO_PORT,LD2_PIN)



//直接操作寄存器控制IO
                                 
#define digitalHi(p,i) {p->BSRRL=i;}       //输出高电平
#define digitalLo(p,i) {p->BSRRH=i;}       //输出低电平
#define digitalToggle(p,i) {p->ODR ^=i;}   //电平翻转

#define LD2_TOGGLE   digitalToggle(LD2_GPIO_PORT,LD2_PIN)
#define LD2_ON     digitalHi(LD2_GPIO_PORT,LD2_PIN)
#define LD2_OFF       digitalLo(LD2_GPIO_PORT,LD2_PIN)

void LED_Init(void);

#endif

使用特权

评论回复
11
aizaixiyuanqian|  楼主 | 2018-5-25 17:32 | 只看该作者
在LED.C文件中我们对LED的GPIO进行一些相关设置具体如下:
包括(GPIO的时钟、GPIO的引脚、输入模式与输出模式的设置、速度的设置)

使用特权

评论回复
12
aizaixiyuanqian|  楼主 | 2018-5-25 17:35 | 只看该作者
//LED GPIO管脚 初始化
void LED_Init()
{
   GPIO_InitTypeDef GPIO_InitStructure;
       
         //开启GPIO相关外设时钟
         RCC_AHB1PeriphClockCmd ( LD2_GPIO_CLK, ENABLE);
         //选择要控制的引脚
         GPIO_InitStructure.GPIO_Pin = LD2_PIN;
         //设置GPIO为输出模式
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        //设置为推挽输出
         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        //设置引脚为上拉模式
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        //设置引脚速度为2MHZ
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_Init(LD2_GPIO_PORT, &GPIO_InitStructure);
}

使用特权

评论回复
13
aizaixiyuanqian|  楼主 | 2018-5-25 17:35 | 只看该作者
在主函数中我们引用LED.H头文件,首先调用LED初始化函数,在while(1)循环中实现对LD2翻转的操作,同时加入延时函数可以更加清楚观察到LD2的变化效果。

使用特权

评论回复
14
aizaixiyuanqian|  楼主 | 2018-5-25 17:35 | 只看该作者
#include "stm32f4xx.h"
#include "led.h"
// 延时函数
void Delay(u16 z)
{
  u16 x,y;
        for(x=z;x>0;x--)
            for(y=110;y>0;y--);
}

int main()
{
LED_Init();          //LED初始化
        while(1)
        {
           LD2_TOGGLE ;     //LED状态翻转
           Delay(30000); //延时
        }
}

使用特权

评论回复
15
aizaixiyuanqian|  楼主 | 2018-5-25 17:38 | 只看该作者
编译连接后0个错误 0个警告。

使用特权

评论回复
16
aizaixiyuanqian|  楼主 | 2018-5-25 18:00 | 只看该作者
这一步我们需要设置通过ST-LINK下载,首先点击魔法棒工具。

使用特权

评论回复
17
aizaixiyuanqian|  楼主 | 2018-5-25 18:01 | 只看该作者
Debug里面的我们选择ST-LINK Debugger作为调试仿真工具,然后点击Setting

使用特权

评论回复
18
aizaixiyuanqian|  楼主 | 2018-5-25 18:01 | 只看该作者
在设置界面,只要我们板子与电脑的USB连接(需要安装驱动)即可出现以下界面,需要注意的是,我们要选择SW模式而不是JATA模式。

使用特权

评论回复
评论
enderman1 2018-7-14 14:39 回复TA
请问需要安装什么驱动呢? 
19
aizaixiyuanqian|  楼主 | 2018-5-25 18:02 | 只看该作者
Flah Download中我们需要勾选右边三个选项,这样才能保证下载程序后被立即执行,不需要再去按开发板的复位按键。

使用特权

评论回复
20
aizaixiyuanqian|  楼主 | 2018-5-25 18:03 | 只看该作者
通过以上正确设置后,可以点击下载按钮将程序烧写到开发板中。出现Programing Done . Verify OK 表明程序已成功下载。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

1353

帖子

6

粉丝