嵌入式开发学习之STM32F407点亮LED及J-Link下载(二)

嵌入式开发学习之STM32F407点亮LED及J-Link下载(二)

  • 开发涉及工具
  • 控制端口配置
    • 端口的设定与确认
    • 端口配置方法
    • 实现点亮LED
    • 程序下载与仿真

有工程实例,链接在最底部。

开发涉及工具

开发环境(IDE):IAR-ARM8.32.4
开发板:STM32_F4VE_V2.0
下载器:J-Link
固件库版本:STM32F4xx_DSP_StdPeriph_Lib_V1.8.0

控制端口配置

端口的设定与确认

首先确认好LED是连接在单片机的哪一个端口,例如我使用的开发板上面设计有LED,那么我们就从其原理图上查找端口连接方式,如下图所示,可得的信息有:
1.此开发板有两颗可控制LED
2.D2_LED是连接在PA6上。D3_LED连接在PA7上。
3.两颗LED共阳极连接,接3.3V,控制信号为低电平时才点亮。
在这里插入图片描述

端口配置方法

然后根据已得信息,我们查找固件库中关于GPIO配置的例程,我使用的固件库版本在STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Examples\GPIO\GPIO_IOToggle路径中,点开其main.c和main.h文件,

在这里插入图片描述

在这里插入图片描述
通过简单分析可整理成如下GPIO配置步骤:
1.定义GPIO配置的结构体变量;
2.要开启相应GPIO端口的时钟;
3.指定端口的PIN脚;
4.配置引脚的模式;
5.配置引脚的频率;
6.配置引脚的输出方式;
7.配置引脚是上拉还是下拉;
8.然后将所有配置初始化给引脚;
整合代码如下:

void LED_IOConf(void)
{GPIO_InitTypeDef GPIO_InitStructure;//新建一个配置GPIO的结构体变量RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//GPIOA挂载在AHB1总线上,在这里开启它的时钟GPIO_InitStructure.GPIO_Pin           = GPIO_Pin_6;//确认好LED是连接在哪一个引脚GPIO_InitStructure.GPIO_Mode          = GPIO_Mode_OUT;//控制LED灯引脚是输出模式GPIO_InitStructure.GPIO_Speed         = GPIO_Speed_100MHz;//这个是引脚的输出频率配置,没有特别的要求一般选最高100MGPIO_InitStructure.GPIO_OType         = GPIO_OType_PP;//端口用作控制信号输出一般情况都设置为推挽输出GPIO_InitStructure.GPIO_PuPd          = GPIO_PuPd_UP;//配置引脚是上拉还是下拉GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化引脚配置
}

实现点亮LED

从前面的分析我们已知,现在给LED一个低电平就会让它点亮,那么如何使端口输出低电平呢?
我们可以从stm32f4xx.gpio.h里面找到相应的函数,封装到自己的函数中然后调用,方式如下:

void LED_OFF(void)
{GPIO_SetBits(GPIOA, GPIO_Pin_6);//引脚输出高电平,LED不亮
}
void LED_ON(void)
{GPIO_ResetBits(GPIOA, GPIO_Pin_6);//引脚输出低电平,LED亮
}

点亮我们则调用void LED_ON(void),例如:

void main()
{LED_IOConf();//调用配置函数LED_OFF();//让LED的最初状态为不亮while(1){LED_ON();//点亮LED}
}

我们也可以让LED闪烁起来,加上延时功能,简单的延时函数可以这样写:

void Delay_us(uint16_t xus)
{uint16_t i = 0;for(i = xus;i > 0;i --){__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();}
}void Delay_ms(uint16_t xms)
{uint16_t i = 0;for(i = xms;i > 0;i --){Delay_us(1000);}
}void Delay_s(uint16_t xs)
{uint16_t i = 0;for(i = xs;i > 0;i --){Delay_ms(1000);}
}

在主函数中如下方式调用:

void main()
{LED_IOConf();//调用配置函数LED_OFF();//让LED的最初状态为不亮while(1){LED_ON();//点亮LEDDelay_ms(500);//等待500毫秒LED_OFF();//熄灭LEDDelay_ms(500);//等待500毫秒}
}

程序下载与仿真

1.首先在工程名上鼠标右键选择Options
在这里插入图片描述
2.点击General Optons -->Target–>Dervice
在这里插入图片描述
3.点击后面的小控件选择好自己使用的芯片;
在这里插入图片描述
在这里插入图片描述
4.再点击左侧Debugger–>Setup,在Driver的下拉框中选择仿真器,我使用的J-Link所以选择它,点击OK;
在这里插入图片描述
5.在菜单栏选择绿色的控件点击后等待程序下载和调试界面加载
在这里插入图片描述
6.加载完成后,可点击如下控件进行逐句调试,直接运行就点旁边白色控件,关闭调试点击红色X号控件;
在这里插入图片描述
工程实例链接:https://download.csdn.net/download/qq_45100839/88423150

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/161529.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣每日一题46:全排列

题目描述: 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2: …

Tuxera NTFS2024最新永久版下载和安装

要使用Tuxera NTFS for Mac,你需要先下载和安装Tuxera NTFS for Mac驱动器,然后按照以下步骤操作: 1、下载和安装Tuxera NTFS for Mac 免费下载Tuxera NTFS for Mac驱动器的最新版本。下载完成后,双击DMG文件并按照提示安装即可…

云计算:shell脚本

shell脚本,会极大减少重复性工作,缩短很大时间。 脚本每个人都可以不一样,只要实现就可以。 注意:要多思考,把思路锻炼好。以后就可以写各种程序。 shell语言 学完shell之后,对Linux理解更深刻&#xff…

IDEA 修改插件安装位置

不说假话,一定要看到最后,不然你以为我为什么要自己总结!!! IDEA 修改插件安装位置 前言步骤 前言 IDEA 默认的配置文件均安装在C盘,使用时间长会生成很多文件,这些文件会占用挤兑C盘空间&…

如何使用前端模块化开发?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

vue中引入jquery解决跨域问题

1、vue 工程文件 package.json 中 引入 “dependencies”: { “jquery”:“^2.2.4” }, 2、控制台执行命令,当前工程文件夹下 cnpm install 3、修改的vue文件中 加入 import $ from ‘jquery’ 4、调用 ajax请求 $.ajax({url:http://192.168.0.10:9099/strutsJspA…

Vue Router - 路由的使用、两种切换方式、两种传参方式、嵌套方式

目录 一、Vue Router 1.1、下载 1.2、基本使用 a)引入 vue-router.js(注意:要在 Vue.js 之后引入). b)创建好路由规则 c)注册到 Vue 实例中 d)展示路由组件 1.3、切换路由的两种方式 1.…

会议OA小程序首页布局

目录 一. Flex布局介绍 1.1 什么是Flex布局 1.2 基本概念 1.3 Flex属性 二. 会议OA首页轮播图的实现 配置 Mock工具 swiper 效果展示 三. 会议OA首页会议信息布局 index.js index.wxml index.wxss 首页整体效果展示 一. Flex布局介绍 布局的传统解决方案&#x…

简单的对称加密

异或 异或算法的好处便是数A和数B异或后,把结果再和数A异或便可得到B,或者和数B异或可重新得到数据A。利用异或的这个特性可简单实现数据的加密和解密算法。 恺撒密码 恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明…

MATLAB | 对随机信号进行统计分析,绘制频次直方图、频率分布图,与理论概率密度进行比较

一、问题描述 对于一个随机信号,我们可以通过统计手段,得到其的频次分布图(直方图),并由此计算出它的频率分布图。当观察次数区域无穷大时,频率分布图近似于概率密度函数。 下面我们以稳定分布的随机变量为…

互联网Java工程师面试题·Java 总结篇·第五弹

目录 47、Java 语言如何进行异常处理,关键字:throws、throw、try、catch、finally 分别如何使用? 48、运行时异常与受检异常有何异同? 49、列出一些你常见的运行时异常? 50、阐述 final、finally、finalize 的区别…

在 IDEA 中的各种调试技巧,轻松定位 Bug(超级全面)

在现在的开发中,我们经常采用Debug来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化。通常我们也可以启用Debug模式来跟踪代码的运行流程去学习三方框架的…

Orleans的成员管理和故障检测故障检测

Orleans的成员管理和故障检测故障检测 简介 Orleans框架是一个基于.NET平台的开源分布式系统框架,用于开发可扩展,高可用,高性能的云服务应用程序。它采用了Actor模型,将分布式系统中的各个节点抽象成为Actor,使得开…

蓝桥杯每日一题2023.10.17

迷宫 - 蓝桥云课 (lanqiao.cn) 题目描述 样例: 01010101001011001001010110010110100100001000101010 00001000100000101010010000100000001001100110100101 01111011010010001000001101001011100011000000010000 0100000000101010001101000010100000101010101100…

nginx正反向代理,负载均衡

Nginx 正向代理,反向代理 ,负载均衡 Nginx有两种代理协议 七层代理(http协议) 四层代理(tcp/udp流量转发) 四层代理七层代理概念 四层代理 四层代理:基于tcp/ip协议层的转发代理方式&#…

LabVIEW建立生产者消费者

LabVIEW建立生产者消费者 生产者/消费者设计模式由并行循环组成,这些循环分为两类:生产者循环和消费者循环。生产者循环和消费者循环间的通信可以使用队列或通道连线来实现。 队列 LabVIEW内置的队列操作VI可在函数选板>>数据通信>>队列操…

python每日一练(9)

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

小程序框架

目录 一.什么是小程序框架 二.视图层 先建立四个包 数据绑定 条件渲染 ​编辑 使用模板 事件系统 所有a.js 输出结果 ​编辑 三.跳转 a页面跳b页面 ​编辑 a页面跳c页面 测试结果 四.生命周期 一级跳一级 一级跳二级 二级跳二级 页面隔代跳转 一.什么是小程…

Flink 的集群资源管理

集群资源管理 一、ResourceManager 概述 1、ResourceManager 作为统一的集群资源管理器,用于管理整个集群的计算资源,包括 CPU资源、内存资源等。 2、ResourceManager 负责向集群资源管理器申请容器资源启动TaskManager实例,并对TaskManag…

安装Elasticsearch步骤(包含遇到的问题及解决方案)

注:笔者是在centos云服务器环境下安装的Elasticsearch 目录 1.安装前准备 2.下载Elasticsearch 3.启动Elasticsearch 非常容易出问题 第一次运行时,可能出现如下错误: 一、内存不足原因启动失败 二、使用root用户启动问题 三、启动ES自…