初学者入门:认识STM32单片机

2023-11-15

本教程含有较多专业词汇,大部分时候,不完全理解并不影响继续往下阅读,大家只需要了解大致的概念即可。当然,也鼓励大家多查百度和多问chatgpt,让自己学会的更多。

什么是单片机?

单片机,就是把中央处理器CPU、存储器、等计算机的功能部件,和定时器、I/0(输入输出接口)、串口等外设集成在一块集成电路芯片上的微型计算机。

单片机的特点:

1.体积小,集成度高,电源功耗低

2.控制功能强,易拓展外设

3.价格便宜,性价比高

STM32是意法半导体(ST)推出一款32位的单片机。STM32具有超低的价格、超多的外设、丰富的型号、优异的实时性、极低的开发成本等优势。

既然大家已经了解单片机了(bushi) ,那我们就一起走进STM32的世界吧!

如下图,是STM32的系统结构原理图,是不是一脸懵,那就别看下面这个先

让我们简化并翻译一下:

各部分功能如下:

  1. CPU:包含运算器,控制器及若干寄存器,是单片机的控制和指挥中心。

  2. ROM(STM32中称为FLASH):用于存放程序和数据,为只读储存器。更改(擦除)和写入程序都较为麻烦,需要遵守FLASH相关的协议。可以认为是计算机的硬盘。

  3. RAM(STM32中称为SRAM):用于存放运算的中间结果、数据暂存及数据缓冲等。可以随机读入或读出,读写速度快,读写方便;但是断电或复位会丢失数据。可以认为是计算机的内存。

  4. 总线矩阵:总线矩阵用于主控总线之间的访问仲裁管理,提高了各部件交流的效率。

  5. 寄存器:虽然图里面没有寄存器,但是后续会经常提到它。寄存器可以看成储存0和1的一个指定名字和功能的地址。如果我们要在某个引脚输出一个低电平,我们只要往相的引脚对应的寄存器写一个1,即可实现.

  6. GPIO:通用型输入输出(接口),意思是你可以随意使用它输出或输入0和1,甚至以115200次每秒的速度翻转或接收0和1。

  7. 注意:上面的所有东西,都集成在了单片机的芯片上,因此说单片机集成度高,是真的很高。

虽然大家大致了解了STM32单片机的结构,但肯定还不清楚自己将要如何操控这个精妙装置。接下来,让我们一起了解一个程序如何实现整个运算过程。

一. 假设一个客户需求

1. x=3   y=x+5 

2. 先计算出y的值,若y大于0则点亮位于GPIO_ PA0(也就是单片机上的A0接口)处的LED

看起来很简单,但这是了解单片机运行原理的一个非常重要的案例:

二. 配置初始化文件

什么?你说你想直接把代码写了跑起来?

单片机还在睡觉呢,或者他脑袋里还想着上一个程序。

你输入单片机的每一个程序,都必须要用很多很多的篇幅告诉它,脑干怎么指挥全身(各种CPU指令)、心脏该怎么跳动(配置时钟树)、血液该怎么流动(定义各种宏以方便数据传输),因为每次输入新程序进去都完全擦除ROM再重写,所以每个程序都必须包含初始化的内容。不然,它当场给你表演一个原地睡觉(卡死)。

配置初始化文件的方法有两种:

1. 基于STM32库函数的开发

STM32库函数的开发,可以避免大家对着数据手册查并操作各种寄存器,而是直接用库的函数来实现各种参数的初始化和功能。

如果你想点亮一个led。你需要准备好一个包含整个单片机初始化的内容的源代码,如下图所示(不用细看,我也也不熟)。

然后再复制粘贴一个GPIO_init(初始化GPIO接口)的函数进去,然后再改成相应的序号。当然,如果你想启动串口、定时器、ADC等其他功能,也需要把相应的初始化代码块一个个塞进去,如下图所示(不用细看,不是重点)。

(上图:GPIO,PB5和PE5的初始化代码块)

然后再在主函数中输入相应的代码(见下一节),我们的程序才能完成。

使用标准库开发有助于大家更了解底层的代码和寄存器的使用,可以保证基础更加的扎实。但是对新手来说不够友好。

2. 基于STM32Cubemx(下面那个蓝蓝的软件,你们的好帮手)的HAL库开发

如果按照上面的方法,那当我们遇到下面问题的时候,可能就有些棘手:

我们手上有STM32f103c8t6单片机的启动文件,但是此次项目要求我们用STM32f427IIH单片机,且要求你打开CAN1、CAN2、USART1、USART2、TIM23456、和十路的PWM,并按照需求配置参数。那我们可要忙的屁股着火螺旋起飞啰,而且不好检查参数是否正确。

因此,我们需要有更加高效、准确的方法:使用STM32Cubemx配置文件

打开STM32Cubemx,并经过操作,可以看到如下界面:

你可以直接生成相应芯片(此时为F427iih)的初始化和配置文件,非常的舒服。

接下来,直接用图形化界面即可设置好各种参数(可以跟着详细的文档做,一套做下来就能用了)

(上图:左边为希望使用的功能,中间为功能的参数配置,右边为图形化的功能展示)

当然,我也是从萌新走过来的,第一次看到上图也很害怕,感觉自己根本驾驭不了这个恐怖的机器

下图是做出遥控小车的STM32f103c8t6和引脚图(仅供参考)。是不是感觉不算特别复杂?

什么?看起来还复杂。那我们只能通过我们自己的努力,慢慢熟悉这个软件。我也尽我的力把教程写的有趣一点,让大家愿意跟着一步一步走,收获更多的知识。

跑题了,当我们按下这个按钮

 我们就直接得到了一份结构规范的启动和初始化代码。(如下)

点几下鼠标,我们给单片机写的脑干、血液、心脏的程序就全部完成啦!

因此可以看出,STM32CubeMx是一个很便捷的图形化配置软件,可以快速配置、维护、修改工程。后续所有教程都将基于STM32Cubemx的开发。

三. 写代码

直接上干货

需求如下:

x=3   y=x+5

计算出y的值,若大于0则点亮位于GPIO_ PA0(也就是单片机上的A0接口)处的LED

代码是这个(基于HAL库编程)要写在主函数的无限循环中(为什么是无限循环呢,我们可以假设一个智能家居设备,即使你没按下按钮,他也会一直运行着,一直判断你是否按下按钮,或者监测一些其他的数据)

uint8_t x=3;      
uint8_t y=0;

while(1)
{
y=x+5;
if(y>0)
  GPIO_Writepin(GPIOA,GPIO_PIN_0,0);
}

代码很好读懂,定义x,y两个unsigned int类型的变量(HAL库有对数据类型单独进行宏定义,感兴趣的可以右击uint8_t并进入definition

 然后做加法,然后判断,若y>0,输出低电平,电流从LED的正极流进PA0,LED点亮。

四. 编译代码

STM32是机器,他只听得懂机器语言(汇编语言),因此我们需要把我们上面写的给人看的代码变成汇编语言,大概是下面的效果(别细看 不考)

因此我们写完代码,要点一下编译按钮。

此时的内容不只是程序,而更应该称为 指令。

五. 烧录代码

我们用专门的烧录器将代码直接烧写至单片机的FLASH内,即完成了代码的烧录。注:一般烧录后需要按一下复位的按钮单片机才会开始运行。

Keil这个软件等于说自带烧录的环境,只需要按照教程选好型号即可将编译好的代码烧录进单片机。

六. 代码如何变成现实(略微介绍一下微机原理,感兴趣可以看)

汇编语言的代码烧写至FLASH内。

复位单片机!

单片机开始运行!

PC(程序计数器)从零开始累加,执行以下循环

  1. 它数到n,FLASH里的n号指令被取出,拿去CPU执行。

  2. 指令会涉及到一个地址,某个数字住在内存的一个房间里,房间的号码叫做地址。这一步只会将地址送去地址寄存器,并解出住在那的数字。

  3. 那个数字被拿去CPU,进行计算,计算结果将以变量放在某处

这三步,每步的时间,在STM32f103c8t6单片机中,大约为一至两个机器周期,也就是10——40纳秒。

在第n=114514时,CPU收到指令,将一个1塞进一个叫GPIOA->BRR寄存器的某一位中

随着一个1塞进了那个位置,寄存器的电路所连接的一个三极管轰然导通,电流如泉涌一般沿着三极管导向了GND(可以理解为负极),如此,那个名为PA0的引脚变为了低电平,LED也随之点亮。

七. 总结

这就是我们如何点亮一个led的全过程,写的挺粗糙的。希望这篇教程能起到抛砖引玉的效果,让大家能通过此教程了解到单片机工作的原理,并有兴趣更进一步的深入学习,在之后的学习中事半功倍。

其他的教程,由于CSDN插入图片较为麻烦,因此我直接将生成的PDF文档放入免费的资源中,可以进入我的主页查找。

如下,包含IO、PWM控制舵机、电路搭建、电机控制的教程,代码和演示视频,都置于其中。

(80条消息) 基于STM32的机械臂遥控麦轮小车-之超级适合新手的教程-嵌入式文档类资源-CSDN文库

祝大家学业有成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初学者入门:认识STM32单片机 的相关文章

  • 餐饮行业RPA之5大应用场景

    眼下 伴随着一系列风险因素 餐饮业的情况变得越来越困难 规模较小 财务状况较差的餐饮商户面临着极大的生存挑战 即使是有一定知名度和客源的大品牌餐饮加盟连锁店 也被逼到了墙角 近年来 餐饮业市场竞争激烈 而且同质化严重 即使没有疫情冲击 众多
  • 计算机恢复工具有哪些,电脑数据恢复软件选哪个?这三款恢复工具不容错过

    不论我们是使用电脑来编写学习论文 还是完成老师所留的专业作业 再或者是处理日常工作或者是紧急工作 我们都会在电脑上存储一些重要的文件 就算我们的电脑不是学习或工作所用的话 那么电脑上也会存储一些自己认为比较重要的文件的 即便我们将重要的文件

随机推荐

  • 基于SSM的图书管理系统

    一 系统简介 该项目是基于Java的SSM框架实现的图书管理系统 二 技术实现 1 后台框架 Spring SpringMVC MyBatis Ajax 2 UI界面 BootStrap 3 数据库 MySQL 5 7 4 加密 md5 随
  • java类库EthereumJ如何操作以太坊区块链

    在本文中 我们将看一下EthereumJ库 它允许我们使用Java与以太坊区块链进行交互 以太坊作为一种加密货币 利用去中心化 点对点 可编程区块链形式的数据库 以太坊虚拟机 EVM 通过连接不同的节点进行同步和操作 节点通过共识同步区块链
  • 哈夫曼树编码-C语言

    文章目录 哈夫曼树编码 1 实验目的 2 实验内容 3 实验工具 4 实验代码 5 实验结果 6 实验分析 7 资料 哈夫曼树编码 1 实验目的 了解二叉树的定义 理解二叉树的基本性质和存储结构 掌握哈夫曼树的构造 实现哈夫曼编码与译码算法
  • CVE-2017-16995————Ubuntu本地提权漏洞

    前言 近期看到了Ubuntu本地提权漏洞所以顺手演示一份 实践一波 漏洞描述 Ubuntu是一个以桌面应用为主的开源GNU Linux操作系统 基于Debian GNU Linux 近期有白帽子爆出 ubuntu 的最新版本 Ubuntu
  • 外置存储权限在哪打开_安卓手机外置sd卡权限怎么打开

    展开全部 在2 x的版本中 在manifest中配置的权限e68a843231313335323631343130323136353331333365643662android permission WRITE EXTERNAL STORA
  • bug: TypeError: Invalid attempt to spread non-iterable instance

    报错信息 分析 此类报错多为扩展运算符报错 问题代码 解决方式
  • Win11系统pin码忘记了怎么办?Win11忘记pin码解决方法

    Win11系统pin码忘记了怎么办 如果我们忘记了这个密码 那么就会导致无法进入到系统来使用电脑了 这个问题还是比较让人着急的 特别是需要开机进行电脑急用的用户 那么我们怎么去解决这个问题 接下来一起看看Win11忘记pin码解决方法 Wi
  • Windows时间戳的计算

    一 实验目的 掌握Windows中FileTime时间戳的手工解析方法 利用WinHex或X Ways等十六进制编辑器进行手工取证 把Windows中 MFT文件里记载的十六进制时间转化为 年月日时分秒 的可读时间 加深对于时间戳的理解 二
  • 日本核污水今日入海,这帮黑客怒了!

    自2011年东日本大地震以来 日本谋划已久的福岛核电站核污水排海计划已于8月24日下午起正式施行 预计排污周期长达30年 整个海洋及其生物都有可能遭受难不可逆的毁灭性打击 据现场媒体报道 经过17分钟的流淌 核污染水经由1公里的海底隧道流进
  • Web框架中的ORM框架

    Web框架中的ORM框架 在 Python 实现的 Web 框架中 通过 API 接口来访问后端的视图函数 视图函数对数据库中的数据进行处理然后返回给前端 在这个过程中 视图函数不是直接通过 SQL 来操作数据库 而是通过模型类的对象属性或
  • C语言练习题(15) 有如下代码,则 *(p[0]+1) 所代表的数组元素是( )(非常详细的讲解)

    1 有如下代码 则 p 0 1 所代表的数组元素是 int a 3 2 1 2 3 4 5 6 p 3 p 0 a 1 A a 0 1 B a 1 0 C a 1 1 D a 1 2 解析 C a 3 2 1 2 3 4 5 6 p 0 代
  • Ubuntu 16.04 gcc降级为4.8版本

    1 下载gcc g 4 8 sudo apt get install y gcc 4 8 sudo apt get install y g 4 8 2 链接gcc g 实现降级 cd usr bin sudo rm gcc sudo ln
  • 【算法与数据结构】236、LeetCode二叉树的最近公共祖先

    文章目录 一 题目 二 解法 三 完整代码 所有的LeetCode题解索引 可以看这篇文章 算法和数据结构 LeetCode题解 一 题目 二 解法 思路分析 根据定义 最近祖先节点需要遍历节点的左右子树 然后才能知道是否为最近祖先节点 那
  • localhost 已拒绝连接。

    Tomcat的localhost 8080拒绝访问 直接在tomcat的bin目录下双击startup bat 启动就好了 再访问localhost 8080就可以出来了
  • 坑爹公司大盘点 --- 转自拉钩

    那些年我们满怀憧憬迈入社会 却遭遇了理想与现实的碰撞 一起看看网上盘点的坑爹公司吧 遇到这样的公司真的是醉了 gt 转自拉钩 1 头衔公司 从入职第一天 就封你为大中华区销售总监 或者全球发行战略副总裁 全国市场委员会主席 然后没有手下 没
  • 如何有效保证Java代码单元测试覆盖率

    背景介绍 我们在实际项目开发过程中 不同level的童鞋由于专业技能的层次不同 导致在参与实际开发的业务代码中经常会出现各种bug 项目管理中好的pm或许会给充足的时间来让开发童鞋们定位修复这些bug 也有各种客观原因的PM不会在项目中预留
  • Spring Boot使用方法

    Spring Boot 七步走 1 勾选包 Spring Boot是自带TomCat的 创建Spring Boot工程文件 创建时需要更改资源下载地址 我选择阿里云的这个地址 而且Spring Boot不需要导包 只需要勾选需要的包 进入后
  • 深度学习基础:SVD奇异值分解及其意义【转】

    排版较好的一版 http shartoo github io SVD decomponent 上面的补充 奇异值的物理意义是什么 https www zhihu com question 22237507 answer 225371236
  • 使用 ELK 收集日志

    在当前分布式 微服务架构下 各个应用都部署在不同的服务器上 每个应用都在记录着自己重要或者不重要的日志信息 当我们要通过日志信息来排查错误时 可以根据出错应用在对应的机器上找报错相关的日志信息 但是 可能我们不具有相应服务器的访问权限 也可
  • 初学者入门:认识STM32单片机

    本教程含有较多专业词汇 大部分时候 不完全理解并不影响继续往下阅读 大家只需要了解大致的概念即可 当然 也鼓励大家多查百度和多问chatgpt 让自己学会的更多 什么是单片机 单片机 就是把中央处理器CPU 存储器 等计算机的功能部件 和定