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

[复制链接]
3306|42
 楼主| aizaixiyuanqian 发表于 2018-5-25 17:26 | 显示全部楼层 |阅读模式
在上节我们新建工程的基础上我们来实战一把,点亮板子上的LED。参考MB1136 原理图可以看到 NUCLEO F401一共有三颗LED

 楼主| aizaixiyuanqian 发表于 2018-5-25 17:28 | 显示全部楼层
LD1ST-Link的通讯指示灯,在我们烧录程序和调试的时候可以观察到LD1的变化。
7.png

 楼主| aizaixiyuanqian 发表于 2018-5-25 17:29 | 显示全部楼层
LD2:如下图该LED连接在PA5PB13引脚,默认情况下连接在PA5SB42通过0R电阻短接,SB29断开连接。
3.png

 楼主| aizaixiyuanqian 发表于 2018-5-25 17:29 | 显示全部楼层
LD3LD3是作为5V的供电指示灯,当外部供电或者USB供电正常时该LED正常点亮。
2.png

 楼主| aizaixiyuanqian 发表于 2018-5-25 17:30 | 显示全部楼层
在新建工程模板上,添加APP文件夹(用于存放我们以后的外设驱动文件)。
1.png

 楼主| aizaixiyuanqian 发表于 2018-5-25 17:30 | 显示全部楼层
新建LED.CLED.H文件,存放在APP文件夹中的LED文件夹中。
4.png

 楼主| aizaixiyuanqian 发表于 2018-5-25 17:31 | 显示全部楼层
keil5软件中我们新建一个分组APPLED.C添加到该分组中去。
5.png

 楼主| aizaixiyuanqian 发表于 2018-5-25 17:31 | 显示全部楼层
同时在C/C++选项卡中包含LED.H头文件,避免编译会报错。
6.png

 楼主| aizaixiyuanqian 发表于 2018-5-25 17:32 | 显示全部楼层
首先我们对LED.H进行编写程序,包括GPIO的(管脚、时钟)以及点亮和熄灭LED的宏操作,方便以后移植和快速开发。本套开发板的LD2接在PA5引脚,具体相关定义请参看以下代码。
 楼主| 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
 楼主| aizaixiyuanqian 发表于 2018-5-25 17:32 | 显示全部楼层
在LED.C文件中我们对LED的GPIO进行一些相关设置具体如下:
包括(GPIO的时钟、GPIO的引脚、输入模式与输出模式的设置、速度的设置)
 楼主| 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);
}
 楼主| aizaixiyuanqian 发表于 2018-5-25 17:35 | 显示全部楼层
在主函数中我们引用LED.H头文件,首先调用LED初始化函数,在while(1)循环中实现对LD2翻转的操作,同时加入延时函数可以更加清楚观察到LD2的变化效果。
 楼主| 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); //延时
        }
}
 楼主| aizaixiyuanqian 发表于 2018-5-25 17:38 | 显示全部楼层
编译连接后0个错误 0个警告。
8.png

 楼主| aizaixiyuanqian 发表于 2018-5-25 18:00 | 显示全部楼层
这一步我们需要设置通过ST-LINK下载,首先点击魔法棒工具。
9.png

 楼主| aizaixiyuanqian 发表于 2018-5-25 18:01 | 显示全部楼层
Debug里面的我们选择ST-LINK Debugger作为调试仿真工具,然后点击Setting
10.png

 楼主| aizaixiyuanqian 发表于 2018-5-25 18:01 | 显示全部楼层
在设置界面,只要我们板子与电脑的USB连接(需要安装驱动)即可出现以下界面,需要注意的是,我们要选择SW模式而不是JATA模式。
11.png

评论

请问需要安装什么驱动呢?  发表于 2018-7-14 14:39
 楼主| aizaixiyuanqian 发表于 2018-5-25 18:02 | 显示全部楼层
Flah Download中我们需要勾选右边三个选项,这样才能保证下载程序后被立即执行,不需要再去按开发板的复位按键。
12.png

 楼主| aizaixiyuanqian 发表于 2018-5-25 18:03 | 显示全部楼层
通过以上正确设置后,可以点击下载按钮将程序烧写到开发板中。出现Programing Done . Verify OK 表明程序已成功下载。
14.png

您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

1353

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部