02STM32软件安装新建工程

STM32软件安装&新建工程

  • 1.软件安装:
    • 1.1Keil5 MDK安装
    • 1.2安装器件支持包
      • 离线安装支持包
      • 在线安装支持包
    • 1.3软件注册:
    • 1.4安装驱动
      • STLINK驱动
      • JLink驱动在此文件夹下
      • USB转串口
  • 2.新建工程
    • 2.1STM32开发方式:
      • 1.寄存器
      • 2.标准库
      • 3.HAL库
    • 固件库压缩包说明
    • 新建工程步骤
      • 总体
      • 建立工程文件夹
      • 工程文件夹里建立Start、Library、User等文件夹
        • 建立Start文件夹
        • 建立User文件夹&编译器需注意的问题
        • 基于寄存器开发的演示&修改字体编码等
        • 建立Library文件夹 &添加文件到Keil中
      • 定义USE_STDPERIPH_DRIVER
      • Flash Download里勾选Reset and Run
    • 库函数编程
      • 1.使能时钟
      • 2.配置端口模式
      • 3.配置GPIO的输出电平
    • 工程架构
      • 主动执行的部分:
      • 被动执行的部分:

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库开发,配合RTOS开发

固件库压缩包说明

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使用手册 教如何使用这个库函数,有时间可以看

新建工程步骤

总体

1.建立工程文件夹,Keil中新建工程,选择型号
2.工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹(为添加工程文件准备的,建文件夹是因为文件比较多,需要分类管理,文件夹的名称和数量没有限制,按照自己的理解来建就可以,需要用的文件一定要复制到工程文件夹里,不要添加工程文件夹外面的文件,不然外面的文件挪位置,工程里就找不到文件。保持工程的独立性)
3.工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里(在Keil里方便管理文件,因为Keil没法直接添加文件夹,所以还得重复,在Keil里建立分组,然后添加文件)(.h文件不参加编译也添加进来的原因,因为.h文件需要经常打开看,加进来比较方便)
4.工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹(因为Start、Library等文件夹是自己建的,Keil软件并不知道,要用自己文件夹里的.h文件,就必须声明一下这个路径)
5.工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER(使用库函数的条件编译)(其他工程在这个位置还声明了 一个STM32F103X_MD的字符串,Keil5在新建工程后就自动声明好了这个,不需要再额外声明了)
6.工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run

建立工程文件夹

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是STM32的外设寄存器描述文件;和51单片机的头文件REGX52.H一样。描述STM32有哪些寄存器和它对应的地址的
system_stmf10x.c和.h文件时用来配置时钟的,STM32主频72MHz,就是system文件里的函数配置的
stm32f10x.h、stm32f10x.h、stm32f10x.三个文件粘贴到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文件夹 &添加文件到Keil中

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文件夹下

但是固件库的文件此时还不能直接使用,还需要
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目录下

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

工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹
这些文件都是STM32最基本的文件,不需要我们修改,添加就可。(文件图标带了小钥匙,意味着只读的文件)
(唯一需要更改的就是User组里的文件)

工程选项里面要添加上这个文件夹的头文件路径,否则Keil软件找不到.h文件
在这里插入图片描述
新建路径,把Start、User、Library的文件夹路径添加进来

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

定义USE_STDPERIPH_DRIVER

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

Flash Download里勾选Reset and Run

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

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

库函数编程

1.使能时钟

库函数有这样一个函数RCC_APB2PeriphcClockCmd(选择外设,选择状态) //APB2外设时钟控制
可以右键调到函数定义,有函数简介和参数说明
在这里插入图片描述
内部其实还是配置RCC_APB2ENR这个寄存器,但是经过函数包装,可以不用去查手册来确认哪一位是干什么的。虽然代码长,但是语义更加明确,也不需要再查找计算寄存器的值了。只需要调用库函数,按照提示,把参数填好就行

2.配置端口模式

注释里的东西,没办法右键跳转,就可以查找ctrl+f,搜索定义的位置
在这里插入图片描述
在这里插入图片描述
此处转GPIO.Pin的定义时出现了一个框,说明它的定义有多个。
选择member这一项双击即可(但是这里面的原理需要细究弄清楚才行)

3.配置GPIO的输出电平

工程架构

在这里插入图片描述

主动执行的部分:

startup_xx.s启动文件 程序执行最基本的文件
在这里插入图片描述
汇编语言写的,启动文件定义了中断向量表,中断服务函数等
中断服务函数有一个复位中断,这就是整个程序的入口。上电复位或者按键复位后,程序就进入复位中断函数执行
复位中断函数主要做两个事:
1.调用SystemInit函数
2.调用main函数
对应启动文件

在这里插入图片描述
复位的中断函数,调用SystemInit,再调用main,然后程序结束(但是main会设置有死循环)

SystemInit函数是定义在这个system开头的.c里的
在这里插入图片描述
函数的作用:设置微控制器的启动,初始化嵌入式闪存接口、锁相环、更新系统内核的时钟变量

note写的这个函数仅在复位后需要调用
下面的是配置的东西。这些都不需要我们更改

只需要知道,在main函数之前,单片机就执行了一堆东西了,把闪存接口、时钟等一系列杂散的东西都配置好了

另外启动文件还定义了STM32所有的其他中断,
中断函数的定义就在stm32f10x_it里面,打开Keil可以看到
在这里插入图片描述
ST建议把中断写到这个位置,但写在别的地方也可以,可以哪里用就哪里写

可以自己定义一些用户文件,来封装一些模块供主函数和中断调用。有利于程序结构的模块化

被动执行的部分:

相当于STM32的资源,在主函数或者中断函数可以调用这些资源
stm32f10x.h和core.cm3.c/.h就是外设和内核外设的寄存器描述
在这里插入图片描述
这里面都是寄存器和寄存器每一位的名字,还有地址信息等,如果直接调用这些寄存器来使用STM32,就是寄存器的开发方式(这么多,麻烦啊)

所以ST公司提供了misc.c/.h stm32f10x_xxx.c/.h 库函数 和 stm32f10x_conf.h 库函数配置
这每个外设都提供了一大堆的函数,这些函数封装了寄存器的操作,给我们提供更加人性化的函数调用方式,只要学会了这些操作套路,那配置外设就很简单

conf.h文件就是配置头文件的包含关系,conf文件include了所有的库函数头文件。同时在stm32f10x.h最后,又包含了 stm32f10x_conf.h (conf文件),所以使用这些库函数时,只需要包含stm32f10x.h这一个头文件,就相当于包含了所有的库函数文件,这样就可以任意的调用库函数了

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

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

相关文章

Nginx访问日志按天拆分

使用 logrotate 来实现 如果系统没有安装logrotate 可以使用 sudo yum install logrotate -y 进行安装 配置 logrotate 接下来我们就来配置 nginx 切割的配置文件,我的 nginx 日志路径在/var/log/nginx 我们在 /etc/logrotate.d/ 目录下新建一个 nginx 的文件…

C++ Primer 总结索引 | 第十六章:模板与泛型编程

1、面向对象编程(OOP)和泛型编程 都能处理在编写程序时 不知道类型的情况。不同之处在于:OOP 能处理类型 在程序运行之前都未知的情况;而在泛型编程中,在编译时就能获知类型了 2、容器、迭代器 和 算法 都是泛型编程的…

【热梗案例】知识点阶段性综合汇总

文章目录 渲染对象、实现统计功能实现删除功能设置发布按钮实现发布按钮的提交功能 直接用CSS的模板&#xff0c;模板代码如下&#xff1a; <template><view class"title">近期热梗</view><view class"out"> <view class&qu…

全面解析BPMN、CMMN、DMN与XML

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 全面解析BPMN、CMMN、DMN与XML 前言BPMN&#xff08;业务流程模型与标记法&#xff09;定义与用途…

[数据结构] 基于插入的排序 插入排序希尔排序

标题&#xff1a;[数据结构] 排序#插入排序&希尔排序 水墨不写bug 目录 &#xff08;一&#xff09;插入排序 实现思路&#xff1a; 插入排序实现&#xff1a; &#xff08;二&#xff09;希尔排序 希尔排序的基本思想&#xff1a; 希尔排序的实现&#xff1a; 正…

MybatisPlus 多数据源 @DS 选择深入源码理解原理

文章目录 MybatisPlus 多数据源 DS 选择深入源码理解原理 MybatisPlus 多数据源 DS 选择深入源码理解原理 数据源的选择&#xff0c;拦截器为DynamicDataSourceAnnotationInterceptor 这里利用了一个MethodInterceptor接口&#xff0c;我们看看&#xff0c;我们可以看到这个包…

防御笔记第四天(持续更新)

1.状态检测技术 检测数据包是否符合协议的逻辑顺序&#xff1b;检查是否是逻辑上的首包&#xff0c;只有首包才会创建会话表。 状态检测机制可以选择关闭或则开启 [USG6000V1]firewall session link-state tcp ? check Indicate link state check [USG6000V1]firewall ses…

CLion学习笔记-cmake编译和多main函数编译

这里就不讲怎么配置clion了 项目名字 pcl_kdtree_search 1.新建一个工程名字自己取&#xff0c;我这里用自己学习pcl的&#xff0c;加一个main函数&#xff0c;这个时候Cmake里边就是这样的。 #声明要求的cmake最低版本 cmake_minimum_required(VERSION 3.19) #声明一个工程…

消息称台积电下周开始试产 2nm 芯片,有望率先用于苹果 iPhone 17

消息称台积电下周开始试产 2nm 芯片&#xff0c;有望率先用于苹果 iPhone 17 &#x1f4a1;&#x1f4f1; 大家好&#xff0c;我是猫头虎&#xff0c;科技自媒体博主 &#x1f431;&#x1f42f;&#xff0c;带你洞察科技世界的每一个细节&#xff01;&#x1f525; 关于猫头…

sklearn(Python机器学习库)介绍

0 引言 Sklearn (全称 Scikit-Learn)是基于Python 编程语言的免费软件机器学习库。 Scikit-learn主要是用Python编写的,它建立在 NumPy, SciPy, Pandas 和 Matplotlib 之上,里面API 的设计非常好,所有对象的接口简单,很适合新手上路。 Scikit-learn与许多其他Python库很好地…

MAT(Eclipse Memory Analyzer) Windows安装

MAT&#xff08;Eclipse Memory Analyzer&#xff09; Windows安装 MAT&#xff08;Eclipse Memory Analyzer&#xff09;是一个Java的内存分析工具 MAT下载地址 安装完成之后的目录机构 如若出现java版本过低的解决办法 在配置文件MemoryAnalyzer.ini中添加指定Java的版本…

PD协议诱骗芯片,XSP08Q,XSP16应用笔记

XSP08Q是3C数码或小家电产品的Type-C接口控制芯片&#xff0c;它负责和PD充电器通讯&#xff0c;获取充电器的快充电压档位&#xff0c;如5V4A&#xff0c;9V3A&#xff0c;12V2A&#xff0c;15V3A&#xff0c;20V5A等等。 XSP08Q支持PD协议&#xff0c;BC1.2协议&#xff0c;Q…

从产业链视角审视工作

从产业链视角审视工作&#xff1a;定位、价值与成长 作为一名技术博客博主&#xff0c;我经常收到各种关于职业发展、技术成长和学习路径的问题。最近&#xff0c;我看了一份学习报告&#xff0c;其中提到了一种非常有趣且实用的视角——从产业链的角度去审视自己的工作。这种视…

Web 自动化测试主流框架都有哪些?

Web移动端自动化测试成为了现代软件开发流程中的重要环节&#xff0c;因此&#xff0c;很多主流框架被开发出来来帮助开发人员提高测试效率。本篇文章将从零到一详细介绍Web移动端自动化测试的主流框架。 一、Web移动端自动化测试框架简介 Web移动端自动化测试框架是一种开发工…

百元平价蓝牙耳机哪款好?平价高性价比蓝牙耳机推荐

随着蓝牙耳机的普及&#xff0c;市面上各种品牌的蓝牙耳机也层出不穷。对于那些预算在百元平价的朋友来说&#xff0c;百元平价蓝牙耳机哪款好&#xff1f;这个问题就显得格外重要了。毕竟&#xff0c;蓝牙耳机作为日常生活中不可或缺的小伙伴&#xff0c;不仅需要音质出众、续…

AD3518 SOP-8封装 单节锂电池保护芯片 可替代XB8608/XB8608A

AD3518 是一款内置 MOSFET 的单节锂电池保护芯片。该芯片具有非常低的功耗和非常低阻抗的内置 MOSFET。该芯片有充电过压&#xff0c;充电过流&#xff0c;放电过压&#xff0c;放电过流&#xff0c;过热&#xff0c;短路&#xff0c;电芯反接等各项保护等功能&#xff0c;确保…

7.深度学习概述

深度学习概述 1. 线性回归1.1 线性回归一般表达式1.2 线性回归内积表达方式&#xff1a;1.3 多个样本时&#xff0c;线性回归的进一步表达&#xff1a;1.4 线性回归方程的解析1.5 线性回归就是求loss函数的最小值 2. 如何求函数最小值2.1 一个例子2.2 求导法——求最小值2.3 求…

使用“nvm use 版本号“命令无效

使用"nvm use 版本号"命令无效 为什么无效?解决 为什么无效? 解决 将这个nodejs文件夹删除,然后在运行nvm use 版本号,则 node生效.

FastAPI 学习之路(三十四)数据库多表操作

之前我们分享的是基于单个表的数据库表的操作&#xff0c;我们在设计数据库的时候也设计了跨表&#xff0c;我们可以看下数据库的设计 class User(Base):__tablename__ "users"id Column(Integer, primary_keyTrue, indexTrue)email Column(String(10), uniqueTr…

不想成为失业大军,就要学习六西格玛?

最近&#xff0c;优思学院收到一封邮件&#xff0c;这封邮件的发送者是一位完成了我们六西格玛绿带课程的学生。 他的公司裡有20%的工程师被裁员&#xff0c;但值得注意的是&#xff0c;留下来的工程师中有70%人竟然都持有六西格玛绿带或黑带证书。 他的公司不仅希望利用这些…