stm32软件安装以及创建工程

news2024/9/22 5:00:25

文章目录

  • 前言
  • 一、软件安装
    • 软件破解
  • 二、创建工程
  • 三、创建项目
    • 创建组
    • 配置启动文件
      • 添加到组
    • 为项目添加头文件路径
    • 创建源文件(main函数文件)
    • 使用寄存器配置引脚
      • 拼接好STLINK与stm32最小电路板的接线
      • 编写程序
        • 配置STLink下载程序
        • 配置寄存器
        • 配置13号端口(信号灯的端口)
        • 配置输出端口寄存器
    • 使用库函数
      • 配置库函数文件
      • 使用库函数点亮信号灯
        • 配置定时器
        • 然后是配置端口模式
        • 最后一步就是电源供给
        • 具体代码如下
    • 启动文件的分类
  • 总结新建工程步骤


前言

基于bilibili 江协科技《STM32入门教程-2023版 细致讲解 中文字幕》的学习记录,资料资源:https://jiangxiekeji.com/download.html,以下操作大多基于此资料。

一、软件安装

需要安装keil5 MDK,老方法进入官网点击download
在这里插入图片描述
选择MDK版本
在这里插入图片描述
然后注册信息自己填写

软件破解

使用管理员身份打开keil5
选择file中的license management,复制如图id
在这里插入图片描述
打开破解程序keygen,按照如图顺序,把刚刚复制的id放入cid中,点击generate,3指向的框中就会产生一串字符串,复制这串字符串。

注意:此软件可能会被识别为病毒,可以在windows安全中心允许这个程序行为即可。

在这里插入图片描述

粘贴到如图框中点击add lic,上面会显示相关信息。
在这里插入图片描述
这样软件就破解成功了。

二、创建工程

打开keil5,点击pack installer
在这里插入图片描述
选择需要的包内容,双击下载,下面会显示进度条,速度比较缓慢。
在这里插入图片描述
这样就可以创建stm32f103c8的项目了
在这里插入图片描述

``

三、创建项目

由于stm32有大量的寄存器,操作起来十分复杂,所以采用基于st公司所创建的基本库,通过调用函数来操作。

创建组

右键Target 1,点击Add Group,然后单击两下刚刚建的组修改名字。
在这里插入图片描述
在这里插入图片描述

配置启动文件

以下基于资料文件的路径

注意:先创建一个与项目同级目录下的Start文件夹,保存这些文件,再将这些文件加入到Start组,后面的同理

复制目录:STM32资料\固件库\STM32F10x_StdPeriph_Lib_V3.5.0.zip\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 中的所有文件(选择需要的型号加入Start组,这里选择md.s结尾的文件其他的不需要加入组)和STM32资料\固件库\STM32F10x_StdPeriph_Lib_V3.5.0.zip\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x目录如下文件(图二)和STM32资料\固件库\STM32F10x_StdPeriph_Lib_V3.5.0.zip\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport中两个内核文件 到工程的Start组(自定义名称)中,如下图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

添加到组

右键组,加入外部文件,选择相应文件add即可
在这里插入图片描述

在这里插入图片描述

为项目添加头文件路径

不然会找不到头文件而使用不了。
在这里插入图片描述
选择你刚刚创建的Start文件夹即可
在这里插入图片描述

创建源文件(main函数文件)

同样,在项目同级目录下创建User文件,并在keil中创建User组,名称可自定义,创建的main.c文件放在User文件中,再加入User组。
在这里插入图片描述

使用寄存器配置引脚

拼接好STLINK与stm32最小电路板的接线

在这里插入图片描述
然后插入电脑,如下则成功
在这里插入图片描述

编写程序

配置STLink下载程序

在项目配置中选择STLINK debugger
在这里插入图片描述
然后点旁边的settings
在这里插入图片描述
编译之后,点击download即下载程序
在这里插入图片描述
下载成功后,信号灯就不会再闪烁了
在这里插入图片描述

配置寄存器

先配置时钟寄存器,通过参考手册查看使能信息
在这里插入图片描述
在这里插入图片描述
所以其他位全0,第四位置1,打开IO端口C时钟使能。
即 RCC->APB2ENR = 0x00000010;

配置13号端口(信号灯的端口)

在这里插入图片描述
在这里插入图片描述
如上图配置,即 GPIOC->CRH = 0x00300000;

配置输出端口寄存器

低电平点亮,如下图将13位配置为低电平
在这里插入图片描述
所以直接给全0信号灯就会亮,即 GPIOC->ODR = 0x00000000;
然后编译下载程序
在这里插入图片描述

使用库函数

配置库函数文件

项目同级目录下创建Library文件夹来存放库函数文件,并在keil创建Library组,将 STM32资料\固件库\STM32F10x_StdPeriph_Lib_V3.5.0.zip\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src 中所有文件复制粘贴到刚刚创建的Library文件夹中,然后添加到Library组中
然后将 STM32资料\固件库\STM32F10x_StdPeriph_Lib_V3.5.0.zip\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 中如下文件复制粘贴到User文件夹,并加入到User组中
在这里插入图片描述
最后还需要一个宏定义(USE_STDPERIPH_DRIVER),并添加所有的头文件目录
在这里插入图片描述

使用库函数点亮信号灯

和寄存器配置顺序一样

配置定时器

函数定义如下,参数分别为选择寄存器、是否使能
在这里插入图片描述

然后是配置端口模式

函数定义如下
在这里插入图片描述
第一个参数选择要配置的端口,第二个参数需要是一个结构体,需要我们自己定义,使用他给的类型GPIO_InitTypeDef GPIO_InitStructure;这种方式定义结构体,然后使用结构体的成员方式进行配置,三个成员变量定义如下
在这里插入图片描述
成员的值如下
选择端口:13
在这里插入图片描述

选择频率在这里插入图片描述
选择模式:通用推挽输出
在这里插入图片描述
给成员赋值之后就可以使用GPIO_Init函数配置端口了。

最后一步就是电源供给

高电平供给
在这里插入图片描述
低电平供给
在这里插入图片描述

具体代码如下
#include "stm32f10x.h"                  // Device header

int main(){
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC,&GPIO_InitStructure);
	GPIO_SetBits(GPIOC,GPIO_Pin_13);
	// GPIO_ResetBits(GPIOC,GPIO_Pin_13);
	while(1){
	
	}
	return 0;
}

启动文件的分类

根据型号用于选择启动文件
在这里插入图片描述


总结新建工程步骤

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

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

相关文章

智能化运维发展现状?智能化运维方向有哪些?

智能运维方向主要包括人工运维、自动运维和智能运维三个阶段。从以下几个方面可以简要介绍智能运维的发展情况:  市场参与者众多:我国智能运维领域参与者众多,市场份额相对较低。华为、浪潮云、联想等硬件制造商在市场上占有很大份额。  …

c语言游戏实战(3):三子棋

前言: 三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏规则是双方对战,双方依次在9宫格棋盘上摆放棋子,率先将自己的三个棋子走成一条线就视为胜利。但因棋盘太小,三子棋在很多时候会出现和…

vulnhub中Beelzebub靶机

渗透思路 一.信息收集1.网段探测2.端口探测3.常见漏洞扫描4.目录扫描5.web页面分析 二.渗透继续目录扫描ssh连接提权提权,flag 一.信息收集 1.网段探测 ┌──(root㉿kali)-[~] └─# nmap -Pn 192.168.0.0/24 --min-rate 10000 Starting …

day28打卡

day28打卡 93. 复原 IP 地址 见注释 class Solution { public:vector<string> ret;vector<string> restoreIpAddresses(string s) {string ip;dfs(s, 0, ip);return ret;}//n记录小数点个数void dfs(string s, int n, string ip){//n为4if(n 4){//如果字符s没有…

2024Node.js零基础教程(小白友好型),nodejs新手到高手,(四)NodeJS入门——网络基础概念

041_网络基础概念_IP的介绍 hello&#xff0c;大家好&#xff0c;我们来一起认识一下IP。 在开始介绍 IP 之前&#xff0c;我们首先来介绍一个场景&#xff0c;方便大家去理解 IP 这个概念。比如这会儿强哥正在成都&#xff0c;然后还有另外一个小伙伴&#xff0c;谁呢&#x…

数据库分库分表:提升系统性能的必由之路

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 数据库分库分表&#xff1a;提升系统性能的必由之路 前言为什么分库分表是必要的分库分表的基本概念和原理性能提升和负载均衡 前言 在数字化时代&#xff0c;数据被认为是企业最宝贵的资产之一。然而…

STA双WiFi连接

STA双WiFi连接 1、STA/STA双WiFi开关1.1 相关属性1.2 STA/STA支持判断 2、STA双WiFi命令测试2.1 adb shell cmd wifi add-suggestion guest_5G wpa3 12345678 -p2.2 adb shell cmd wifi remove-suggestion guest_5G2.3 查看dumpsys wifi信息WifiConfigStore 3、STA双WiFi连接流…

Graal编译器和GraalVM虚拟机

文章目录 说明Java程序执行流程JVM的语言无关性JVM的执行流程执行引擎的两种行为&#xff1a;解释执行和编译热点代码和热点代码探测方式热点代码热点代码探测方式热点代码探测方式流程 HotSpotVM内嵌两个JIT编译器Graal编译器GraalVMGraalVM虚拟机安装和体验GraalVM的下载和安…

【JavaEE】_传输层协议UDP与TCP

目录 1. 开发中常见的数据组织格式 1.1 XML 1.2 JSON 1.3 Protobuf 2. 端口号 3. UDP协议 4. TCP协议 4.1 特点 4.2 TCP报文格式 4.3 TCP可靠性机制 4.3.1 确认应答机制 4.3.2 超时重传机制 4.3.2.1 丢包的两种情况 4.3.2.2 重传时间 4.3.3 连接管理机制 4.3.3…

【Flink入门修炼】1-2 Mac 搭建 Flink 源码阅读环境

在后面学习 Flink 相关知识时&#xff0c;会深入源码探究其实现机制。因此&#xff0c;需要现在本地配置好源码阅读环境。 本文搭建环境&#xff1a; Mac M1&#xff08;Apple Silicon&#xff09;Java 8IDEAFlink 官方源码 一、 下载 Flink 源码 github 地址&#xff1a;h…

【Vue3+Vite】Vue生命周期与组件 快速学习 第三期

文章目录 一、Vue生命周期1.1 生命周期简介1.2 生命周期案例 二、Vue组件2.1 组件基础2.2 组件化入门案例2.3 组件之间传递数据2.3.1父传子2.3.2 子传父2.3.3 兄弟传参 总结 一、Vue生命周期 1.1 生命周期简介 每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤&#xf…

UE5 获得频谱让nigara随音乐律动

参考视频:UE - Niagara实现可视化音乐动态粒子效果 案例演示及教程_哔哩哔哩_bilibili 先创建一个Niagara 在Properties的Sim Target改为GPU,Calculate Bounds Mode改为Fixed模式 生成的数量改为1000 这里的BoxSize可以选择修改,具体作用是粒子初始生成的范围 Drag,阻力,用来限…

数据结构_找环,破环题-2.5

一. 判断单链表有无环 a. 错误的思路&#xff1a;遍历陷入死循环 1&#xff09;和相交的遍历思路一样&#xff0c;找指向相同。 错误点 一直在死循环。 思考点&#xff1a;如何破环 b. 个人思路&#xff1a;反转链表回首结点 1&#xff09;目前的经验&#xff0c;无非就…

浅谈应该遵守的伦敦银交易规则

做伦敦银投资的朋友应遵守伦敦银交易规则&#xff0c;伦敦银交易规则不是指那些伦敦银交易技巧&#xff0c;而是在这个市场中要遵循的一些约定&#xff0c;下面我们就来讨论一下。 风险管理。风险管理即指投资者控制自己一笔乃至整体交易的风险&#xff0c;没有风险管理意识的投…

Vue 条件渲染 双向绑定

https://www.dedao.cn/ebook/reader?id5lZOKpMGr9mgdOvYa6Ej75XRo1NML3jx810k8ZVzb2nqPpDxBeJlK4AyQ8RPQv2z v-if实现条件渲染的功能。v-model实现双向数据传输。 v-model用来进行双向绑定&#xff0c;当输入框中的文字变化时&#xff0c;其会将变化同步到绑定的变量上&#…

【敏感词】敏感词检测功能v1.1.0版本正式上线

背景 为了解决系统发布信息时人工审核成本高的问题&#xff0c;开发一个敏感词检测系统。该系统能够自动检测用户输入的内容中是否包含敏感词&#xff0c;从而减少不合规内容的发布&#xff0c;降低人工审核成本。通过实施这个系统&#xff0c;可以提高信息发布的效率和准确性…

ArraysLambda表达式

目录 一、Arrays 1、Arrays操作数组的工具类​编辑 二、Lambda表达式 1、Lambda初体验 ​编辑 2、函数式编程 ​编辑 3、Lambda表达式的标准格式 3.1 示例代码 4、小结 ​编辑5、Lambda表达式的省略写法 ​编辑5.1 示例代码 5.2 小结 ​编辑6、Lambda表达式的练习 …

redis源码之:集群创建与节点通信(2)

在上一篇redis源码之&#xff1a;集群创建与节点通信&#xff08;1&#xff09;我们可知&#xff0c;在集群中&#xff0c;cluster节点之间&#xff0c;通过meet将对方加入到本方的cluster->nodes列表中&#xff0c;并在后续过程中&#xff0c;不断通过clusterSendPing发送p…

Jmeter 示例,格式为001-100,按顺序生成三位数的函数

1.先添加一个循环控制器&#xff0c;每次执行生成一个数, 2.添加一个beanshell Sample,编写代码,把按00X这个格式的数字&#xff0c;赋值给一个变量LoopCount // 从JMeter变量中获取当前的计数器值 String loopCountStr vars.get("LoopCount"); int loopCount (lo…

maven依赖报错处理(或者maven怎么刷新都下载不了依赖)

maven依赖报错&#xff0c;或者不报错&#xff0c;但是怎么刷新maven都没反应&#xff0c;可以试一下以下操作 当下载jar的时候&#xff0c;如果断网&#xff0c;或者连接超时的时候&#xff0c;会自动在文件夹中创建一个名为*lastupdate的文件&#xff0c;当有了这个文件之后…