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演示: 项目部分代码如下所示: #ifndef LABELEDEDIT_H #define LABELEDEDIT_H#include <QObject> #include <QWidget>…...

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

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

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

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...

华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...