stm32备份

news2024/11/30 0:41:10

存储器的分类:
存储器首先根据断电后存储的数据是否会丢失,可以分为易失存储器和非易失存储器,易失存储器主要应用于内存,非易失存储器主要用于外存。
易失存储器以RAM随机存储器为代表,随机的含义是存储器中的数据读取或写入所花费的时间与位置无关。根据存储机制RAM可分为DRAM动态随机存储器和SRAM静态随机存储器,DRAM以电容电荷表示数据,电荷会随着时间发生变化,因此需要定期的刷新操作,DRAM又可以根据通讯时是否需要时钟信号分为同步和异步两种,同步SDRAM使用同步时钟通讯速度更快,所以SDRAM使用更加广泛,之后推出的双数据速率同步动态随机存储器DDR SDRAM更进一步提高了SDRAM的通讯速率,DDRIII SDRAM速度得到了进一步的提升。静态SRAM以锁存器存储数据,不需要刷新充电也能保持状态。DRAM结构更简单,生成成本低,存储速度较慢,一般用于外部拓展内存,SRAM结构复杂生产成本高,存储速度快,一般用于CPU内部的高速缓存。
非易失存储器种类较多,半导体类的有ROM和FLASH,其他有光盘、机械硬盘等。
只读存储器ROM随着技术的发展,也可以写入数据。mask ROM在出厂时使用特殊的工艺固化内部数据,一旦出厂数据就不可修改,主要优势是大批量生产时成本低。OTPROM是一次性可编程存储器,可以使用专用的编程器将自己的资料写入,但只能写入一次,写入后不能修改。EPROM是可重复擦写存储器,可使用专用设备通过紫外线照射芯片内部擦写数据,现已被淘汰、EEPROM是电可擦写存储器,不需要外部设备就能按字节重复擦除和写入数据,EEPROM成为了ROM的主流。EEPROM主要存储一些配置信息,以便重新上电时候加载配置数据。
FLASH称为闪存,容量比EEPROM大得多,多个字节组成一个扇区,最小擦除单位是一个扇区,在写入数据前都需要进行擦除操作,根据电路不同,FLASH可分为NOR FLASH和NAND FLASH,NOR FLASH的地址数据线分开,NOR FLASH可以按照字节读取数据,可以直接存储代码指令,NAND FLASH数据线和地址线共用,只能以扇区为单位读数据,无法之间直线代码指令,需要相机指令从NAND FLASH加载到RAM上,再由CPU执行。NOR FLSAH一般应用于代码存储场合例如嵌入式控制器内部的程序存储空间,NAND FLASH一般应用于大数据量存储场合,例如SD卡U盘固态硬盘等。

I2C

多主机模式?
在这里插入图片描述

I2C是一个支持多设备的总线,支持多个主机和多个从机。主机是拥有总线控制权力的设备,从机是被允许后才能控制总线的设备。I2C一共只能使用两根线,双向串行总线SDA和串行时钟线,两根线通过上拉电阻拉高至高电平,总线上的设备使用开漏输出的模式,设备空闲地时候会输出高阻态,因此总线是高电平,当总线上的一个设备输出低电平的时候会将总线拉低至低电平。这么做的目的是为了避免数据传输过程中两个设备输出没有协调导致的短路问题
在这里插入图片描述

当前地址写

S是由主机产生的开始信号,然后发送一条7位的从机地址和一个读写位,对应地址的从机接收到数据后向主机发生一个应答位,表示收到了数据,当主机向从机写数据时,主机发送一条数据,从机接收的数据后从机发送一个应答,收到应答后主机接着发送下一条数据,表示需要在从机写入的地址,收到应答后主机发送需要写入的数据,结束通讯时由主机发送一条停止位。

当前地址读

当主机向从机读数据时,由主机产生的开始信号,然后发送一条7位的从机地址和一个读写位,对应地址的从机接收到数据后向主机发生一个应答位,表示收到了数据,主机释放SDA控制权开始接受数据,然后从机发送当前地址指针指向的数据,主机接收到之后发送一位应答,从机接收应答信号后发下一条数据,当主机希望停止接收数据时,就向从机发送一个非应答信号,然后发送一个停止位。
每个设备都将寄存器地址映射到一个线性区域中,并由当前地址指针指向当前读取的数据,主机每读取一个寄存器的数据,当前地址指针就递增。

指定地址读

指定地址读可以读取指定设备的指定地址的数据,首先向指定设备的当前指针寄存器写入需要读取的地址,然后再读取指定设备的数据。
首先主机发送起始位,然后发送从机地址和写标志位,接收到应答后发送写入地址,使从机的当前地址指针指向指定的地址,主机接收应答后重新发送一个起始位,然后发送从机地址和读标志位,从机应答后主机放弃SDA控制器读取数据,最后由主机发送非应答,并发送停止信号结束传输。
在这里插入图片描述

时钟线高电平时表示数据线此时的数据有效,不允许数据线在此时发生电平变化,由接收方读取数据,时钟线在低电平的时候,数据线数据无效,允许数据线电平变化,当时钟线是高电平时数据线由高电平转换到低电平的时候,表示起始信号,数据线由低电平转换到高电平的时候,表示停止信号。无论主从机,当接收方接收到数据后,若接收方希望对方继续发送数据,就需要向对方发送一个高电平应答信号,发送方才会发送下一个数据,若接收方希望对方停止发送数据,则需要向对方发生一个低电平非应答信号,发送方接受到该信号后产生一个停止信号,结束信号传输。
每个设备都有自己的地址,其中高四位是由厂商确定的,低三位可由引脚电平进行配置,保证每个地址的唯一性。
可以通过直接控制STM32的GPIO引脚根据I2C协议进行传输数据,这种方式称为软件模拟协议方式。STM32中包含专门复杂I2C通讯的外设,只需要配置好该外设,即可根据协议要求产生通讯信号,完成数据收发
接收时序图?

SPI通讯

SPI是一种全双工的通讯总线,广泛应用于ADC、LCD等通讯速率要求较高的设备。
SPI设备使用三条总线和片选线进行通信,总线分别是SCK、MOSI、MISO。SPI通讯中设备没有地址,而是通过片选线进行寻址,将对应设备的片选线拉低,从而使该设备被选中。SCK时钟线的时钟信号由主机产生,决定了通讯的速率,MOSI主机向从机发送数据,信号由主机产生,MISO由从机向主机发送数据,信号由从机产生。
在这里插入图片描述
起始信号指的是片选线拉低,片选线拉高后表示结束信号。SCK的上升沿允许MOSI和MISO改变数据,SCK下降沿表示MOSI和MISO数据有效,此时数据被采样,
在这里插入图片描述
SPI一共有四种通讯模式,时钟极性CPOL是指SPI通讯设备空闲时SCK的电平信号,CPOL=0时SCK空闲为低电平,CPOL=1时SCK空闲为高电平。CPHA是指数据采样时刻,CPHA=0时SCK奇数边沿采样数据,CPHA=1时SCK偶数边沿采样数据。
在这里插入图片描述
把要发送的数据写入到数据寄存器DR中,由移位寄存器将数据一位一位地发送出去,发送完一帧后数据寄存区DR为空,TXE标志位会被置1,此时可以再向发生缓冲区里写数据,当接收完一帧数据后接收缓冲区满,RXNE标志位被置1,此时可以在接收缓冲区里读数据。如果是能了TXE或RXNE中断,TXE或RXNE置1时会产生SPI中断信号,进入同一个中断函数,可以通过检查寄存器位来判断是哪个事件,再分别进行处理。
在这里插入图片描述
在这里插入图片描述

I2S

声音是一种模拟信号,首先根据编码器将模拟量转换为数字量保存,在需要还原声音的地方将数字量转换成模拟量输出。
在这里插入图片描述
AD的过程可以分为三步,分别是采样、量化和编码,首先使用比声音频率高的采样信号对声音信号进行采样,在每个采样点量化声音信号的大小,最后通过编码的方式将数据保存。采样频率越高,量化位数越高,AD转换的精度就越高。
在这里插入图片描述
数字编译码器WM8978内部集成了DAC和ADC,可实现声音模拟信号和数字量音频数据转换的功能,可以通接收其他设备传输的音频数据,转换为模拟信号再传输至扬声器,也可以接收声音模拟信号,将其转换至数字信号传输至其他设备。数字编译码器是通过I2S与其他设备通信的。
I2S是专门传输音频信号的总线协议,可以实现数据的半双工传输,I2S主要有3个主要信号,分别是SD串行数据线,用于发送或接受两个时分复用的数据通道上的数据,WS字段选择线和CK串行时钟线,表示表示当前传输数据的通道,0代表左通道的数据,1代表右通道的数据,CK为时钟线,每一位脉冲用于对应数字音频信号的一位数据,它的频率等于采样频率X量化位数X通道数,CK下降沿改变SD电平,CK上升沿读取SD电平。
I2S分为左对齐、右对齐和Philips标准。Philips标准中,数据在WS改变电平后的第一个位之后有效,数据之后的位强行清零,左对齐标准中,WS翻转后同时开始传输数据,右对齐同理。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ADC

ADC模拟数字转换器,可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁。有18个输入通道,分为16个外部通道,直接通过GPIO输入模拟电压,还有2个内部通道,输入内部温度传感器和内部参考电压。
在这里插入图片描述
INT0至INT7是输入通道,由通道选择开关选择其中一路,通过设置ADDA、ADDB、ADDC的高低电平确定输入通道号,然后通过ALE时地址锁存译码控制通道选择开关。逐次逼近寄存器SAR通过DAC和比较强与输入模拟电压进行比较,通过二分法逼近输入的模拟电压,从而完成AD转换,将获得的8位数字信号输出至D0值D7引脚,定时和控制获取时钟信号和开始信号,并输出结束信号,VREF+和VREF-输入参考电压。
在这里插入图片描述
ADC有规则组和注入组两种方式,规则组最多可以选择16位通道,但是对应的数据寄存器只有一个,需要配合DMA使用,注入组最多选择4位通道,可以完全存储在AD数据寄存器。模拟看门狗用于检测AD转换的范围,如果超出范围会发生中断信号。
转换模式可以根据是否连续转换和扫描模式分为四种方式。连续转换会同时对多个通道进行转换,开启扫描模式会循环转换指定的通道。
左对齐低位空出的补零,右对齐高位空出的补零

音频

参考文章:
TDM总线协议

DMA

DMA直接存储器存取,无需CPU干预,可完成外设、存储器之间的高速数据传输,
每个通道支持软件触发和特定硬件触发,软件触发多应用于存储器到存储器之间的数据转运,硬件触发多应用于存储器到外设之间的触发方式。
在这里插入图片描述
寄存器是连接软件和硬件的桥梁,寄存器的每一位都连接一根导线,控制相应电路的高低电平、开关通断、选择器选择等,或者可以作为计数器使用。
在这里插入图片描述
把小的数据传输到大的数据,高位补零,把大的数据传输到小的数据,高位就会舍弃。
在这里插入图片描述
在这里插入图片描述
每完成一个通道的AD转换,数据就会保存在ADC_DR中,然后由DMA及时将ADC_DR中的数据转移至相应的存储器

汽车域控制器

ECU负责控制汽车中的各种电子元器件,例如车灯、仪表、中控、发动机等等,随着车辆中的电子器件的增多,ECU的数量也随之增长,导致线束成本增加,系统复杂,为了解决ECU数量增多带来的问题,多个ECU被集成在了一个域控制器中,可以按照功能分为动力域、车身域、底盘域、座舱域、智能驾驶域等等,对于ABS等安全系数要求高的设备来说,处于安全的考虑,目前还是以单ECU控制为主。
为满足安全和性能的双重需求,目前主流的ADAS控制器解决方案大多采用微控制器MCU和异构微处理器SOC组合。

嵌入式设备启动过程

芯片的ROM中保存了最基础的代码,系统上电后,reset引脚接收到电平跳变,对于C51单片机来说,由硬件电路将代码段寄存器CS和指令指针寄存器IP进行复位,组成一个20位的地址,指向ROM中存放第一条代码的位置,对于ARM架构的MCU来说,上电或复位后,PC指针寄存器复位为零地址,然后由中断向量表获取下一步的跳转地址,从而可以执行更复杂的代码,执行硬件自检、基本初始化、输入输出支持等操作,以及将操作系统从外部FLASH转移至内部RAM中。
Boot ROM就是负责系统上电后启动软件的软件,通常是存放在EEPROM或者NOR FLASH中,没有权限修改Boot ROM程序,但是可以通过配置芯片的外部启动引脚配置Boot ROM程序,选择芯片的启动方式,例如通过拨码开关配置启动配置引脚的高低电平,每次复位后BootROM会存储启动配置引脚的电平组合。
BootROM用于启动固定的程序,功能无法定制,因此可以使用BootLoader程序对系统进行二次引导,用于加载OS、程序刷新等功能,例如智驾控制器在启动时需要提供统一诊断服务UDS的CAN诊断和CAN刷新服务,因此需要在BootLoader中完成这些操作。
MCU使用单核或多核重构的处理器,多基于Context-M、Cortex-R、TRICORE。C28内核主频小于1GHZ,没有MMU内存管理单元,最多只能运行实时操作系统,程序运行的介质大多是NOR FLASH,因为NOR FLASH与RAM一样用有分离的地址线和数据线,可以以字节长度精确寻址,所以程序可以直接在NOR FLASH中运行,不需要转移至RAM中运行。
运行Linux操作系统的SOC一般将操作系统、文件系统、应用程序存放在NAND FLASH中,代码在运行前需要将代码从NAND FLASH搬运至SRAM中,所以BootROM的任务就是将代码从NAND FLASH搬运至RAM中,SOC的BootLoader可以分为SPL(secondary Program Loader)和uboot,首先将SPL搬运至内部SRAM,初始化空间更大的外部DRAM,然后将uboot搬运至外部DRAM,uboot根据系统变量将OS内核搬运至外部RAM中,OS内核再完成根文件系统的加载等功能。
芯片启动大致可以分为三个步骤,首先是芯片出厂自带的BootROM,用于硬件的自检和部分初始化,并加载BootLoader,然后是用户写的BootLoader,通过访问外部RAM、NAND FLASH,完成用户自定义的初始化工作,最后就是应用程序,例如Linux操作系统等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1095912.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EfficientDet: Scalable and Efficient Object Detection

CVPR2020 V7 Mon, 27 Jul 2020 引用量:243 机构:Google 贡献:1>提出了多尺度融合网络BiFPN 2>对backbone、feature network、box/class prediction network and resolution进行复合放缩,有着不同的…

Linux第4章-目录结构

引子 在Linux中,一切皆文件!!! 在Linux中,一切皆文件!!! 在Linux中,一切皆文件!!! 基本介绍 1.Linux的文件系统,是采用…

LoRA 是如何工作的?

概述 纯笔记 LoRA的原理 LoRA其实是对稳定扩散模型最关键的部分进行了微小的改变。 这个关键的部分叫:cross-attention layers – 交叉注意力层。 研究人员发现,对这关键部分进行微调就足以实现良好的训练。 上面黄色部分,QKV 部分就是&a…

Python进阶之迭代器

文章目录 前言一、迭代器介绍及作用1.可迭代对象2. 迭代器 二、常用函数和迭代器1.常用函数2.迭代器 三、总结结束语 💂 个人主页:风间琉璃🤟 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主💬 如果文章对你有帮助、欢迎关注…

ELK 日志分析系统介绍与部署

目录 一、ELK 简介: 1.开源工具介绍: 2.其它组件: 2.1 Filebeat: 2.2 Fluentd: 2.3 缓存/消息队列(redis、kafka、RabbitMQ等): 3. filebeat 结合 logstash 带来好处: 二、为什么要…

zookeeper源码学习笔记(一)

一、缘起 1、CP还是AP 作为一个在大数据行业工作了7~8年的老兵,在被问到zookeeper和CAP时,竟然有些恍惚,AP还是CP? 看了一些博文,答案几乎都是CP? zookeeper的实现中,P是一定的&…

【C语言】.c源文件从编译到链接生成可执行程序的过程

本篇文章目录 1. 过程概览2. 编译与链接2.1 预编译/预处理2.2 编译2.3 汇编2.4 链接 3. 执行/运行环境 1. 过程概览 编译到链接是c语言的翻译环境,c语言还有执行环境。 组成一个程序的每个源文件通过编译过程分别转换成目标代码(object code)…

推荐《一拳超人》

《一拳超人》是ONE原作,村田雄介作画,连载于网络漫画杂志《邻座的Young jump》上的漫画。 [1] 原为ONE在个人网站上连载的练笔之作, [2] 后被喜爱该作的另一漫画家村田雄介在征得ONE同意后重新绘制而成。 简体中文电子版由哔哩哔哩漫画发布…

JavaSE学习值之--认识异常

💕"有效知识的前提是承认知识边界,承认我们对边界那边的一切无可奉告。"💕 作者:Mylvzi 文章主要内容:JavaSE学习值之--认识异常 一.什么是异常? 异常就是程序在运行的时候产生的不正常的行为 …

java_Stream API

文章目录 一、Stream API vs 集合二、Stream 使用的执行流程2.1、创建Stream2.1、中间操作2.1.1. filter2.1.2. limit2.1.3. skip2.1.4. distinct2.1.5. map2.1.6. sorted 一、Stream API vs 集合 Stream API 关注的是多个数据的计算(排序、查找、过滤、映射、遍历…

网络工程师知识点4

51、OSPF的LSA类型 52虚链路:作用 解决区域划分不合理的问题 通过建立虚拟链路来实现一般区域与骨干区域的理论化直连 54、NSSA区域的特点 1、可以学习本区域连接的外部路由 2、不学习其他区域转发进来的外部路由 3、与外部区域通信使用ABR自动产生的默认路…

python:爬取网络小说,看这一篇就够了

说明: 本教程仅供于学习研究使用,请勿用于其他用途。 软件安装: 官网下载visual studio Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft.com) 点进网页后下拉找到个人免费版本。点击下载即可。 1:找到…

第六章:TF-A学习

TF-A学习 TF-A初探如何获取系统源码移植过程中遇到的问题和解决方案编译报错:arm-none-linux-gnueabi-gcc: not foundTF-A 源码打补丁 遇到assume -R?[n] TF-A初探 为了保证安全 ARM 推出了 Arm Trusted Firmware 的可信固件,简称 TF-A。它…

windows环境cmake的nmake failed

windows环境cmake异常 问题如下: > cmake ..CMake Error at CMakeLists.txt:4 (PROJECT): Running nmake -?failed with:系统找不到指定的文件。CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage CMake Error: CMAKE_CXX_COMPILER not set, after…

中断机制-interrupt和isInterrupted源码分析、中断协商案例

当前线程的中断标识为true,是不是线程就立刻停止? 答案是不立刻停止,具体来说,当对一个线程,调用interrupt时: 如果线程处于正常活动状态,那么会将该线程的中断标志设置为true,仅此…

【C++】:关键字 命名空间 输入输出 缺省参数 函数重载 引用

【本节目标】 C关键字命名空间C输入&输出缺省参数函数重载引用 C是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等 熟悉C语言之后,对C学习有一定的帮助,本章节主要目标&#xff…

关于面试以及小白入职后的一些建议

面试的本质 面试的过程是一个互相选择的过程;面试官的诉求是,了解应聘者的个人基本信息、工作态度、专业能力及其他综合能力是否与公司招聘岗位匹配;面试者的诉求是,拿下招聘岗位offer,获得工作报酬; 面试…

【go学习笔记】Go errors 最佳实践

文章目录 一、Error Type1. Sentinel Error(预定义Error字符串错误值)1.1 缺点 2. Error types(错误类型)2.1 缺点 3. Opaque errors(不透明错误)3.1 Assert errors for behaviour, not type 二、Handling …

详解RocketMQ消息存储原理

本文基于RocketMQ 4.6.0进行源码分析 一. 存储概要设计 RocketMQ存储的文件主要包括CommitLog文件、ConsumeQueue文件、Index文件。RocketMQ将所有topic的消息存储在同一个文件中,确保消息发送时按顺序写文件,尽最大的能力确保消息发送的高性能与高吞吐…

SpringBoot实战(二十五)集成 Shiro

目录 一、Shiro 简介1.1 Shiro 定义1.2 Shiro 核心组件1.3 Shiro 认证过程 二、SpringBoot集成2.1 集成思路2.2 Maven依赖2.3 自定义 Realm2.4 Shiro 配置类2.5 静态资源映射2.6 AuthController2.7 User 实体2.8 用户接口类2.9 用户接口实现类2.10 OrderController(…