当前位置: 首页 > news >正文

STM32 01

1、编码环境

1.1 安装keil5

1.2 安装STM32CubeMX

        使用STM32CubeMX可以通过界面的方式,快速生成工程文件

        安装包可以从官网下载:https://www.st.com/zh/development-tools/stm32cubemx.html#overview

        安装完要注意更新一下固件包的位置,因为它的固件包比较大,默认是在C盘的,可以改在其它盘。打开软件-Help-Updater Settings,第一次打开可能会要求过几秒再打开,然后进行修改即可。

2、使用Keil5创建stm32工程

        stm32需要很多文件才能正常写代码,例如主函数、中断系统函数、初始化文件、内核、启动文件、外设库函数等,所以我们需要把stm32作为一个工程来管理,在一个工程中创建几个文件夹来管理这些不同功能的函数。

        在这里我把一个工程中分为以下几个文件夹:User(主函数、中断系统函数、初始化文件)、Core(内核、启动文件)、Library(官方外设库函数)、Hardware(自己编写对硬件调用部分)、System(自己写的延迟函数之类)。

        先新建一个准备用来存放工程的文件夹,然后打开keil5软件,选择Project-New Project,

        然后选择我们新建的工程文件夹,点进去,然后取个工程文件的名字(例如我这里取的是Project),要注意文件夹的名字后期改还可以随意,工程文件的名字后面就不能随便改了。

        保存之后,根据自己的芯片选择器件型号,这里选的是STM32F103C8,因为我这里的芯片型号是stm32f103c8t6。

        点击OK之后会弹出一个keil软件的一个新建工程小助手,可以帮助我们快速新建工程,不需要可以直接叉掉(我没有用,就直接叉掉了),之后就会显示新建的工程页面,现在的工程还是空的,不能直接用,还要添加一些工程必备文件。

        然后来到工程文件夹中按照开头说的,建立一些专门的文件夹用来放专门的文件,在Start文件夹中放stm32启动文件、对stm32外设寄存器描述的文件(描述stm32有哪些外围寄存器以及对应的地址位置)以及用来配置时钟的system文件,在Core文件夹中存放对内核寄存器的描述文件,到这里,工程的必要文件就可以了。然后将这些都配置到工程中,选中Sorce Group 1,改成Start,和工程文件夹中我们新建的保持一致,然后右键选择添加已有文件(直接双击Start也可以),然后将文件类型改为ALL files,添加所有文件即可。然后还要在工程文件选项中加入这个文件夹的头文件路径,要不然软件是找不到.h文件的。点击魔术棒按钮,打开工程选项,在C/C++中,找到Include Paths,点击右边3个点,进去之后新建路径,把Start的路径添加进来,点击OK就可以了。然后重复上述过程把Core文件夹也添加进去就可以了。

        如果要新建一个User文件夹来放main.c文件,可以在Target 1那里右键添加组,右键添加新文件,选择C文件,名字就叫main,路径选择User文件夹,要不然默认是放在文件夹外面的,

        接下来,新建Library文件夹,里面又包含src和inc文件夹,用来存放stm32标准外设驱动库,src里放这些库函数的源文件,inc里放这些库函数的头文件。这时候这些库函数还不能直接使用,还要添加一个用于配置库函数头文件包含关系的文件以及两个用于存放中断函数的文件,将这些放在User文件夹中。最后还需要一个宏定义,可以在main函数的头文件右键打开这个文件,滑到最后。可以看到一个条件编译语句,如果我们定义了USE_STDPERIPH_DRIVER(标准外设驱动)这个字符串,下面这个#include "stm32f10x_conf.h"语句才有效。所以我们还需要复制USE_STDPERIPH_DRIVER这个语句,然后点魔术棒打开工程选项,在C/C++的Define添加这个字符串,这样才能包含标准外设库,也就是库函数,当然还有下面的头文件路径也不要忘了。

        到此,基本工程就建立好了,点击箱子按钮还可以更改文件夹的排序。

3、使用STM32CubeMX生成工程文件

3.1 点击ACCESS TO MCU SELECTOR

        点击之后会出现这样的界面

        在左上角搜索对应的芯片

        在右侧双击对应的芯片,就会基于这个芯片生成文件

        然后我们就可以根据需要在这里进行相应的配置,比如我我要PB8和PB9的输出管脚功能

        选择之后可以看到是这样的,左边可以对其进行更加具体的配置

        要注意在SYS这里,原来默认的Debug是No Debug的,我们要将其改成Serial Wire,这样就可以进行重复的修改

        在Project Manager这里,我们要给这次的工程取个名字,选择存储路径(不能有中文),将Toolchain/IDE改成MDK-ARM(这样改了之后,它自动生成的代码之后就会自动调用keil软件去打开这个工程项目)。

        在Code Generator部分,可以选择只拷贝我们这个工程需要用到的库,选择针对外设的固件库要生成配对的.c/.h文件

        都选择好之后就可以就可以点击右上角的GENERATE CODE自动生成代码了。生成完点击中间的Open Project,就会用keil自动打开这个工程了。

4、STM32单片机

4.1 什么是单片机

        单片机(Single-Chip Microcomputer)是一种集成电路芯片,把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。

4.2 STM系列单片机命名规则

        ST——意法国半导体

        M——Microelectionics微电子

        32——总线宽度

4.3 标准库和HAL库的区别

4.3.1 寄存器

        stm32的寄存器众多,需要经常翻阅芯片手册,费时费力;但是直接使用寄存器更具灵活性,可以随心所欲达到自己的目的;可以深入理解单片机的运行原理,知其然更知其所以然。

4.3.2 标准库

        将寄存器底层操作都封装起来,提供一整套接口(API)供开发者调用;每款芯片都编写了一份库文件,也就是工程文件里stm32F1xx...之类的;配置结构体变量成员就可以修改外设的配置寄存器,从而选择不同的功能;大大降低单片机开发难度,但是在不同芯片间不方便移植。

4.3.3 HAL库

        ST公司目前主力推的开发方式,新的芯片已经不再提供标准库;为了实现在不同芯片之间移植代码;为了兼容所有芯片,导致代码量庞大,执行效率低下。
 

        

相关文章:

STM32 01

1、编码环境 1.1 安装keil5 1.2 安装STM32CubeMX 使用STM32CubeMX可以通过界面的方式,快速生成工程文件 安装包可以从官网下载:https://www.st.com/zh/development-tools/stm32cubemx.html#overview 安装完要注意更新一下固件包的位置,因为…...

学习笔记:【QC】Android Q - phone 模块

一、phone init 流程图 二、phone MO 流程图 三、phone MT 流程图 四、Log分析(MO_qcril_hal_分析) 1、RILJ请求dial enqueue进队列,QCRIL-hal pop出来处理,最后还是调用qmi_client_send_msg_async发送给modem 11-07 17:29:23.598 2758 2758 D RILJ …...

webscoket+webrtc实现语音通话

1.项目方案 前端采用webrtc创建音频上下文,后创建音频源输入和音频处理器,连接音频输入与处理器,处理器再连接到音频输出(扬声器),再通过事件获取音频数据,把音频数据转换成字节数据通过webscok…...

PHP源码_众筹商城

众筹商城源码 众筹商品平台 商城加共识元富之路 网上商城众筹 前端是编译后的,后端PHP,带商城 运行截图 源码贡献 https://githubs.xyz/boot?app39 部分数据库表 CREATE TABLE ti_shopro_store (id int(11) NOT NULL AUTO_INCREMENT COMMENT ID,nam…...

智能小程序 Ray 开发——表单组件 Button 和 Checkbox 实操讲解

Button 多端按钮基础组件,可用于进行强交互的操作。 导入 import { Button } from ray-js/ray; 属性说明 属性类型默认值必填说明支持平台sizekeyof Sizedefault否按钮的大小涂鸦、微信typekeyof Typedefault否按钮的样式类型涂鸦、微信plainbooleanfalse否按钮…...

渗透之sql注入联合查询的注入

sql注入产生的原因: 由于程序过滤不严谨,导致用户有一些异常输入,最终触发数据库的查询。所以会出现sql注入这个问题。有些恶意的人就会利用这些信息导致数据库泄露。 注意:一般我们存在注入点我们会查询管理员的账号和密码&#…...

NLP transformers - 文本分类

Text classification 文章目录 Text classification加载 IMDb 数据集Preprocess 预处理EvaluateTrainInference 本文翻译自:Text classification https://huggingface.co/docs/transformers/tasks/sequence_classification notebook : https://colab.research.googl…...

QT 开发COM(ActiveX)组件基础介绍和方案验证

一、COM简介 1.1 COM是什么? COM,Component Object Model,即组件对象模型,是一种以组件为发布单元的对象模型,这种模型使各软件组件可以用一种统一的方式进行交互。COM 既提供了组件之间进行交互的规范,也…...

[1673]jsp在线考试管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 在线考试管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…...

每日一算法

问题 等待登机的你看着眼前有老有小长长的队伍十分无聊,你突然 想要知道,是否存在两个年龄相仿的乘客。每个乘客的年龄用 1个0 到 36500 的整数表示,两个乘客的年龄相差 365 以内 就认为是相仿的。 具体来说,你有一个长度为 n 的…...

Spring Cloud Gateway直接管理Vue.js的静态资源

1. 构建Vue.js应用 像之前一样,构建你的Vue.js应用,并将生成的静态资源(位于dist目录)复制到Spring Boot项目的某个目录,比如src/main/resources/static。 2. 配置Spring Boot静态资源处理 Spring Boot默认会处理sr…...

14.集合、常见的数据结构

集合 概念 Java中的集合就是一个容器,用来存放Java对象。 集合在存放对象的时候,不同的容器,存放的方法实现是不一样的, Java中将这些不同实现的容器,往上抽取就形成了Java的集合体系。 Java集合中的根接口&#x…...

NLP从入门到实战——命名实体识别

1. 命名实体识别 1.1 概念 中文命名实体识别(Named Entity Recognition,NER是指识别中文文本中实体的边界和类别。命名实体识别是文本处理中的基础技术,广泛应用在自然语言处理、推荐系统、知识图谱等领域,比如推荐系统中的基于…...

接口测试工具-postman介绍

一、介绍 Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。 作用:常用于进行接口测试。 它可以模拟浏览器发起任何形式的HTTP请求...

日志中看到来自User Agent go-http-client / 1.1的大量请求(go-http-client 1.1)服务器爆了

在日志中看到来自User Agent go-http-client / 1.1的大量请求 The go-http-client/1.1 User Agent 是Google的Bot / Crawler 这不是真的。这可能是指Go库(根据您提到的来源,由Google开发,但是我找不到可靠的信息)。 之前写过“G…...

yolov8 区域声光报警+计数

yolov8 区域报警计数 1. 基础2. 报警功能2. 1声音报警代码2. 2画面显示报警代码 3. 完整代码4. 源码 1. 基础 本项目是在 yolov8 区域多类别计数 的基础上实现的,具体区域计数原理可见上边文章 2. 报警功能 设置一个区域region_points,当行人这一类别…...

《QT实用小工具·五十五》带有标签、下划线的Material Design风格输入框

1、概述 源码放在文章末尾 该项目实现了一个带有标签动画、焦点动画、正确提示、错误警告的单行输入框控件。下面是demo演示&#xff1a; 项目部分代码如下所示&#xff1a; #ifndef LABELEDEDIT_H #define LABELEDEDIT_H#include <QObject> #include <QWidget>…...

用Go实现一个无界资源池

写在文章开头 我们希望通过go语言实现一个简单的资源池&#xff0c;而这个资源池的资源包括但不限于: 数据库连接池线程池协程池网络连接池 只要这些资源实现我们指定的关闭方法&#xff0c;则都可以通过我们封装的资源池进行统一管理&#xff0c;需要简单说明一下这个资源池…...

Apache Seata基于改良版雪花算法的分布式UUID生成器分析2

title: 关于新版雪花算法的答疑 author: selfishlover keywords: [Seata, snowflake, UUID, page split] date: 2021/06/21 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 关于新版雪花算法的答疑 在上一篇关于新版雪花算法的解析中…...

13、揭秘JVM垃圾回收器:面试必备知识,你掌握了吗?

13.1、前文回顾 在上一篇文章中,我们详细分析了触发Minor GC的时机,以及对象何时会从新生代迁移到老年代。我们还讨论了为了确保新生代向老年代的内存迁移安全,需要在Minor GC之前如何检查老年代的内存空间,以及在什么情况下会触发老年代的Full GC,以及老年代的垃圾回收算…...

治疗耳鸣患者案例分享第二期

“患者耳鸣20年了&#xff0c;目前耳朵没有堵或者胀的感觉&#xff0c;但是偶尔有点痒&#xff0c;平时会有头晕头胀这种情况&#xff0c;然后头晕是稍微晕炫一下。然后头疼是经常有的&#xff0c;头胀不经常。” 患者耳鸣持续20年&#xff0c;虽然耳朵没有堵或胀的感觉&#x…...

数据加密的方法

这些方法可以单独或结合使用&#xff0c;以提高数据的安全性和保护隐私。 对称加密&#xff1a;使用相同的密钥对数据进行加密和解密。常见的对称加密算法包括DES、AES和RC4。 非对称加密&#xff1a;使用一对密钥&#xff08;公钥和私钥&#xff09;对数据进行加密和解密。发…...

Android BINDER是干嘛的?

1.系统架构 2.binder 源码位置&#xff1a; 与LINUX传统IPC对比...

运维各种中间件的手动安装(非常详细)

压缩文件夹 tar -zcvf newFolder.tar.gz oldFolder 把oldFolder文件夹压缩成newFolder.tar.gz解压文件夹 tar -zxvf 压缩文件名.tar.gzlinux安装jdk &#xff08;参考 https://blog.csdn.net/qq_42269466/article/details/124079963 &#xff09; 1、创建目录存放jdk包 mkd…...

【Android】Android应用性能优化总结

AndroidApp应用性能优化总结 最近大半年的时间里&#xff0c;大部分投在了某国内新能源汽车的某款AndroidApp开发上。 由于该App是该款车上&#xff0c;常用重点应用。所以车厂对应用性能的要求比较高。 主要包括&#xff1a; 应用冷启动达到***ms。应用热(温)启动达到***ms应…...

FBA头程海运发货流程是怎样的?

FBA头程发货作为整个FBA流程的关键一环&#xff0c;更是直接影响到商品从起点到终点的流通效率和成本。其中&#xff0c;海运作为一种经济、稳定的运输方式&#xff0c;在FBA头程发货中扮演着举足轻重的角色。那么&#xff0c;FBA头程海运发货流程究竟是怎样的呢? 1、装箱与发…...

二、VLAN原理和配置

vlan不是协议&#xff0c;是一个技术&#xff0c;虚拟局域网技术&#xff0c;基于802.1q协议。 vlan&#xff08;虚拟局域网&#xff09;&#xff0c;将一个物理的局域网在逻辑上划分成多个广播域的技术。 目录 1.冲突域和广播域 概念 范围 2.以太网帧格式 3.以太网帧封装…...

stackqueue类——适配器模式 双端队列deque(C++)

接下来我们将实现 stack、queue 类的常用函数&#xff0c;其实对于 stack 和 queue 的常用函数实现可以说得上是非常简单&#xff0c;若想详细了解可以看这篇&#xff1a;栈和队列&循环队列&#xff08;C/C&#xff09;_栈和循环队列-CSDN博客&#xff1b;在本篇中我们将使…...

SpringCloud知识点梳理

1. Spring Cloud 综述 1.1 Spring Cloud 是什么 [百度百科]Spring Cloud是⼀系列框架的有序集合。它利⽤Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中⼼、消息总线、负载均衡、断路器、数据监控等,都可以⽤ Spring Boot的开发⻛格…...

【NOI】C++程序结构入门之分支结构二

文章目录 前言一、逻辑运算符1.导入2.逻辑与&#xff08;&&&#xff09;3.逻辑或&#xff08;||&#xff09;4.逻辑非&#xff08;!&#xff09; 二、例题讲解问题&#xff1a;1656. 是两位的偶数吗问题&#xff1a;1658. 游乐设施问题&#xff1a;1659. 是否含有数字5…...

新疆网站建设一条龙服务/暴风seo论坛

写在前面 又到了收割Offer的季节&#xff0c;你准备好了吗&#xff1f;曾经的我&#xff0c;横扫各个大厂的Offer。还是那句话&#xff1a;进大厂临时抱佛脚是肯定不行的&#xff0c;一定要注重平时的总结和积累&#xff0c;多思考&#xff0c;多积累&#xff0c;多总结&#…...

做育儿类网站用什么程序好/seo在线培训机构

WM_CTLCOLOR消息用来完成对EDIT, STATIC, BUTTON等控件设置背景和字体颜色, 其用法如下: 1.首先在自己需要设置界面的对话框上点击右键-->建立类向导-->加入WM_CTLCOLOR消息-->自动生成OnCtlColor()函数, 此函数可以对本对话框的控件的界面外观做修饰, 用法如下: 将类…...

建设部网站进不去/自己怎么做一个网页

为什么使用正则表达式&#xff1a; 典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。虽然这种技术对于对静态文本执行简单搜索和替换任务可能已经足够了&#xff0c;但它缺乏灵活性&#xff0c;若采用这种方法搜索动态文本&#xff0c;即使不是不可能&#xff…...

个人域名可以做网站吗/今日新闻联播主要内容摘抄

java类的成员变量有俩种&#xff1a; 一种是被static关键字修饰的变量&#xff0c;叫类变量或者静态变量 另一种没有static修饰&#xff0c;为成员变量 简单说&#xff1a; 类的静态变量在内存中只有一个&#xff0c;java虚拟机在加载类的过程中为静态变量分配内存&#xff0c…...

帝国cms新闻网站源码/餐饮最有效的营销方案

为什么需要并发程序&#xff1f; 线程是java语言中不可或缺的重要功能&#xff0c;它们能使复杂的异步代码变得更简单&#xff0c;从而极大地简化了复杂系统的开发。另外&#xff0c;在开发当数据量大的时候&#xff0c;往往需要使用多线程来提高程序的运行速度&#xf…...

网站做公司/网站怎么打开

题目链接&#xff1a;https://nanti.jisuanke.com/t/31001 分析&#xff1a;分层图最短路 https://www.cnblogs.com/ywjblog/p/9270423.html 代码&#xff1a; #include <map> #include <set> #include <list> #include <cmath> #include <queue>…...