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,以及老年代的垃圾回收算…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...