【正点原子STM32探索者】CubeMX+Keil开发环境搭建

文章目录

    • 一、简单开箱
    • 二、资料下载
    • 三、环境搭建
      • 3.1 安装Keil MDK
      • 3.2 激活Keil MDK
      • 3.3 安装STM32CubeMX
      • 3.4 安装STM32F4系列MCU的Keil支持包
    • 四、GPIO点灯
      • 4.1 查阅开发板原理图
      • 4.2 创建STM32CubeMX项目
      • 4.3 配置系统时钟和引脚功能
      • 4.4 生成Keil项目
      • 4.5 打开Keil项目
      • 4.6 编译Keil项目
      • 4.7 编写点灯代码
      • 4.8 准备开发板和调试器
      • 4.9 修改Keil项目的调试设置
      • 4.10 下载程序到开发板
    • 五、参考链接

本文主要分为三部分,第一部分介绍正点原子STM32探索者开发板外观和配套资料如何下载,第二部分介绍如何搭建CubeMX+Keil开发环境,第三部分介绍如何使用CubeMX和Keil一步步创建出一个点亮LED灯的项目。搭建开发环境部分,包括安装Keil MDK、安装STM32 CubeMX、安装STM32F4系列MCU的Keil支持包。创建项目部分,包括查看原理图、创建STM32 CubeMX项目、配置系统时钟和引脚功能、生成Keil项目、编写点灯代码、修改调试器设置、下载程序到开发板等非常详细的操作步骤,零基础小白也可以顺利上手。

一、简单开箱

感谢电子发烧友平台组织本次试用活动,也感谢广州市星翼电子科技有限公司为我们提供的正点原子STM32探索者V3开发板

正点原子开发板的做工还是非常扎实的,所以这里还是贴两张实拍图作一个简单的开箱。

拆开快递纸箱子之后,可以看到正点原子开发板的黑色包装盒子,非常大气:

探索者V3包装盒正面

打卡包装盒,可以看到开发板和一个白色纸盒(12V电源适配器):

探索者V3包装盒打开

包装盒内除了开发板12V电源适配器外,还有几个配件位于固定模具下面:

  • 一根USB Type-C数据线;
  • 一个红外遥控器;
  • 两根杜邦线;

打开泡沫袋,可以看到开发板正面,非常精美:

探索者V3开发板正面

开发板正反两面都装有透明亚克力,这样既可以保护板上的元件不易受损,也让开发板看起来更精致、美观,同时还可以防尘。

可以看到主控芯片的型号是——STM32F407ZGT6。

二、资料下载

正点原子官网提供了正点原子STM32探索者V3开发板配套资料,网页链接: http://www.openedv.com/docs/boards/stm32/zdyz_stm32f407_explorerV3.html

比较重要的是:

  • 开发板资料A盘
    • 链接: https://pan.baidu.com/s/1C5Yx-lwa_Dmn8UwgSz8YTw
    • 提取码:rqn5

其中,原理图、硬件资料是必须下载的,其他文档资料可按需下载。

三、环境搭建

接下来是搭建 STM32CubeMX + Keil 开发环境,基本上也没啥难度。

3.1 安装Keil MDK

Keil产品下载页面: https://www.keil.com/download/product/

单击“MDK-ARM”,进入MDK最新版下载页面:https://www.keil.com/demo/eval/arm.htm

当前最新版5.38a本,下载链接: https://armkeil.blob.core.windows.net/eval/MDK538a.EXE

PS: 国内下载速度较慢,可以用某雷加速下载。

3.2 激活Keil MDK

KeyGen程序(可以生成2032年的,亲测有效): https://pan.baidu.com/s/1oZPXu8OkkZ2EXuePwGbu0A?pwd=keil

下载完成后,解压开keil_keygen_2032。

Keil MDK安装好了之后,打开Keil uVision5。通过 File→License Management菜单,打开License Management界面。在License Management界面中,复制CID。

打开keil_keygen_2032.exe,粘贴CID,Target选择ARM,点Generate生成License ID Code(LIC)。将生成的LIC复制到Keil的License Management界面,粘贴到“New License ID Code”文本框中,点”Add LIC”即可激活Keil。

3.3 安装STM32CubeMX

首先需要下载STM32CubeMX。

STM32CubeMX下载页面:https://www.st.com/zh/development-tools/stm32cubemx.html

需要登录ST账号之后才能下载,如果没有ST账号,则需要先注册ST账号。

安装STM32CubeMX没啥难度,按照安装向导,一路下一部就好了。

3.4 安装STM32F4系列MCU的Keil支持包

Keil MDK 官方提供了STM32F4系列MCU支持包,下载页面:https://www.keil.com/dd2/Pack/

PS:此页面上厂商和产品比较多,可以使用Ctrl+F在网页上快速查找:“STM32F4”

STM32F4系列MCU的Keil MDK支持包下载链接为: https://keilpack.azureedge.net/pack/Keil.STM32F4xx_DFP.2.17.0.pack

下载完成后,如果你已经成功安装了Keil,则直接双击pack文件,按照向导提示即可安装该支持包。

安装好Keil MDK、STM32CubeMX和STM32F4系列MCU的Keil支持包,STM32CubeMX+Keil开发环境就搭建完成了。

四、GPIO点灯

接下来就是使用STM32CubeMX+Keil开发环境进行点灯了,这里建议另外配备一个硬件调试器,CMSIS-DAP、DAPLink、JLink或STLink均可。

4.1 查阅开发板原理图

解压网盘资料的**【正点原子】探索者STM32F407开发板V3 资料盘(A盘)\3,原理图.zip** 文件,其中的 Explorer STM32F4_V3.2_SCH.pdf 文件即为开发板原理图。

点灯之前,我们需要在开发板原理图上找到LED灯相关的部分。

探索者V3开发板原理图LED部分

可以看到:

  • LED0连接在PF9引脚,低电平点亮;
  • LED1连接在PF10引脚,低电平点亮;

4.2 创建STM32CubeMX项目

打开STM32CubeMX,界面如下图:

STM32CubeMX-start

点击New Project下方的“Access to MCU Selector”,弹出MCU/MPU选择界面,如下图:

STM32CubeMX New Project

在左上方的Commercial Part Number处输入主控芯片型号——STM32F407ZGT6 后,鼠标选中右下角的STM32F407ZGT6,界面如下图:

STM32CubeMX Start Project

此时,右上角的Start Project按钮从灰色变为了蓝色(可以点击的状态),点击Start Project开始STM32CubeMX项目:

STM32CubeMX Pinout & Configuration

此时,STM32CubeMX项目已创建成功,按Ctrl+S,选择合适的路径,可以保存项目,例如我选择的目录为D:\Hardware\ST\ExplorerV3_STM32F407\Elecfans_01\Blinky,保存到的文件名为Blinky.ioc。

4.3 配置系统时钟和引脚功能

接下来在STM32CubeMX中配置系统时钟源和LED引脚功能。

首先,设置系统时钟源。具体操作为,展开左侧“System Core”菜单,选中“RCC”,

STM32CubeMX RCC 设置

修改中间的RCC Mode and Configuration配置:

  • High Speed Clock 修改为 “Crystal/Cemaric Resonator”
  • Low Speed Clock 修改为 “Crystal/Cemaric Resonator”

即两个时钟源都设置为外部晶振,响应的,右侧引脚视图中四个引脚由灰色变为了绿色,表示已经被设定了功能。

Ctrl+S保存。

接着,设置系统时钟配置

切换到Clock Configuration标签页,HCLK值输入100,回车,CubeMX将会自动计算相关参数,如下图所示:

STM32CubeMX Clock Configuration

Ctrl+S保存。

最后,设置LED引脚功能

切回到Pinout&Configuration标签页,先找到PF9,下拉选择引脚功能为GPIO_Output,如下图所示:

STM32CubeMX设置引脚功能

再将鼠标移动到PF9上,右键点击,如下图所示:

STM32CubeMX设置引脚标签选择Enter User Label,输入LED0(和原理图中的标号对应);

类似的,将PF10设置为GPIO_Output功能,并为其设置User Label为LED1,设置完成后,如下图所示:

STM32CubeMX设置引脚便签后

Ctrl+S保存。

4.4 生成Keil项目

接下来,使用STM32CubeMX生成Keil项目。

首先,STM32CubeMX切换到Project Manager标签页,然后将Project -> Toolchain/IDE 设置为MDK-ARM,如下图所示:

STM32CubeMX Project Manager

接着,左侧点击Code Generator,如下图所示:

image-20230507223418835

图中,已进行了如下设置:

  • STM32Cube MCU packages and embedded software packs,选择Copy only necessary library files,即只拷贝必要的文件,默认是第一个拷贝所有库文件到项目中;
  • Generated files,选择Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral,即每个外设的初始化生成独立的.c/.h文件,默认没有选择这个选项,各个外设初始化代码也会在main.c里面;

继续Ctrl+S保存。

最后,点击右上角的Generate Code,就会开始生成代码;代码生成完成后,会弹出提示框,告诉你代码已经生成了,如下图所示:

image-20230507224108198

这里点击Open Folder即可打开文件夹,可以查看到生成目录及其文件:

image-20230507224358529

4.5 打开Keil项目

打开其中的MDK-ARM目录,可以看到如下文件:

image-20230507224504225

其中的Blinky.uvprojx即为Keil的项目文件。

双击打开Blinky.uvprojx,如果已经安装了Keil,将会使用Keil打开项目,如下图所示:

image-20230507224730774

左侧Project视图中,可以看到整个项目的文件结构。

4.6 编译Keil项目

点击Keil的Build图标,或者按F7快捷键,将会开始编译:

image-20230507232515041

由于我安装的Keil版本比较新,这里直接编译会报错,如下图所示:

image-20230507224943091

报错说没有ARM-Compiler Version 5。

【解决方法】切换默认编译器,具体操作为:

  1. 鼠标右击Project视图中的Blinky目录,选择“Options for Target - Blinky”,弹出菜单,如下图所示:

    image-20230507225226808

  2. 在弹出的Options for Target - Blinky界面中,下拉ARM Compiler,选择Use default compiler version 6,即使用默认的版本6编译器;

  3. 点击底部的OK,确认。

完成上述步骤后,再次点击编译按钮,将会可以正常编译,此时Build Output输出如下:

image-20230507225449422

截至到这里,Keil项目中的所有代码都是STM32CubeMX自动生成的,可以正常编译通过,说明我们的开发环境搭建正常没有问题。

4.7 编写点灯代码

接下来在Keil中,添加点灯代码。

打开main.c文件,找到main函数中的while(1)循环,添加如下3行代码行:

		HAL_Delay(1000);
		HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
		HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);

如下图所示:

image-20230507231606951

Ctrl+S保存;

再次编译,可以编译通过,则表示代码没有语法错误。

4.8 准备开发板和调试器

接下来进入压轴戏,下载程序到我们的正点原子STM32探索者V3开发板

开始之前,首先为连接开发板连接电源和调试器:

  • 电源,可以使用12V电源适配器查到DC_IN口(适配器插在220V市电上),也可以使用USB Type-C线插到USB_UART口(另一端连接到PC);
  • 调试器,我这里使用的是JLINK调试器,连接在板子的JTAG口上(另一端连接到PC);

4.9 修改Keil项目的调试设置

完成上述硬件连接后,还需要修改Keil项目的调试设置,具体操作如下(这里以JLink为例):

  1. 鼠标右击Project视图中的Blinky目录,选择“Options for Target - Blinky”,弹出菜单,如下图所示:

    image-20230507230535396

  2. 在弹出的Options for Target - Blinky界面中,切换到Debug标签页面,如下图所示:

    image-20230507230626523

  3. Use右边的下拉,选择J-LINK/J-TRACE Cortex,然后点击右侧的Settings,弹出Cortex JLink/JTrace Target Driver Setup界面,如下图所示:

    image-20230507230812222

    这里看到成功识别了 ARM CoreSight JTAG-DP,说明JLINK调试器已经成功识别到主控芯片了。

  4. 点击界面中的Auto Clk,可以自动选择最佳速度,弹框如下,点击确定即可:

    image-20230507231111015

  5. 切换到Flash Download标签页,勾选Reset and Run,便于调试,如下图所示:

    image-20230507231213195

  6. 最后点击确定,回到Options for Target - Blinky界面,点击OK,保存设置;

4.10 下载程序到开发板

完成前面的一些列操作之后,就可以点灯了。

PS:虽然,这些东西对于我们这些玩板子的发烧友来说非常简单,对于新手小白还是有点繁琐的,这是我为什么要详细记录下来的原因。

点击Keil中的下载按钮,或者F8快捷键,将会开始下载,如下图:

image-20230507232443178

下载完成后,Build Output可以看到成功的提示:

image-20230507232701961

并且,可以看到开发板上的LED灯闪烁了:

五、参考链接

  1. 正点原子资料下载中心 STM32F407探索者开发板V3: http://www.openedv.com/docs/boards/stm32/zdyz_stm32f407_explorerV3.html
  2. STM32CubeMX下载页面: https://www.st.com/zh/development-tools/stm32cubemx.html
  3. STM32F4系列MCU的Keil MDK支持包: https://keilpack.azureedge.net/pack/Keil.STM32F4xx_DFP.2.17.0.pack

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

K8s的kubeadm方式部署集群实例

目录 一、准备环境 主机清单 修改主机名 设置防火墙、selinux状态 主机名解析 固定ip 重启网卡 同步时间 关闭swap分区 二、获取镜像 三、安装docker 四、配置kubeadm源 安装依赖包及常用插件 1.配置kubeadm源,安装对应版本 2.加载相关ipvs模块 3.配…

Day17:开发流程、开发社区首页、项目的调试、版本控制

开发流程 一次请求过程 先开发DAO,再开发service,再开发controller 开发社区首页的分布实现 显示前10个帖子 创建帖子数据表 CREATE TABLE discuss_post (id int NOT NULL AUTO_INCREMENT,user_id varchar(45) DEFAULT NULL,title varchar(100) DEF…

使用Java的等待/通知机制实现一个简单的阻塞队列

Java的等待/通知机制 Java的等待通知机制是多线程间进行通信的一种方式。 有三个重要的方法:wait(),notify() 和以及notifyAll() wait():该方法用于让当前线程(即调用该方法的线程)进入等待状态并且释放掉该对象上的…

SpringBoot中配置nacos

SpringBoot中配置nacos 在SpringBoot中使用nacos一定要注意name&#xff0c;使用openfeign特别要注意这个点。 spring:application:name: item-service需要的依赖包 config需要引入的包 <dependency><groupId>com.alibaba.cloud</groupId><artifactId…

搜索引擎:引擎霸屏推广的未来趋势解读-华媒舍

1. 引擎霸屏推广 引擎霸屏推广是一种广告推广策略&#xff0c;通过借助搜索引擎的广告服务&#xff0c;让广告展示在用户搜索关键词时的首页位置&#xff0c;以吸引潜在客户点击进入宣传页面。这种推广方式具有精准定位和较高的曝光率&#xff0c;对于产品推广和品牌塑造非常有…

IT驻场外包能提供哪些类型的服务?

随着信息技术的飞速发展&#xff0c;IT驻场外包作为一种高效的企业服务模式&#xff0c;正逐渐成为企业提升效率和削减成本的首选。这种外包形式将专业的IT人员直接派驻到客户现场&#xff0c;为企业提供全方位的技术支持和服务。本文将深入研究IT驻场外包所能提供的多种服务类…

51单片机基础篇系列-超声波测距

&#x1f308;个人主页&#xff1a;会编辑的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” HC-SR04产品特点 典型工作用电压&#xff1a;5V 超小静态工作电流&#xff1a;小于2mA 感应角度&#xff1a;不大于15度 探测距离&#xff1a;2cm-400cm 高精度&#…

新一代国产人工心脏推出,《2024心衰器械白皮书》重磅发布

2024年3月2日&#xff0c;永仁心医疗“EVA-Pulsar™新品发布会”在京举办。在国内外众多领域知名专家、投资人、企业家的共同见证下&#xff0c;永仁心最新一代EVA-Pulsar™人工心脏&#xff08;心室辅助装置&#xff09;重磅发布。 这款人工心脏集长期植入、超小体积、脉动血…

求最大公约数

本期介绍&#x1f356; 主要介绍&#xff1a;求两数的最大公约数&#xff0c;通过辗转相除法计算。 文章目录 1. 求最大公约数2. 遍历法3. 辗转相除法 1. 求最大公约数 题目&#xff1a;给定两个数&#xff0c;求这两个数的最大公约数。   最大公约数&#xff1a;指两个或多个…

MySQL--执行一条 select 语句,期间发生了什么?

执行一条 SQL 查询语句&#xff0c;期间发生了什么&#xff1f; 连接器&#xff1a;建立连接&#xff0c;管理连接、校验用户身份&#xff1b;查询缓存&#xff1a;查询语句如果命中查询缓存则直接返回&#xff0c;否则继续往下执行。MySQL 8.0 已删除该模块&#xff1b;解析 …

AI“造神运动”终结,杀死,重生

AGI回归本质&#xff0c;百亿美金创业机会涌现。 “专注AI技术迭代会让我焦虑&#xff0c;关注业务我不会焦虑&#xff0c;有些问题十年前存在十年后还在&#xff0c;我现在就明确不卷模型&#xff0c;只思考如何让产品能自我‘造血’。” 一位正卷在AI创业洪流里的硅谷创业者…

Qt对象树

对象树 1.QLabel* label new QLabal(this) 这个代码在new了之后没有释放&#xff0c;不会造成内存泄漏。 原因是这个对象是挂到了对象树上。 qt就是设计了一个n叉树&#xff0c;将各种元素组织起来了。 例如以下图 通过树形结构&#xff0c;就把界面上显示的这些控件对象…

韶音运动耳机好用吗?南卡、墨觉、韶音骨传导耳机三款全面评测

音乐是我生活中不可或缺的调味品&#xff0c;它伴随着我度过了无数个清晨的慢跑以及夜晚的悠闲散步。但是传统入耳式耳机总是让我感到不适&#xff0c;虽然它有着不错的降噪能力&#xff0c;但是很容易忽视周围环境的安全&#xff0c;而且运动的时候老容易掉。然后我遇到了骨传…

新质生产力浪潮下,RPA如何成为助力先锋?

新质生产力浪潮下&#xff0c;RPA如何成为助力先锋&#xff1f; 在数字化、智能化的今天&#xff0c;“新质生产力”一词越来越频繁地出现在我们的视野中。那么&#xff0c;究竟什么是新质生产力&#xff1f;它与我们又有什么关系&#xff1f;更重要的是&#xff0c;在这一浪潮…

【动态规划】代码随想录算法训练营第四十六天 |139.单词拆分,关于多重背包,你该了解这些! ,背包问题总结篇!(待补充)

139.单词拆分 1、题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2、文章讲解&#xff1a;代码随想录 3、题目&#xff1a; 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict&#xff0c;判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词…

LeetCode:206.反转链表

206. 反转链表 解题过程 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; …

【C++】C++学习前言

C前言与发展 一.什么是C二.C的发展史三.C的重要性 一.什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度的抽象和建模时&#xff0c;C语言则不合适。为了解决软件危机&#xff0c; 20世纪…

2023年中国抗DDoS市场规模现状及竞争格局,公有云抗DDoS是主要增长点

分布式拒绝服务&#xff08;DDoS&#xff09;是在DoS基础之上产生的一种新的攻击方式&#xff0c;具有多对一的攻击模式。它通过制造伪造的流量&#xff0c;使得被攻击的服务器、网络链路或是网络设备&#xff08;如防火墙、路由器等&#xff09;负载过高&#xff0c;无法处理正…

NUMA架构

UMA架构 在单cpu的时代&#xff0c;cpu与内存的交互需要通过北桥芯片来完成。cpu通过前端总线(FSB&#xff0c; front Side Bus)连接到北桥芯片&#xff0c;由北桥芯片连接到内存&#xff08;内存控制器是集成在北桥芯片里的&#xff09;。为了提升性能&#xff0c;cpu的频率不…

2024中国(京津冀)太阳能光伏推进大会暨展览会

2024年中国(京津冀)太阳能光伏推进大会暨展览会是一个旨在促进太阳能光伏产业发展的重要会议和展览会。该活动将在中国的京津冀地区举行&#xff0c;旨在汇聚全球太阳能光伏领域的专业人士、政府代表、企业家和科研人员&#xff0c;共同探讨太阳能光伏技术的最新进展和未来发展…
最新文章