打印
[其他ST产品]

基于指南者STM32_入门

[复制链接]
4817|59
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ISP- In-System Programming
ISP(In-System Programming)在系统可编程,指电路板上的空白器件可以编程写入最终用户代码,
而不需要从电路板上取下器件,已经编程的器件也可以用 ISP 方式擦除或再编程。

ISP 的时候需要用到 (bootloader) 自举程序,自举程序存储在 STM32 器件的内部自举 ROM 存储
器(系统存储器)中。其主要任务是通过一种可用的串行外设(USART、CAN、USB、I2C 等)将
应用程序下载到内部 Flash 中。每种串行接口都定义了相应的通信协议,其中包含兼容的命令集
和序列。

最常用的ISP方式就是通过串口下载,最主要的优点就是成本低,缺点是只能用于下载程序,不能硬件仿真. 普通ISP和一键ISP,普通ISP在下载程序的时候需要手动配置BOOT的启动方式,而一键ISP则通过独特的硬件电路和上位机配合使用来达到一键下载的功能。

通常的 ISP 的步骤如下:

电脑通过 USB 转串口线连接 STM32 的 USART1,并打开电脑端的上位机;
设置跳线保持 BOOT0 为高电平,BOOT1 为低电平;
复位单片机使其进入 bootloader 模式,通过上位机下载程序;
下载完毕,设置跳线保持 BOOT0 为低电平,BOOT1 为低电平;
复位单片机即可启动用户代码,正常运行。
以上步骤有个不好的地方就是下载程序需要跳线及复位操作,很繁琐。通过对 ISP 的原理认识,
一键 ISP 就诞生了,它需要做的事情就是用上位机去控制 BOOT0 脚和单片机的复位脚,原理图
如下:




使用特权

评论回复
沙发
喂什么玩意|  楼主 | 2024-3-31 20:55 | 只看该作者
BOOT 配置
在 ISP 下载电路中,需要配置 BOOT 引脚,有关 BOOT 引脚不同的配置会产生不同的启动
方式,见下表。

ISP 一键下载
一般都是用到 RXD 和 TXD 这两个口,一键 ISP 电路中我们需要用 USB 转串口的芯片的 DTR 口和 RTS 口来控制单片机的 BOOT0 和 NRST,原理如下:

通过上位机控制 U6(CH340G) 的 RTS 脚为低电平,Q1 导通,BOOT0 的电平上拉为高电平。

通过上位机控制 U6(CH340G) 的 DTR 脚为高电平,由于 RTS 为低电平,Q2 导通,U8 的 2
脚为低电平,U18 为一个模拟开关,使能端由 4 脚控制,默认高电平,U18 的 1 脚和 2 脚
导通,所以 NRST 为低电平系统复位。

单片机进入 ISP 模式,此时可以将 DTR 脚设置为低电平,RTS 设置为高电平。Q1 和 Q2 为
截至状态,BOOT0 和 NRST 还原默认电平。

上位机将程序下载到单片机,下载完毕之后,程序自动运行。

至此,很多人还会认为 U18、Q1、Q2 是多余的,用 U6 的 RTS 和 DTR 直接控制也可以。正
常情况下,这样理解没有问题,但是我们忽略了一点,就是单片机上电瞬间如果 USB 转串
口连接了电脑,DTR 和 RTS 的电平是变化的,如果不处理好,单片机会一直进入 ISP 模式,
或者系统会复位多次,这种情况是不允许的。

于是,就有了我们全新的一键 ISP 电路。我们主要是分析上电瞬间的逻辑关系,单片机上
电时我们通过示波器观察波形得知 DTR 和 RTS 的电平是变化的,但是也有一个规律就是:
只要 RTS 为低电平的时候,DTR 的电平也是低,因此一般情况 Q2 不会导通,但由于这两
个 IO 口的电平存在“竞争冒险”,会出现 RTS 的下降沿的时候刚好遇到 DTR 的上升沿,这
个时候 Q2 导通,导致系统复位,而 BOOT0 此时有可能也为高电平,就会进入 ISP 模式。
这个是不受我们控制的,我们不想系统出现这样的情况。因此加入了模拟开关来切断这种
干扰。

加入模拟开关 U18,通过控制 U18 的 4 脚的开关来达到隔离干扰电平的目的。下面我们分
析一下延时开关电路,上电瞬间,电容 C65 通过电阻 R18 来充电,由于电阻 100k 很大,电
容的充电电流很小,等电容充电达到 U18 的 4 脚的有效电平 2V 时,大概耗时 1S,在这个
1S 时间内 U18 的模拟开关是断开的,因此 RTS 和 DTR 的干扰电平不会影响到系统复位。
系统正常运行。

使用特权

评论回复
板凳
喂什么玩意|  楼主 | 2024-3-31 20:56 | 只看该作者
上位机设置
RTS低电平进入BootLoader,DTR高电平进入复位

​ 232标准(mcuisp软件就是按照这个标准设计的

​ 逻辑1:-3~-15V, 逻辑0:+3~+15V

​ TTL标准

​ 逻辑1:3.3V, 逻辑0:0V

初始STM32
STM32,从字面上来理解,ST 是意法半导体,M 是 Microelectronics 的缩写,32 表示 32 位,合起
来理解,STM32 就是指 ST 公司开发的 32 位微控制器。

使用特权

评论回复
地板
喂什么玩意|  楼主 | 2024-3-31 20:59 | 只看该作者
stm32能做什么
1、串口—USART,用于跟跟串口接口的设备通信,比如:USB转串口模块、ESP8266
WIFI、GPS模块,GSM 模块,串口屏、指纹识别模块

2、内部集成电路—I2C,用于跟I2C接口的设备通信,比如:EEPROM、电容屏、陀螺仪MPU6050、0.96寸OLED模块

3、串行通信接口—SPI,用于跟SPI接口的设备通信,比如:串行FLASH、以太网W5500、音频模块VS1053

4、SDIO、FSMC的超级、I2S、ADC、GPIO

使用特权

评论回复
5
喂什么玩意|  楼主 | 2024-3-31 20:59 | 只看该作者

使用特权

评论回复
6
喂什么玩意|  楼主 | 2024-3-31 20:59 | 只看该作者
分配原理图引脚

使用特权

评论回复
7
喂什么玩意|  楼主 | 2024-3-31 20:59 | 只看该作者
如何寻找引脚的功能说明
官方资料:STM32Fxxx数据手册,也叫datasheet。注意数据手册跟参考手册的区别




使用特权

评论回复
8
喂什么玩意|  楼主 | 2024-3-31 20:59 | 只看该作者
如何寻找引脚的功能说明
官方资料:STM32Fxxx数据手册,也叫datasheet。注意数据手册跟参考手册的区别




使用特权

评论回复
9
喂什么玩意|  楼主 | 2024-3-31 21:00 | 只看该作者
引脚的功能定义解读


使用特权

评论回复
10
喂什么玩意|  楼主 | 2024-3-31 21:00 | 只看该作者
寄存器

使用特权

评论回复
11
喂什么玩意|  楼主 | 2024-3-31 21:00 | 只看该作者
STM32芯片架构图

使用特权

评论回复
12
喂什么玩意|  楼主 | 2024-3-31 21:00 | 只看该作者
ARM设计内核(驱动单元),ST设计外设(被动单元)

ICode总线
ICode 中的 I 表示 Instruction,即指令。我们写好的程序编译之后都是一条条指令,存放在 FLASH
中,内核要读取这些指令来执行程序就必须通过 ICode 总线,它几乎每时每刻都需要被使用,它
是专门用来取指的。

驱动单元
DCode总线
DCode 中的 D 表示 Data,即数据,那说明这条总线是用来取数的。我们在写程序的时候,数据有
常量和变量两种,常量就是固定不变的,用 C 语言中的 const 关键字修饰,是放到内部的 FLASH
当中的,变量是可变的,不管是全局变量还是局部变量都放在内部的 SRAM。因为数据可以被
Dcode 总线和 DMA 总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来
仲裁,决定哪个总线在取数。

使用特权

评论回复
13
喂什么玩意|  楼主 | 2024-3-31 21:01 | 只看该作者
系统总线
系统总线主要是访问外设的寄存器,我们通常说的寄存器编程,即读写寄存器都是通过这根系统
总线来完成的。

DMA总线
DMA 总线也主要是用来传输数据,这个数据可以是在某个外设的数据寄存器,可以在 SRAM,
可以在内部的 FLASH。因为数据可以被 Dcode 总线和 DMA 总线访问,所以为了避免访问冲突,
在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。

使用特权

评论回复
14
喂什么玩意|  楼主 | 2024-3-31 21:01 | 只看该作者
被动单元
内部的闪存存储器
内部的闪存存储器即 FLASH,我们编写好的程序就放在这个地方。内核通过 ICode 总线来取里
面的指令。

内部的SPARM
内部的 SRAM,即我们通常说的 RAM,程序的变量,堆栈等的开销都是基于内部的 SRAM。内
核通过 DCode 总线来访问它。

FSMC
FSMC 的英文全称是 Flexible static memory controller,叫灵活的静态的存储器控制器,是
STM32F10xx 中一个很有特色的外设,通过 FSMC,我们可以扩展内存,如外部的 SRAM,NANDFLASH 和 NORFLASH。但有一点我们要注意的是,FSMC 只能扩展静态的内存,即名称里面的
S:static,不能是动态的内存,比如 SDRAM 就不能扩展。

AHB到APB的桥
从 AHB 总线延伸出来的两条 APB2 和 APB1 总线,上面挂载着 STM32 各种各样的特色外设。我
们经常说的 GPIO、串口、I2C、SPI 这些外设就挂载在这两条总线上,这个是我们学习 STM32 的
重点,就是要学会编程这些外设去驱动外部的各种设备。

使用特权

评论回复
15
喂什么玩意|  楼主 | 2024-3-31 21:01 | 只看该作者
什么叫存储器物映射
存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程就称为存储器映射。

使用特权

评论回复
16
喂什么玩意|  楼主 | 2024-3-31 21:01 | 只看该作者
通过绝对地址访问内存单元

让GPIOB端口的16个引脚输出高电平,要怎么实现?

// GPIOB 端口全部输出 高电平
*(unsigned int*)(0x40010C0C) = 0xFFFF;

使用特权

评论回复
17
喂什么玩意|  楼主 | 2024-3-31 21:01 | 只看该作者
什么是寄存器?
给有特定功能的内存单元取一个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。

什么叫存储器映射?
给存储器分配地址的过程叫存储器映射,再分配一个地址叫重映射。

使用特权

评论回复
18
喂什么玩意|  楼主 | 2024-3-31 21:01 | 只看该作者
STM32寄存器映射
总线基地址

使用特权

评论回复
19
喂什么玩意|  楼主 | 2024-3-31 21:02 | 只看该作者
GPIOB端口的寄存器列表

使用特权

评论回复
20
喂什么玩意|  楼主 | 2024-3-31 21:02 | 只看该作者
GPIOx端口数据输出寄存器ODR描述

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

416

帖子

0

粉丝