02STM32软件安装新建工程

STM32软件安装&新建工程

  • 1.软件安装:
    • 1.1Keil5 MDK安装
    • 1.2安装器件支持包
      • 离线安装支持包
      • 在线安装支持包
    • 1.3软件注册:
    • 1.4安装驱动
      • STLINK驱动
      • JLink驱动在此文件夹下
      • USB转串口
  • 2开发方式&新建工程步骤&架构
    • 2.1STM32开发方式:
    • 库函数压缩包说明
    • 新建工程步骤
      • 建立Start文件夹
      • 建立User文件夹
      • 建立Library文件夹
    • 库函数编程
  • 个人心得

1.软件安装:

安装Keil5 MDK
安装器件支持包
软件注册
安装STLINK驱动
安装USB转串口驱动

1.1Keil5 MDK安装

如果之前安装了KeilC51,可以直接选择C51的安装目录,这样两个软件可以共存了
没有的话新建文件夹Keil5就可以了(名称不要带有特殊字符和中文,国外软件,可能对中文会存在一些问题)
选好文件路径后,Pack会自动变化,直接Next即可

安装完成后会弹出是否需要安装ULINK的驱动(ULINK是Keil公司开发的调试器),点击 是 即可

1.2安装器件支持包

安装器件支持包是Keil5才需要安装的,Keil4和之前的老版本不需要安装,是因为现在ARM的芯片型号非常多,升级换代的速度也快(Keil软件不能出一款芯片就升级一下软件,而且同时支持所有型号的芯片,占用内存非常大,所以芯片的器件支持包就被独立出来了,开发哪种芯片就安装对应的支持包就好了,如果没有安装支持包,在新建工程时不会出现相应的器件型号)
在这里插入图片描述
现在这个软件是C51和MDK共存的情况,如果想切换为C51,只需在下拉列表中选择Legacy Device(传统设备)即可

离线安装支持包

可以用浏览器到网站上下载,下载好支持包之后再离线安装
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
根据要开发的器件型号选择相应的支持包,直接双击,目标路径会自动选择安装时的目录
直接点击Next即可,重新打开Keil5,会发现安装了新的支持包了

在这里插入图片描述
在这里插入图片描述

在线安装支持包

(开发其他芯片找型号很方便,防止找不到器件支持包)
在这里插入图片描述
点击绿色按钮,弹出的就是Pack Install界面
在这里插入图片描述
这里可以用来安装支持包,并且所有可以用Keil软件来开发的芯片都可以找到(就是网速较慢)
在这里插入图片描述
下面提示的就是正在获取的东西,右边有进度条显示进度。由于我的没联网,显示的是Cannot read
如果点进来没有自动获取,可以点更新按钮,获取最新列表
在这里插入图片描述
可以看到就有很多器件公司
在这里插入图片描述
在这里插入图片描述
点击安装对应器件系列的DFP文件安装,就会自动下载DFP文件并且自动安装上

1.3软件注册:

Keil必须用管理员身份运行。其余自行了解
注册成功后就可以不用管理员身份运行了

1.4安装驱动

STLINK驱动

D:\Keil_v5\ARM\STLink\USBDriver
在Keil安装目录下面有
在这里插入图片描述
amd64就是64位的,x86是32位的,根据电脑选择合适驱动

JLink驱动在此文件夹下

在这里插入图片描述

USB转串口

是ch340的驱动 CH341ESR.EXE。要注意有一些USB转串口不是用的340芯片哦

2开发方式&新建工程步骤&架构

2.1STM32开发方式:

1.寄存器 和51一样,程序直接控制配置寄存器。最底层,效率最高,但是由于STM32结构复杂,寄存器太多,不推荐这种开发方式
2.标准库 库函数(ST官方提供的封装好的函数,调用这些函数直接配置寄存器,由于ST对寄存器封装地比较好,这种方式既能满足对寄存器的配置,对开发人员也比较友好,有利于提高开发效率)需要库函数压缩包,即固件库的文件,标准库函数压缩包
3.HAL库适合快速上手STM32,同时移植效果更好,但是隐藏了底层逻辑,如果对STM32不熟悉,就只能停留在很浅的水平。

推荐51用寄存器开发,STM32推荐标准库开发,后面提高效率开发再学HAL库开发

库函数压缩包说明

STM32F10x_StdPeriph_Lib_V3.5.0 STM32标准固件库里面的文件说明:
1._htmresc文件夹 两张图片,没啥用
2.Libraries文件夹 存放的库函数文件,要用到
3.Project文件夹 官方提供的工程示例和模板,以后使用库函数的时候可以进行参考
4.Utilities文件夹 官方评估板的相关例程,官方用STM32做的一个小电路板,用来测评STM32的
5.Release_Notes.html发布文档 版本说明
6.stm32f10x_stdperiph_lib_um.chm使用手册 教如何使用这个库函数,有时间可以看

工程的必要文件

新建工程步骤

建立工程文件夹,Keil中新建工程(文件夹名称方便改,但是工程名称不方便改),选择器件型号
Manage Run-Time Enviroment 新建工程小助手,可帮助快速新建工程,暂时不用
工程已建好

工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹

建立Start文件夹

1.Stm32的启动文件
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm
在这里插入图片描述
全粘贴到Start文件夹下

2.STM32的外设寄存器描述文件、时钟配置文件和函数
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x文件夹下
在这里插入图片描述

stm32f10x.h、stm32f10x.h、stm32f10x.三个文件
stm32f10x.h是STM32的外设寄存器描述文件;和51单片机的头文件REGX52.H一样。描述STM32有哪些寄存器和它对应的地址的
system_stmf10x.c和.h文件时用来配置时钟的,STM32主频72MHz,就是system文件里的函数配置的
全粘贴到Start文件夹下

STM32由内核和内核外围的设备组成,而且内核的寄存器描述和外围设备的描述文件不是在一起的,所以还需添加内核寄存器的描述文件

3.内核寄存器的描述文件
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport
core_cm3.h和core_cm3.c两个文件
在这里插入图片描述
这两个文件就是内核的寄存器描述(还带了一些内核的配置函数,所以有一个.c文件)
全粘贴到Start文件夹下

建立User文件夹

在这里插入图片描述
target下添加组,改名User,新建main.C文件(注意要放到User文件夹下)
在这里插入图片描述
右键插入头文件
写好代码(注意最后一行要空行,要不然会报警告)
在这里插入图片描述
编译并建立工程(官方最新发的KeilMDK没有自带v5编译器,官方也不提供ARM Compiler5了,需要自己下载一个)
在这里插入图片描述
注意选择这个v5版本

此时还没有添加STM32的库函数,所以此时还是基于寄存器开发的工程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查找好对应的寄存器编写代码控制寄存器
第一个寄存器打开GPIOC的时钟、
第二个寄存器配置PC13口的模式,
第三个寄存器给PC13口输出数据

可以看出来这种方式需要不断地查手册来了解每个寄存器的每一位都是干啥的

在这里插入图片描述
扳手处可以选择修改编码格式(UTF-8可以防止中文乱码)、字体大小(ASM和C/C++修改大小)、tab缩进(一般选4)

建立Library文件夹

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src文件夹
在这里插入图片描述

STM32的标准外设库驱动
但是misc.c是内核的库函数,其他是内核外的外设库的库函数
全选复制粘贴到Library文件夹下

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\inc
在这里插入图片描述
标准外设驱动库的头文件
全选复制粘贴到Library文件夹下

Keil中添加进来

但是固件库的文件此时还不能直接使用,
STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template文件夹
在这里插入图片描述

stm32f10x_conf.h、stm32f10x_it.c和stm32f10x_it.h三个文件
Stm32f10x_conf.h (configuration)配置库函数头文件的包含关系的;还有用来参数检查的函数定义,这是所有库函数都需要的
Stm32f10x_it.c 和it.h 用来存放中断函数的
这三个文件复制粘贴到User目录下
在Keil中添加

工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里
在这里插入图片描述
选中该组,再单击即可完成改名
在这里插入图片描述
添加存在的文件到组里来,文件类型选择All files
启动文件有很多分类,但是我们只能添加其中一个,对应器件的FLASH内存大小来选择启动文件
在这里插入图片描述
剩下的C文件和头文件就都添加进来

工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹

这些文件都是STM32最基本的文件,不需要我们修改,添加就可。(文件图标带了小钥匙,意味着只读的文件)(唯一需要更改的就是User组里的文件)
工程选项里面要添加上这个文件夹的头文件路径,否则Keil软件找不到.h文件
在这里插入图片描述
新建路径,把Start、User、Library的路径添加进来

在这里插入图片描述
可以点击此处,调整文件顺序

工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER
在这里插入图片描述
打开"stm32f10x.h"头文件滑到最后面,此处为条件编译,如果定义了USE_STDPERIPH_DRIVER(使用标准外设驱动)这个字符串,才会包含“stm32f10x_conf.h”,需复制这个字符串粘贴到此处
在这里插入图片描述

工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run

在这里插入图片描述
默认是ULINK,要选择对应的烧录器STLINK Debugger,再点击右边的settings按钮
在这里插入图片描述
在FLASH download中勾选 Reset and Run。这样下载程序之后会立马复位并执行,不然下载之后还要按复位按键才能执行

库函数编程

1.使能时钟,库函数有这样一个函数RCC_APB2PeriphcClockCmd //APB2外设时钟控制

在这里插入图片描述

个人心得

在单片机嵌入式领域,个人推荐ARM内核的处理器芯片、

HAL库和cubeMx是ST公司做的

GD用的话会有兼容性问题(GD也有自己的库了)
(搞得越来越多啊,花里胡哨,谁来统一一下)

时间(240613)

其他芯片暂时不推荐学习

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

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

相关文章

线性系统理论及应用GUI设计及仿真

目录 1.控制系统的状态空间模型 1.1.状态空间模型 1.2 传递函数模型 1.3 传递函数转换为状态空间模型 1.4.状态空间模型转换为传递函数 1.5.状态空间模型转化为约当标准型 2.线性系统的时域分析 2.1.矩阵指数函数的计算 2.2.线型定常连续系统的状态空间模型求解 3.线…

《Nature》文章:ChatGPT帮助我学术写作的三种方式

图片翻译 ** 文章内容** 忏悔时间:我使用生成式人工智能(AI)。尽管在学术界关于聊天机器人是积极力量还是消极力量的争论不休,但我几乎每天都使用这些工具来完善我所写论文中的措辞,并寻求对我被要求评估的工作进行替…

Mysql-常用函数及其用法总结

1、字符串函数 测试用例如下: 1.1 CONCAT() 将多个字符串连接成一个字符串。 SELECT CONCAT(first_name, , last_name) AS full_name FROM users; -- 期望结果:John Doe, Jane Smith, Michael Johnson 1.2 SUBSTRING() 提取子字符串 SELECT SUBSTR…

算法012:将x减到0的最小操作数

将x减到0的最小操作数. - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/minimum-operations-to-reduce-x-to-zero/ 这个题使用到的是滑动窗口。 乍一看&#xff0c…

纹波和噪声的介绍以及区别

纹波和噪声的介绍 纹波和噪声都是在电源输出中出现的信号波动,但两者存在明显的区别。   纹波:是附着于直流电平之上的包含周期性与随机性成分的杂波信号。在额定输出电压、电流的情况下,纹波指的是输出电压中的交流电压的峰值 。狭义上的纹…

生产调度:flowshop问题数学建模

接上一篇文章,在了解生产调度问题的背景和基本概念之后,我想先从比较基础的 flowshop和 jobshop 数学模型入手,理解实际调度过程中的问题求解思路。这一篇文章主要面向 flowshop 问题进行数学建模,对于这类比较经典的问题&#xf…

大语言模型基础

大语言基础 GPT : Improving Language Understanding by Generative Pre-Training 提出背景 从原始文本中有效学习的能力对于减轻自然语言处理中对监督学习的依赖至关重要。很多深度学习方法需要大量人工标注的数据,限制了它们在很多领域的应用,收集更…

【鸿蒙学习笔记】MVVM模式

官方文档:MVVM模式 [Q&A] 什么是MVVM ArkUI采取MVVM Model View ViewModel模式。 Model层:存储数据和相关逻辑的模型。View层:在ArkUI中通常是Component装饰组件渲染的UI。ViewModel层:在ArkUI中,ViewModel是…

【Java】垃圾回收学习笔记(二):分代假说与垃圾回收算法

文章目录 0. 分代收集理论分代假说分代GC定义 1. 垃圾回收算法1.1 标记清除(Mark-Sweep)算法优点缺点 1.2 标记复制算法优点缺点为什么是8:1:1? 1.3 标记整理算法优点缺点 2. 是否移动? 0. 分代收集理论 分代假说 现在多数JVM G…

子数组按位与为k

注意这里的子数组是连续的非空的数组&#xff0c;我们要学会与处理就是求交集 class Solution { public:long long countSubarrays(vector<int>& nums, int k) {long long ans 0;for (int i 0; i < nums.size(); i) {int x nums[i];for (int j i - 1; j > …

MATLAB 2024b 更新了些什么?

MATLAB 2024b版本已经推出了预览版&#xff0c;本期介绍一些MATLAB部分的主要的更新内容。 帮助浏览器被移除 在此前的版本&#xff0c;当我们从MATLAB中访问帮助文档时&#xff0c;默认会通过MATLAB的帮助浏览器&#xff08;Help browser&#xff09;。 2024b版本开始&…

【Linux】压缩命令——gzip,bzip2,xz

1.压缩文件的用途与技术 你是否有过文件太大&#xff0c;导致无法以正常的E-mail方式发送&#xff1f;又或学校、厂商要求使用CD或DVD来做数据归档之用&#xff0c;但是你的单一文件却都比这些传统的一次性存储媒介还要大&#xff0c;那怎么分成多块来刻录&#xff1f;还有&am…

[搭建个人网站] 云服务器 or 本地环境搭建

别人没有的&#xff0c;你有&#xff0c;你就牛。 面试&#xff0c;吹牛皮的时候 都可以拉出来溜溜 本文介绍2种搭建网站模式方式&#xff1a;区别嘛&#xff08;花钱跟不花钱&#xff09; 花钱&#xff1a; 1. 先购买个域名。。&#xff08;这里就不多介绍了&#xff0c;随便…

昇思学习打卡-9-ResNet50图像分类

文章目录 网络介绍数据可视化部分网络实现Building Block结构BottleNet模块 模型训练推理结果可视化学习总结优点不足 网络介绍 在ResNet网络提出之前&#xff0c;传统的卷积神经网络都是将一系列的卷积层和池化层堆叠得到的&#xff0c;但当网络堆叠到一定深度时&#xff0c;…

STM32崩溃问题排查

文章目录 前言1. 问题说明2. STM32&#xff08;Cortex M4内核&#xff09;的寄存器3. 崩溃问题分析3.1 崩溃信息的来源是哪里&#xff1f;3.2 崩溃信息中的每个关键字代表的含义3.3 利用崩溃信息去查找造成崩溃的点3.4 keil5中怎么根据地址找到问题点3.5 keil5上编译时怎么输出…

C++模板元编程(二)——完美转发

完美转发指的是函数模板可以将自己的参数“完美”地转发给内部调用的其它函数。所谓完美&#xff0c;即不仅能准确地转发参数的值&#xff0c;还能保证被转发参数的左、右值属性不变。 文章目录 场景旧的方法新的方法内部实现参考文献 场景 思考下面的代码&#xff1a; templ…

深度学习之网络构建

目标 选择合适的神经网络 卷积神经网络&#xff08;CNN&#xff09;&#xff1a;我们处理图片、视频一般选择CNN 循环神经网络&#xff08;RNN&#xff09;&#xff1a;我们处理时序数据一般选择RNN 超参数的设置 为什么训练的模型的错误率居高不下 如何调测出最优的超参数 …

【pytorch20】多分类问题

网络结构以及示例 该网络的输出不是一层或两层的&#xff0c;而是一个十层的代表有十分类 新建三个线性层&#xff0c;每个线性层都有w和b的tensor 首先输入维度是784&#xff0c;第一个维度是ch_out,第二个维度才是ch_in(由于后面要转置)&#xff0c;没有经过softmax函数和…

C++ 引用——引用的本质

本质&#xff1a;引用的本质在c内部实现是一个指针常量 C推荐用引用技术&#xff0c;因为语法方便&#xff0c;引用本质是指针常量&#xff0c;但是所有的指针操作编译器都帮我们做了 示例&#xff1a; 运行结果&#xff1a;

C++初学者指南-4.诊断---valgrind

C初学者指南-4.诊断—Valgrind Valgrind&#xff08;内存错误检测工具&#xff09; 检测常见运行时错误 读/写释放的内存或不正确的堆栈区域使用未初始化的值不正确的内存释放&#xff0c;如双重释放滥用内存分配函数内存泄漏–非故意的内存消耗通常与程序逻辑缺陷有关&#xf…