STM32理论知识(自用)
STM32是一个32位的单片机,因此,它有32根地址线,工作主频为72MHZ。
根据上述两条,可以得出结论:
- STM32的寻址(内存)大小为:2^32(字节) = 4G(字节)
- STM32的寻址范围为:0X0000 0000 ~ 0XFFFF FFFF
32的启动
1)主闪存存储器(Main Flash)启动:从STM32内置的Flash启动(0x0800 0000-0x0807 FFFF),一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。
2)系统存储器(System Memory)启动:从系统存储器启动(0x1FFFF000 – 0x1FFF F7FF),这种模式启动的程序功能是由厂家设置的。一般来说,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的ISP程序中,提供了串口下载程序的固件
3)片上SRAM启动:从内置SRAM启动(0x2000 0000-0x3FFFFFFF),既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。
Flash:存储程序,断电不丢失。SRAM:存储数据,断电丢失。
值得注意的是STM32上电复位以后,代码区都是从0x00000000开始的,三种启动模式只是将各自存储空间的地址映射到0x00000000中。
STM32的启动流程大致如下:
1.上电启动或者硬件复位;
2.单片机从0x00地址开始执行程序,在执行程序前,单片机会根据BOOT引脚设置,将对应的存储器重映射到0x00处;
3.初始化SP、PC、向量表。
Flash SRAM
其中对于STM32而言,SRAM(存储运行过程中产生的数据)就是内存,SRAM是静态随机存取存储器。它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据,断电数据易丢失;
Flash(存储程序)就是硬盘, FLASH存储器又成为闪存,它与EEPROM都是掉电后数据不丢失的存储器,但是FLASH得存储容量都普遍的大于EEPROM。
EEPROM(电可擦可编程只读存储器)通常被用来存储小量的数据,例如配置参数、校准数据、用户设置等。"扩展"表示将外部的EEPROM与STM32单片机相连,以扩展STM32的存储能力。由于STM32单片机内置的Flash存储器可能容量有限,因此需要额外的存储器来存储更多的数据。
32和51区别
1.不同的开发方式
51单片机一般直接操作寄存器,STM32主操作库函数编程
2.系统资源不同
一般来说,STM32的资源比51单片机多
3.开发环境可能不同
一般来说,51和STM32都可以在KEIL下开发,但是STM32的选择更多,可以在Linux、windows esplease,甚至vscode+插件模式下开发。
4.操作系统差异
一般来说,51单片机不支持操作系统,STM32支持各种主流操作系统。
中断
中断来临时,硬件会自动调用中断函数,不需要我们人为操作。
GPIO的工作模式
上拉输入/下拉输入:接上拉电阻/接下拉电阻。保持不工作时的引脚电平状态。
开漏模式(IIC): 仅漏级开,所以三极管保持接地,当输入为1时,三极管关闭,端口电平由外部上拉电阻决定。当写入是0时,三极管开启,接入地。
推挽模式:使用整个三极管,当输出1时,PMOS导通,至高电平1。当输出0时,NMOS导通,输出0。
中断或者异常要进行哪些动作
当异常/中断发生时,ARM架构对于异常/中断的处理流程基本都是:
- 保存现场(硬件完成)
- 分辨异常/中断,调用对应的异常/中断处理函数(代码实现)
- 恢复现场(硬件完成)
STM32的中断向量表可以看成是一个指针数组,这个数组里面存放的就是一个个的中断服务函数的入口地址(向量表首地址规定是栈顶指针)。CPU检查到某个中断产生时,硬件会根据我们提供的中断号自动跳转到向量表中与这个中断号对应的这个中断服务函数的入口地址,从而执行相应的中断服务函数。
保存现场
保持中断前后CPU内部寄存器的值不被改变,将寄存器的值保存到栈中。
恢复现场
返回到LR寄存器所指示的地址处(就是中断前的下一条指令的地址),并且把保存在栈中寄存器的值恢复到寄存器中去。
CPSR和SPSR
CPSR:程序状态寄存器,包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。
SPSR:程序状态保存寄存器(saved programstatus register),每一种处理器模式下都有一个状态寄存器SPSR,SPSR用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态。
32有哪些外设
GPIO,输入输出口,使单片机和外部设备进行控制和读取。UART串口通信,异步串行通信,通过和外设设定相同的波特率进行数据传输,数据帧为起始位数据位校验位和停止位。IIC同步串行半双工通信,通过数据线和时钟线与外部设备进行数据传输。SPI同步串行全双工,一主多从,用两根数据线实现全双工传输。ADC、DAC数模转换、模数转换器。DMA直接访问存储器,用于高速数据传输,减轻CPU负担。
串口是什么
答:串行通讯接口,用于与外部设备进行串行通讯。UART即为串行通讯,串行指的是一条数据线,将数据一位一位进行传输。一般数据帧包括起始位、数据位、校验位和停止位。
can总线
can控制器模式:静默模式、环回模式、环回静默模式。
Linux 操作系统
进程通信
每个进程的用户空间都是独立的,不能相互访问,所以需要借助内核空间实现通讯。
管道就是最简单的一种,但其通信数据是无格式的字节流,并且大小受限。匿名管道通讯是单向的,只用于父子关系的进程通信。命名管道用于毫无关系的进程之间通信。
消息队列是保存在内核的消息链表,克服管道无格式字节流问题,用户可以自定义数据类型。发送方与接收方的消息数据类型要保持一致。但每次读写都需要经过用户态和内核态之间的拷贝。
共享内存克服读写拷贝开销,直接分配一个共享空间,每个进程都能直接访问,速度最快。但多进程同时竞争共享资源容易错乱。
信号量保护共享资源,确保任何时刻只有一个进程能够访问共享资源,不仅可以保持访问互斥,还能实现进程之间的同步。
信号进程通信间唯一的异步通信机制,可以在应用进程和内核之间直接交互。
Socket用于在不同的主机之间进行通信,分为三种常见的通信方式:TCP、UDP、本地进程。
作者:我就不信我学不会这破玩意儿