Stm32CubeMX+Proteus仿真入门 STM32开发环境+最小系统介绍

📅 发布时间:2026/7/11 8:49:31 👁️ 浏览次数:
Stm32CubeMX+Proteus仿真入门 STM32开发环境+最小系统介绍
Stm32CubeMXProteus仿真入门第一章1. 前言本教程主要服务于STM32初学者(菜鸡)结合Stm32CubeMX和Protues教一些基本单片机概念。2. 开发环境搭建编译软件为Keil 5 MDK 525Prestm32cubemxKEIL5 MDK仿真软件版本Proteus8.9或者更新版本部分实物演示使用的开发板型号为普中-精灵1 STM32F103C8T63. STM32介绍STM32分为三部分ST是公司名称–意法半导体。M是Microelectronics 的缩写表示微控制器。32表示32位处理器。结合起来就是意法半导体公司设计开发的一系列芯片大学牲最常用的芯片型号是STM32F103c8t6。除了STM32市面上常见的32位微控制器还有GD32MM32等国产芯片NXP的S32K3等国外芯片。本教程仿真使用的芯片是STM32F103C6T6芯片引脚脚位和STM32F103C8T6一致内部资源比C8T6少。细节上主要有以下几点区别。1.C6T6没有串口3及USART32.C6T6没有通用定时器TIM43.C6T6没有串行外设接口SPI24.C6T6没有I2C25.C6T6的flas为32K C8T6为64K6.C6T6的RAM为10KC8T6为20K。选择C6主要是为了适配更多Proteus 版本以及兼顾实物测试。STM32F103C8T6 芯片有这么多管脚那么怎么知道相应管脚的具体功能呢我们可以通过芯片数据手册来查找STM32F103C8T6 芯片数据手册在资料“03数据手册STM32F103C6T6A_规格书_ST(意法半导体)单片机(MCU_MPU_SOC)规格书.pdf”。打开第25页。STM32 的应用取决于其内部资源前面STM32内部拥有非常多的通信接口。所以如果你使用的模块拥有此接口就可以通信。STM32Proteus可以实现按键、数码管、点阵屏、LCD1602、DHT11、DS18B20等常见的元器件仿真。以下分别是基于STM32土壤湿度检测自动浇水仿真设计HAL库、STM32温湿度测量报警仿真设计标准库、 简易电子秒表仿真设计标准库。4. STM32软件开发4.1. 软件开发方法STM32的三种开发方式通常新手在入门STM32的时候首先都要先选择一种要用的开发方式不同的开发方式会导致你编程的架构是完全不一样的。一般大多数都会选用标准库和HAL库而极少部分人会通过直接配置寄存器进行开发。注意以下三种方法主要是针对初始化业务代码还是需要自己来动手写只不过在调用底层代码的时候有区别。网上关于标准库、HAL库的描述相信是数不胜数。可是一个对于很多刚入门的朋友还是没法很直观的去真正了解这些不同开发发方式彼此之间的区别所以笔者想以一种非常直白的方式用自己的理解去将这些东西表述出来如果有描述的不对的地方或者是不同意见的也可以大家提出。1、直接配置寄存器不少先学了51的朋友可能会知道会有一小部分人或是教程是通过汇编语言直接操作寄存器实现功能的这种方法到了STM32就变得不太容易行得通了因为STM32的寄存器数量是51单片机的十数倍如此多的寄存器根本无法全部记忆开发时需要经常的翻查芯片的数据手册此时直接操作寄存器就变得非常的费力了。但还是会有很小一部分人喜欢去直接操作寄存器因为这样更接近原理知其然也知其所以然。2、标准库上面也提到了STM32有非常多的寄存器而导致了开发困难所以为此ST公司就为每款芯片都编写了一份库文件也就是工程文件里stm32F1xx…之类的。在这些 .c .h文件中包括一些常用量的宏定义把一些外设也通过结构体变量封装起来如GPIO口时钟等。所以我们只需要配置结构体变量成员就可以修改外设的配置寄存器从而选择不同的功能。也是目前最多人使用的方式也是学习STM32接触最多的一种开发方式我也就不多阐述了。3、HAL库HAL库是ST公司目前主力推的开发方式全称就是Hardware Abstraction Layer抽象印象层。库如其名很抽象一眼看上去不太容易知道他的作用是什么。实际上就是为了让开发者脱离底层初始化更方便移植代码更适合大学牲做课程设计和毕业设计。它的出现比标准库要晚但其实和标准库一样都是为了节省程序开发的时期而且HAL库尤其的有效如果说标准库把实现功能需要配置的寄存器集成了那么HAL库的一些函数甚至可以做到某些特定功能的集成。也就是说同样的功能标准库可能要用几句话HAL库只需用一句话就够了。并且HAL库也很好的解决了程序移植的问题不同型号的stm32芯片它的标准库是不一样的例如在F4上开发的程序移植到F3上是不能通用的而使用HAL库只要使用的是相通的外设程序基本可以完全复制粘贴注意是相通外设意思也就是不能无中生有例如F7比F3要多几个定时器不能明明没有这个定时器却非要配置但其实这种情况不多绝大多数都可以直接复制粘贴。是而且使用ST公司研发的STMcube软件可以通过图形化的配置功能直接生成整个使用HAL库的工程文件可以说是方便至极但是方便的同时也造成了它执行效率的低下在各种论坛帖子真的是被吐槽的数不胜数。–参考文章https://blog.csdn.net/u012846795/article/details/122227823需注意本教程使用的正是第三种开发方法使用的是图形编程工具STM32cubeMX做初始化。除此之外Hal还可以通过开发者自行移植标准hal库新建工程完成代码初始化。4.2. stm32 GPIO介绍GPIO简单理解为用户可以修改单片机引脚输入或者输出功能。GPIO有8 种工作模式。GPIO_Mode_AIN 模拟输入GPIO_Mode_IN_FLOATING 浮空输入GPIO_Mode_IPD 下拉输入GPIO_Mode_IPU 上拉输入GPIO_Mode_Out_OD 开漏输出GPIO_Mode_Out_PP 推挽输出GPIO_Mode_AF_OD 复用开漏输出GPIO_Mode_AF_PP 复用推挽输出GPIO其内部结构图,如下图片在Stm32F1xx中文参考手册的105页1保护二极管IO引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入当引脚电压高于VDD_FT时上方的二极管导通当引脚电压低于VSS时下方的二极管导通防止异常常电压引入芯片导致芯片烧毁。2上拉、下拉电阻控制引脚默认状态的电压。打开上拉的时候引脚默认电压为高电平打开下拉的时候引脚默认电压为低电平。3TTL施密特触发器基本原理是当输入电压高于正向阈值电压输出为高当输入电压低于负向阈值电压输出为低IO口信号经过触发器后可以将电平分为高电平与低电平也就是1和0的数字信号并且符合TTL电平协议这就是STM32可以产生TTL信号的原因。4P-MOS管和N-MOS管输出电平信号由P-MOS管和N-MOS管决定高电平时P-MOS管导通N-MOS管关闭输出高电平低电平时P-MOS管关闭N-MOS管导通输出低电平这就使得GPIO具有“推挽输出”和“开漏输出”的模式 。右侧I/O引脚部分为芯片暴露在外部的引脚每个引脚在数据手册都有说明是否支持(识别))5V电压GPIO的8种工作方式4种输入模式输入浮空输入上拉输入下拉模拟输入4种输出模式开漏输出开漏复用功能推挽输出推挽复用功能可配置3种最大翻转速度2MHz10MHz50MHz1.GPIO输入工作模式1-输入浮空模式1)外部通过IO口输入电平,外部电平通过上下拉部分(浮空模式下都关闭,既无上拉也无下拉电阻)2)传输到施密特触发器(此时施密特触发器为打开状态)3)继续传输到输入数据寄存器IDR4)CPU通过读输入数据寄存器IDR实现读取外部输入电平值在输入浮空模式下可以读取外部输入电平常见应用浮空输入模式由于输入阻抗较大一般把这种模式用于标准通信协议的 I2C,USART 的接收端2.GPIO输入工作模式2-输入上拉模式和输入浮空模式相比较,不同之处在于内部有一个上拉电阻连接到VDD(输入上拉模式下,上拉电阻开关接通,阻值约30-50K)外部输入通过上拉电阻,施密特触发器存入输入数据寄存器IDR,被CPU读取常见应用监测外部电平信号比如按键开关。3.GPIO输入工作模式3-输入下拉模式和输入浮空模式相比较,不同之处在于内部有一个下拉电阻连接到VSS(输入下拉模式下,下拉电阻开关接通,阻值约30-50K)外部输入通过下拉电阻,施密特触发器存入输入数据寄存器IDR,被CPU读取常见应用监测外部电平信号比如按键开关。4.GPIO输入工作模式4-输入模拟模式上拉和下拉部分均为关闭状态(AD转换-模拟量转换为数字量)施密特触发器为截止状态通过模拟输入通道输入到CPUIO口外部电压为模拟量(电压形式非电平形式),作为模拟输入范围一般为0~3.3V常见应用通过单片机引脚测量外部电压值5.GPIO输出工作模式1-开漏输出模式1,CPU写入位设置/清楚寄存器BSRR,映射到输出数据寄存器ODR2,联通到输出控制电路(也就是ODR的电平)3,ODR电平通过输出控制电路进入N-MOS管ODR输出1:N-MOS截止,IO端口电平不会由ODR输出决定,而由外部上拉/下拉决定在输出状态下,输出的电平可以被读取,数据存入输入数据寄存器,由CPU读取,实现CPU读取输出电平所以,当N-MOS截止时,如果读取到输出电平为1,不一定是我们输出的1,有可能是外部上拉产生的1ODR输出0:N-MOS开启,IO端口电平被N-MOS管拉倒VSS,使IO输出低电平此时输出的低电平同样可以被CPU读取到常见应用普通开漏输出模式一般应用在电平不匹配的场合如需要输出5V的高电平就需要在外部一个上拉电阻电源为5V把GPIO设置为开漏模式当输出高阻态时由上拉电阻和电源向外输出5V电平。6.GPIO输出工作模式2-开漏复用输出模式与开漏输出模式唯一的区别在于输出控制电路之前电平的来源开漏输出模式的输出电平是由CPU写入输出数据寄存器控制的开漏推挽输出模式的输出电平是由复用功能外设输出决定的其他与开漏输出模式相似:控制电路输出为1:N-MOS截止,IO口电平由外部上拉/下拉决定控制电路输出为0:N-MOS开启,IO口输出低电平7.GPIO输出工作模式3-推挽输出模式与开漏输出相比较:输出控制寄存器部分相同输出驱动器部分加入了P-MOS管部分当输出控制电路输出1时:P-MOS管导通N-MOS管截止,被上拉到高电平,IO口输出为高电平1当输出控制电路输出0时:P-MOS管截止N-MOS管导通,被下拉到低电平,IO口输出为低电平0同时IO口输出的电平可以通过输入电路读取8.GPIO输出工作模式4-复用推挽输出模式与推挽输出模式唯一的区别在于输出控制电路之前电平的来源开漏输出模式的输出电平是由CPU写入输出数据寄存器控制的开漏推挽输出模式的输出电平是由复用功能外设输出决定的推挽输出Push-Pull Output原理推挽输出是一种常见的输出驱动方式由两个MOSFET组成一个与电源相连P沟道MOSFET一个与地相连N沟道MOSFET。在任意时刻只有一个MOSFET是导通的。通过控制这两个MOSFET的开关可以输出高电平连接到电源或低电平连接到地。特点双向驱动能够输出高电平和低电平驱动能力强。速度快由于两个MOSFET的快速切换推挽输出响应速度快适用于高速信号。能耗低当输出稳定在高电平或低电平时只有一个MOSFET导通能耗较低。应用推挽输出广泛应用于数字信号输出如控制LED、驱动数字电路输入、通信接口等。开漏输出Open-Drain Output原理开漏输出是一种使用单个N沟道MOSFET的输出方式。当MOSFET导通时引脚连接到地当MOSFET关闭时引脚处于高阻状态浮空。为了输出高电平需要外部上拉电阻将引脚拉到电源电压。特点单向驱动只能主动拉低电平无法主动输出高电平。高电平依赖外部上拉电阻。线与功能多个开漏输出可以连接到同一条线上实现“线与”逻辑即多个开漏引脚的并联线只要有一个拉低线就为低电平。灵活性高可以用于不同电压等级的电路之间的接口通过选择适当的上拉电阻可以适配不同的逻辑电平。应用开漏输出常用于I2C总线、按键输入、多个设备共享一条数据线的场合如中断信号、电平转换电路等。对比总结推挽输出可以主动输出高电平和低电平适用于需要强驱动能力和高速响应的场合。开漏输出只能主动拉低电平高电平依赖外部上拉电阻适用于需要“线与”逻辑或不同电压等级电路连接的场合。GPIO应用总结1、上拉输入、下拉输入可以用来检测外部信号例如按键等2、浮空输入模式由于输入阻抗较大一般把这种模式用于标准通信协议的 I2C、USART 的接收端3、普通推挽输出模式一般应用在输出电平为 0 和 3.3V 的场合。而普通开漏输出模式一般应用在电平不匹配的场合如需要输出 5V 的高电平就需要在外部一个上拉电阻电源为 5V把 GPIO 设置为开漏模式当输出高阻态时由上拉电阻和电源向外输出 5V 电平。4、对于相应的复用模式复用输出来源片上外设则是根据 GPIO 的复用功能来选择如 GPIO 的引脚用作串口的输出USART/SPI/CAN则使用复用推挽输出模式。如果用在 I2C、SMBUS 这些需要线与功能的复用场合就使用复用开漏模式。5、在使用任何一种开漏模式时都需要接上拉电阻。5. STM32最小系统前面已经介绍了STM32芯片需要芯片工作起来还需要外围电路这部分电路和芯片一起称作为STM32最小系统。实物设计普中精灵1开发板为例STM32 最小系统由以下几部分组成1晶振电路2复位电路3电源电路5.1. 晶振电路由于单片机正常工作需要一个时钟对于 STM32 这种高级单片机来说其内部自带高速时钟/低速时钟源。但通常我们不使用内部时钟源而是在单片机主晶振引脚上外接一个晶振STM32F103C8T6 芯片的主晶振管脚在 5、6 脚位至于需要多大晶振这就取决于你所使用的单片机我们使用的是STM32F103C8T6其时钟频率可在 0-72MHZ 上运行一般情况下我们建议选择 8MHz适合 STM32 内部其他外设时钟的计算。若直接将此晶振接入单片机晶振引脚会发现系统工作不稳定这是因为晶振起振的一瞬间会产生一些电感为了消除这个电感所带来的干扰可以在此晶振两端分别加上一个电容电容的选取需要无极性的另一端需要共地。根据选取的晶振大小决定电容值通常电容可在10-33PF 值范围内选取。我们使用的是 22PF 电容。这样一来就构成了晶振电路。只有保证晶振电路稳定单片机才能继续工作。其电路如下所示STM32 芯片上还有一个外设需要晶振它是 RTC这个在后面章节实验我们会专门介绍这里先不用管它。要让 RTC 工作通常外接一个 32.768KHz 的晶振。5.2. 复位电路前面我们已经将晶振电路搭建完成我们知道晶振犹如人的心脏需要无时无刻给单片机提供运行周期。但即使时钟周期在不停的运行系统也有可能会出现崩溃或者瘫痪状态。这就好比人会生病一样人一生病就得看医生服用医生开的药后重新获得正常状态。那么单片机呢它是如何获取重生的这就需要设计一个复位电路来实现此功能。我们知道 STM32 引脚中有一个 NRST 复位引脚而 STM32 是低电平复位所以需要让这个引脚保持一段时间低电平就可以。要实现此功能通常有两种方式一种是通过按键进行手动复位还有一种是上电复位即电源开启后自动复位。手动复位是通过一个按键及电容电阻所组成利用按键的开关功能实现复位按键按下后 GND 直接接入到单片机 NRST 引脚松开后 GND断开NRST 被电阻拉为高电平。这一合一开就实现了手动复位。而自动复位主要是利用 RC 充放电功能电源开启由于电容隔直GND 直接进入 NRST然后电容开始慢慢充电直到充电完成此时 NRST 被电阻拉为高电平。这样就起到上电复位的效果。这里我们采用手动复位。不到系统崩溃我们几乎不会操作复位。复位电路如下图所示5.3. 电源电路任何电子器件都需要有一个合适的电源进行供电这就好比人要吃饭一样没有电源系统是不会工作的。STM32 的工作电压是 1.8-3.3V 范围通常我们使用 3.3V 直流。将电源接入到芯片电源引脚即可。核心板电源电路如下图所示核心板上使用一个 USB 接口输入 5V 直流经过 3.3V 稳压芯片输出直流 3.3V给核心板上整个系统。同时核心板供电后与底板连接也可提供 5V 和 3.3V 给底板工作。底板电源电路如下图所示