单片机开发之嵌入式基础

几个比较好的学习网站:

嵌入式开发_嵌入式开发板_嵌入式系统 - 与非网 (eefocus.com)

电子发烧友

朱有鹏老师嵌入式 Linux 核心课程笔记_yougogo的博客-CSDN博客_朱有鹏嵌入式

学习机器学习对于嵌入式的帮助:嵌入式开发人员应该关心机器学习的 5 个理由 (baidu.com) 

嵌入式系统学习(五):嵌入式和深度学习 - 简书 (jianshu.com)

梯度算法理解:(1条消息) 为什么梯度反方向是函数值下降最快的方向?_忆臻的博客-CSDN博客_梯度反方向

一、单片机基本基础知识

1.1 单片机的基本构成、工作原理 | Renesas

单片机开发之嵌入式基础_第1张图片

单片机开发之嵌入式基础_第2张图片

1.2 单片机的外围功能电路 | Renesas 

单片机开发之嵌入式基础_第3张图片

单片机开发之嵌入式基础_第4张图片

1.3 外围功能电路控制 | Renesas

 单片机开发之嵌入式基础_第5张图片

单片机开发之嵌入式基础_第6张图片

单片机开发之嵌入式基础_第7张图片  

1.4 中断 | Renesas

单片机开发之嵌入式基础_第8张图片

单片机开发之嵌入式基础_第9张图片

单片机开发之嵌入式基础_第10张图片

单片机开发之嵌入式基础_第11张图片

1.5 晶体振荡器

        有一些电子设备需要频率高度稳定的交流信号,而LC振荡器稳定性较差,频率容易漂移(即产生的交流信号频率容易变化)。在振荡器中采用一个特殊的元件——石英晶体,可以产生高度稳定的信号,这种采用石英晶体的振荡器称为晶体振荡器。

        单片机晶振的作用是为系统提供基本的时钟信号。通常一个系统共用一个晶振,便于各部分保持同步。有些通讯系统的基频和射频使用不同的石英晶振,而通过电子调整频率的方法保持同步。单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片机接的一切指令的执行都是建立在晶振提供的时钟频率。

单片机晶振电路原理

        单片机一般采用三端式(考毕兹)交流等效振荡电路;实际的晶振交流等效电路中,其中Cv是用来调节振荡频率,一般用变容二极管加上不同的反偏电压来实现,这也是压控作用的机理;把石英晶体的等效电路代替晶体后。其中Co,C1,L1,RR是晶体的等效电路。单片机工作时,是一条一条地从RoM中取指令,然后一步一步地执行。单片机访问一次存储器的时间,称之为一个机器周期,这是一个时间基准。

时钟晶振的工作原理:

当在石英两电极外加电压后,晶片会发生形变,反过来,如果外力使得晶体变形,两极上又会产生电压,这就是我们所说的压电效应。我们正是利用石英晶体的这一物理特性制造出不同频率的晶振产品。

单片机内外部晶振,到底有什么区别? (baidu.com)

1.6 时钟周期、指令周期、机器周期

指令周期:

        CPU每 取出 一条指令并 执行 这条指令,都要完成一系列的操作,这一系列操作所需要的时间通常叫做一个指令周期。换言之指令周期是取出一条指令并执行这条指令的时间。由于各条指令的操作功能不同,因此各种指令的指令周期是不尽相同的。例如一条加法指令的指令周期同一条乘法指令的指令周期是不相同的 。

机器周期:

        机器周期也称为CPU周期。在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段(如取指、译码、执行等),每一阶段完成一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个时钟周期组成 。

时钟周期:

        时钟周期T又称为振荡周期,由单片机片内振荡电路OSC产生,常定义为时钟脉冲频率的倒数,是时序中最小的时间单位。例如,若某单片机时钟频率为1MHz,则它的时钟周期T应为1μs。由于时钟脉冲是计算机的基本工作脉冲,它控制着计算机的工作节奏,使计算机的每一步工作都统一到它的步调上来。显然,对同一种机型的计算机,时钟频率越高,计算机的工作速度就越快。但是,由于不同的计算机硬件电路和器件的不完全相同,所以它们需要的时钟周期频率范围也不一定相同。

        时钟周期也称为振荡周期,定义为时钟频率的倒数。时钟周期是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。时钟周期是一个时间的量。时钟周期表示了SDRAM所能运行的最高频率。更小的时钟周期就意味着更高的工作频率。

三者之间的关系:

        指令周期由若干个机器周期组成,而机器周期又包含若干个时钟周期,基本总线周期由4个时钟周期组成

二、硬件知识 

(3条消息) 嵌入式学习(一)——基础知识_南边的柴柴的博客-CSDN博客_嵌入式学习资料

硬件工程师必备,常用元器件封装速查表_不脱发的程序猿的博客-CSDN博客

2.1 数字电路

数字信号又称脉冲信号,是一种跃变信号,并且持续时间短暂。处理数字信号的电路称为数字电路,它注重研究的是输入、输出信号之间的逻辑关系。在数字电路中,三极管一般工作在截止区和饱和区,起开关的作用。

数字电路的特点

  1. 信号是随时间不连续变化的两个离散量。
  2. 三极管一般都是工作在开、关状态。
  3. 研究的主要问题是电路的逻辑功能。
  4. 主要方法是逻辑分析和逻辑设计,主要工具是逻辑代数。

(1条消息) 数字电路——门电路_咸鱼箘的博客-CSDN博客_数字门电路

(3条消息) 数字电路基础_摆渡沧桑的博客-CSDN博客

2.1.1 寄存器和存储器的区别

寄存器和存储器的区别包括三方面:功能、速度、性质。

1.寄存器和存储器的性质不同,二者从字面意思就可以理解到一个是寄存,一个是存储。那么他们的具体的原理是存储器需要从CPU当中获取一部分空间用来存储数据和一些计算机操作指令;而寄存器是直接暂时的存数据来执行操作。

2.在功能上寄存器可以用来指向内存的随机位置;并且可以用来读写数据到电脑的周边设备,而存储器只能读取和存放。二者在存储和读取速度上也是有区别的,寄存器比存储器更快,因为是有限的空间读取存储有限的数据。

3.寄存器一般是一种与非门构成的,它一般集成在cpu中。它的性能比较优秀,但是它的造价也是相当昂贵的。一般许多高级的cpu也只有几兆的寄存缓存空间。所以寄存器带来的是缓存,存储器带来的储存空间。

区别

1、寄存器存在于CPU中,速度很快,数目有限;计算机做运算时,必须将数据读入寄存器才能运算。

存储器就是内存,速度稍慢,但数量很大。

2、存储器包括寄存器,存储器有ROM和RAM

2.1.2 ARM、DSP、FPGA

ARM具有比较强的事务管理功能,可以用来跑界面以及应用程序等,其优势主要体现在控制方面;ARM是32位的单片机,其内部硬件资源的性能较高,可以加载操作系统成为其主要特点,有了操作系统,就可以像pc机那样多任务实时处理,就是同一时间内能完成多个任务,而且不会互相影响。

DSP主要是用来计算的,比如进行加密解密、调制解调等,优势是强大的数据处理能力和较高的运行速度。

FPGA可以用VHDL或verilog HDL来编程,灵活性强,由于能够进行编程、除错、再编程和重复操作,因此可以充分地进行设计开发和验证。当电路有少量改动时,更能显示出FPGA的优势,其现场编程能力可以延长产品在市场上的寿命,而这种能力可以用来进行系统升级或除错。

ARM、DSP、FPGA比较——非常详细深入_wuqx_blogs的博客-CSDN博客_arm和dsp和fpga

2.1.3 单片机与嵌入式系统

关于单片机与嵌入式、操作系统与 RTOS之间的关系详解-电子发烧友网 (elecfans.com)

单片机开发之嵌入式基础_第12张图片

2.1.4 GPIO和IO口的区别

1、I/O

        IO即 Input Output,是计算机中的输入输出系统,用于 CPU 与外界进行信息交互。例如CPU 读内存数据需要 I/O 系统,CPU 输出数据到屏幕显示出来也需要 I/O 系统,信息在 I/O 系统上传输有并行或并行,所谓串行就是数据在一条线上传输,并行就是数据在多条线上传输,即并行一次传输多个bit,串行每次传输一个bit。

2、GPIO

        GPIO,英文全称为General-Purpose IO ports,也就是通用I/O口。在微控制器芯片上一般都会提供一个“通用可编程I/O接口”。接口至少有两个寄存器,即“控制方向寄存器”与“数据寄存器”。数据寄存器的各位都直接引到芯片外部,而对数据寄存器中每一位的作用,即每一位的信号流通方向是输入还是输出,则能够通过控制寄存器中相应位独立的加以设置。这样,有无 IO 接口也就成为微控制器差别于微处理器的一个特征。(不同MCU,寄存器配置不一样)

在实际的MCU中,I/O 是有多种形式的。比如,有的数据寄存器能够依照位寻址,有的却不能依照位寻址,这在编程时就要区分了。比如,传统的8051系列,就区分成可位寻址和不可位寻址两种寄存器。另外,为了使用的方便,非常多的 MCU 把 Glue Logic 等集成到芯片内部,增强了系统的稳定性能,比方GPIO接口除去两个标准寄存器必须具备外,还提供上拉寄存器,能够设置I/O的输出模式是高阻,还是带上拉的电平输出,或者不带上拉的电平输出。这在电路设计中,外围电路就能够简化不少。

GPIO的线路如果是向下的那就是输出模式,这里有一对MOS管组成的电路,这个结构使GPIO具有推挽输出和开漏输出俩种模式。

推挽输出模式:在该结构中输入高电平,经过反向使上方P-MOS导通,下方的N-MOS管截止,对外输出高电平。在该结构中输入低电平,经过反向上方P-MOS截止,下方的N-MOS导通,对外输出低电平。当俩种电平切换时,俩个MOS管轮流导通,使得其负载能力和开关速度都比普通的方式有很大提高。这种模式输出的低电平为0V,高电平为3.3V。

开漏输出模式:在这个模式下上方的P-MOS完全不工作对于开漏输出和推挽输出的区别最普遍的说法就是开漏输出无法真正输出高电平,即 高电平时没有驱动能力,需要借助外部上拉电阻完成对外驱动。

原理是:我们控制输出为0,则P-MOS管关闭,N-MOS管导通,输出接地,若输出为1(上面说了无法真正的输出高电平)时,则俩MOS管都关闭,引脚不是输出高电平,也不是低电平,而对外显示高阻态,正常使用一般都要外部上拉电阻,这种特性我们也把他成为“线与”,也就是说,如果有多个开漏模式的GPIO脚连接在一起,只有所有脚都对外显示高阻态时,外部的上拉电阻才会提供高电平,若是有一个引脚为低那么整条线路都为低电平。

因为这个特性,我们一般选择输出模式时都会选择推挽输出模式,只有在C、SMBUS通讯等需要“线与”特性的总线电路中我们才会使用开漏输出模式,且如果我们遇到电源不提配的场合,就可以吧GPIO引脚设置成开漏输出,外接上拉电阻,电源为5V。当输出高阻态时,上拉电阻和电源就可以向外输出5V的电压。如何选择上拉还是下拉见下面
 

3、区别

        GPIO 的意思是通用输入输出端口,可由编程决定其状态,MCU 的 I/O 就是 GPIO,也称双向输入输出端口,而 I/O 则泛指所有类型的输入输出端口,包括单向的端口如逻辑门电路的输入输出管脚和双向的 GPIO 端口,而 GPIO 则必然是双向的,这是为了避免不同语境
Part13--怎么区分I/O与GPIO_长路漫漫2021的博客-CSDN博客_gpio和io的区别

2.1.5 上拉电阻和下拉电阻

内部上拉,是指单片机内部带有上拉电阻,当没用到这个口线的时候,这个I/O口一直处于高电平(稳定状态),有一些单片机的上拉要根据用户在定义I/O口用途的时候一起定义是否要上拉(也就是在程序中定义);
有些单片机会默认上拉与否,也就是说当I/O口作为输入口使用时,系统会默认为带上拉。

上拉(Pull Up )或下拉(Pull Down)电阻,两者统称为“拉电阻”,作用:将状态不确定的信号线箝位至高电平(上拉)或低电平(下拉)。

如何选择正确值的上拉电阻和下拉电阻?_摆渡沧桑的博客-CSDN博客

如果输入引脚接上拉或下拉电阻,可以将该引脚确定为高电平或低电平,防止外界的干扰。

stm32设置内部上拉电阻_比较全面的电阻上、下拉介绍_miss废柴的博客-CSDN博客

单片机开发之嵌入式基础_第13张图片

TI的DSP芯片,GPIO的内部上拉在默认情况下是使能的(能够配置为PWM输出的GPIO除外,这类GPIO默认情况下内部上拉被禁用)。对于在默认情况下内部上拉被使能的GPIO来说,有些情况下,需要对其寄存器进行配置来禁用内部上拉。

如果GPIO配置为输出,内部上拉是否被使能,影响不大,因为主要取决于输出的是高电平还是低电平。

如果GPIO配置为输入,就要注意了,是否需要禁用内部上拉,取决于外部硬件电路的设计,比如,下图中的这种情况就应该禁用内部上拉,PWM_DSP输出到DSP芯片,如果使能了内部上拉,当光耦输出为开路时,由于R813、R811与DSP内部上拉电阻形成分压,PWM_DSP的电平就不为0了。
单片机开发之嵌入式基础_第14张图片

2.1.6 总线

        总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制信号。总线是一种内部结构,它是cpu、内存、输入、输出设备传递信息的公用通道,主机的各个部件通过总线相连接,外部设备通过相应的接口电路再与总线相连接,从而形成了计算机硬件系统。在计算机系统中,各个部件之间传送信息的公共通路叫总线,微型计算机是以总线结构来连接各个功能部件的。

单片机开发之嵌入式基础_第15张图片

 2.1.7 时序逻辑电路之半导体存储器

        一般有电平敏感和沿敏感的差异,电平敏感就是信号的高低电平,比如一个过程是该信号为0的时候执行那么只要该信号为0这过程就一直执行,而沿敏感的话这过程只会在上升或者下降的那一瞬间执行不会一直执行。

  数字电路基础知识——时序逻辑电路之半导体存储器(D触发器、锁存器(D、RS、JK、T))
在介绍本节之前,一般会有如下规定:
锁存器:电平敏感
寄存器:边沿触发
触发器:边沿触发

数字电路中有关半导体存储器件的主要是D触发器、锁存器、存储器等。主要用来存储数据。用于存储一位数据的存储电路称为寄存器,而可以存储大量数据的称为存储器。

(5条消息) 数字电路基础知识——时序逻辑电路之半导体存储器(触发器、锁存器(D、RS、JK、T))_摆渡沧桑的博客-CSDN博客_jk锁存器

2.1.8 阻容降压

        阻容降压的工作原理是利用电容在一定的交流信号频率下产生的容抗来限制最大工作电流。同时在电容器上串联一个阻性元件,则阻性元件两端所得到的电压和它所产生的功耗完全取决于这个阻性元件的特性。因此,电容降压实际上是利用容抗限流,而电容器实际上起到一个限制电流和动态分配电容器和负载两端电压的角色。

2.1.9 晶体振荡器

解析晶体振荡器电路原理 - 知乎 (zhihu.com)

2.1.10 有源器件和无源器件

        简单地讲就是需要能(电)源的器件叫有源器件,无需能(电)源的器件就是无源器件。有源器件一般用来信号放大、变换等,无源器件用来进行信号传输,或者通过方向性进行“信号放大”。电容、电阻、电感都是无源器件,IC、模块等都是有源器件。(通俗的说就是需要电源才能显示其特性的就是有源元件,如三极管。而不用电源就能显示其特性的就叫无源元件)。 

无源器件是什么意思_无源器件有哪些_无源器件和有源器件的区别-与非网 (eefocus.com)

2.1.11 斩波电路

        斩波电路(又叫直流斩波电路)是指在电力运用中,出于某种需要,将正弦波的一部分"斩掉".(例如在电压为50V的时候,用电子元件使后面的50~0V部分截止,输出电压为0.)后来借用到DC-DC开关电源中,主要是在开关电源调压过程中,原来一条直线的电源,被线路"斩"成了一块一块的脉冲。将直流电变为另一固定电压或可调电压的直流电。也称为直流--直流变换器(DC/DC Converter)。 

2.2 模拟电路 

下面两个文档结合看,一个是图一个是分析

20个经典模拟电路(详细图文)_eagle11235的博客-CSDN博客_电子电路

20个常用模拟电路(详细分析)_eagle11235的博客-CSDN博客单片机开发之嵌入式基础_第16张图片

模拟信号则是随时间变化连续的信号,模拟电路是指用来对模拟信号进行传输、变换、处理、放大、测量和显示等工作的电路。它主要包括放大电路、信号运算和处理电路、振荡电路、调制和解调电路及电源。即处理模拟信号的电路称为模拟电路。如整流电路、放大电路、运算放大器等,研究的是输入和输出信号间的大小及相位关系。在放大电路中,三极管通常工作在放大区。

单片机开发之嵌入式基础_第17张图片

(3条消息) 硬件基础——模拟电路_咸鱼箘的博客-CSDN博客_模拟电路

2.2.1 运算放大器

判断运放工作区的方法是:

如有负反馈,则工作在线性区;

如有正反馈或者无反馈,则工作在非线性区;

PS:

运放处于非线性状态时:虚短不成立,虚断可以使用。

2.2.2 比较器

2.2.2.1 比较器概念 

1、根据输出是否需要负压来选择供电方式

2、当正输入端电压大于负输入端电压时,比较器输出高

3、当正输入端电压小于负输入端电压时,比较器输出低

比较器基础篇_壹二叁的博客-CSDN博客_比较器电路

2.2.2.2 滞回比较器

        滞回比较器实际上是个加了正反馈的比较器,输出状态也是只有两个状态,要么是高电平,要么就是低电平,滞回比较器的特点是当输入电压逐渐增大或者减小时,有两个不相等的阈值,其传输特性具有滞回曲线的形状。其重点就是两个阈值:Uth和Utl,抓住比较器德的输出状态来确定当前使用的是哪个阈值:输出低电平时时低阈值Utl,输出高电平时是高阈值Uth。

比较器就是当 VIN(+) > VIN(-),输出高电平;VIN(+) < VIN(-),则输出低电平。但当两个输入端信号极为接近时,由于输入电压的毛刺就会导致输出产生连续跳变,这就是所谓的振铃效应。

比较器与滞回比较器的原理及应用_贾松(Jason)的博客-CSDN博客_滞回比较器

2.2.2.3 比较器的应用

比较器应用一:滞回比较器_壹二叁的博客-CSDN博客_滞回比较器电路

        利用滞回比较器和电容充放电产生三角波和方波,三角波为电容的充放电波形,而方波则是在电容充放电过程中比较器的输出端波形。 

比较器应用二:方波和三角波产生_壹二叁的博客-CSDN博客_比较器产生三角波  

比较器应用三:占空比可调的PWM波_壹二叁的博客-CSDN博客_pwm比较器

2.2.3 常用半导体

空穴型半导体又称P型半导体,是以带正电的空穴导电为主的半导体。也称为电子型半导体。N型半导体即自由电子浓度远大于空穴浓度的杂质半导体。采用不同的掺杂工艺,通过扩散作用,将P型半导体与N型半导体制作在同一块半导体(通常是硅或锗)基片上,在它们的交界面就形成空间电荷区称为PN结(英语:PN junction)。PN结具有单向导电性,是电子技术中许多器件所利用的特性,例如半导体二极管、双极性晶体管的物质基础。

单片机开发之嵌入式基础_第18张图片

pnp和npn区别是:1、输出元器件不同;2、输出信号不同;3、电阻接法不同。对于NPN而言,当障碍物靠近时,PLC检测到低电平;而PNP型接近开关,当障碍物靠近时,PLC检测到高电平。

 pnp与npn的区别是什么?_百度知道 (baidu.com)

接近开关pnp和npn的区别是什么-与非网 (eefocus.com)

常用半导体有二极管、三极管、场效应管(MOS管)、运算放大器等。而二极管、三极管、MOS管都为晶体管,具有检波、整流、放大、开关、稳压、信号调制等功能,并组成了放大电路。

一文搞懂三级管和场效应管驱动电路设计及使用_不脱发的程序猿的博客-CSDN博客_三极管与场效应管电路

一般三极管是由输入的电流控制输出的电流,但是对于场效应管,其输出电流是由输入的电压(或称电场)控制,可以认为输入电流极小或者没有输入电流,使得该器件有很高的输入阻抗,所以称之为场效应管。

N沟道增强型场效应管知识 (ejiguan.cn)

2.2.4 阻抗

阻抗是电阻与电抗(电容抗和电感抗)的向量和

电容具有“阻直流,通交流”的本领,而电感则有“通直流,阻交流,通低频,阻高频”的功能。

什么是阻抗?_不脱发的程序猿的博客-CSDN博客_阻抗和电阻的关系

2.2.5 电解电容和无电解电容

电解电容就是极性电容的一种,电解电容一般是容量相对比较大的。可以做到大容量小体积,单向导通电压,而无电解电容虽然双向导通,但是要制作大容量的话会导致体积很大。

有极性的电容实际上是一个只能按一个电压方向使用的电容。而无极性的电容,则两个电压方向都能使用。

无电解电容与电解电容是什么意思?有什么区别?无极性 - 131****8067 的回答 - 懂得 (idongde.com)

2.3 存储器

SDRAM、DRAM及DDR FLASH ROM概念详解_Z小旋的博客-CSDN博客_sdram和dram

单片机开发之嵌入式基础_第19张图片

2.4 嵌入式基础知识

嵌入式开发常用元器件基础知识 - 百度文库 (baidu.com)

三、单片机开发

(5条消息) 嵌入式的一些概念 FMC/GPIO/MIO与EMIO/GTP、GTX、GTH和GTZ_sxy1993sxy2018的博客-CSDN博客_嵌入式fmc是什么意思

3.1 外设

        单片机内部的外设一般包括:串口控制模块,SPI模块,I2C模块,A/D模块,PWM模块,CAN模块,EEPROM,比较器模块,等等,它们都集成在单片机内部,有相对应的内部控制寄存器,可通过单片机指令直接控制。

3.1.1 GPIO

微控制器芯片上一般都会提供一个“通用可编程IO接口”,即GPIO。

接口至少有两个寄存器,即 “通用IO控制寄存器” 与 “通用IO数据寄存器”。一个是做控制的通用IO端口控制寄存器,另外一个是存放数据的通用IO端口数据寄存器

(5条消息) 数字电路基础知识—— IO外设之GPIO介绍_摆渡沧桑的博客-CSDN博客_gpio和io的区别

3.1.2 PWM

​        脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。 ​PWM(Pulse Width Modulation)脉宽调制的相关参数有频率、占空比、幅值等。频率f = 1/T(周期),占空比D(Duty) = H/T(高电平时间与周期的比值)。

PWM原理

以单片机为例,我们知道,单片机的IO口输出的是数字信号,IO口只能输出高电平和低电平

假设高电平为5V 低电平则为0V 那么我们要输出不同的模拟电压,就要用到PWM,通过改变IO口输出的方波的占空比从而获得使用数字信号模拟成的模拟电压信号

我们知道,电压是以一种连接1或断开0的重复脉冲序列被夹到模拟负载上去的(例如LED灯,直流电机等),连接即是直流供电输出,断开即是直流供电断开。通过对连接和断开时间的控制,理论上来讲,可以输出任意不大于最大电压值(即0~5V之间任意大小)的模拟电压

比方说 占空比为50% 那就是高电平时间一半,低电平时间一半,在一定的频率下,就可以得到模拟的2.5V输出电压 那么75%的占空比 得到的电压就是3.75V,pwm的调节作用来源于对“占周期”的宽度控制,“占周期”变宽,输出的能量就会提高,通过阻容变换电路所得到的平均电压值也会上升,“占周期”变窄,输出的电压信号的电压平均值就会降低,通过阻容变换电路所得到的平均电压值也会下降

也就是,在一定的频率下,通过不同的占空比,即可得到不同的输出模拟电压。 

(3条消息) PWM原理 PWM频率与占空比详解_Z小旋的博客-CSDN博客_pwm

(2条消息) DSP芯片F2803x系列之PWM模块及高精度PWM使用_紫宸094的博客-CSDN博客_dsp pwm模块

3.1.3 ePWM 

        ePWM,即增强型脉宽调制模块,作用是产生频率、相位和占空比可调的方波脉冲。

        ePWM模块内部包含有7个子模块,分别是时间基准子模块TB、比较功能子模块CC,动作限定子模块AQ、死区控制子模块DB、斩波控制子模块PC、事件触发子模块ET和故障捕获子模块TZ。(经过TB,CC,AQ三个环节后,已经产生了PWM的基本形状)ePWM模块可以输出两路PWM,即EPWMxA和EPWMxB,两路PWM可以独立输出,也可以互补输出。

时基模块(TB, Time-Base Module);
计数比较模块(CC, Counter Compare Module);
动作模块(AQ, Action Qualifier Module);
死区模块(DB, Dead-Band Generator Module);
斩波模块(PC, PWM Chopper Module);
刹车模块(TZ, Trip Zone Module),也称联防模块;
事件触发模块(ET, Event Trigger Module);
数字比较模块(DC,Digital Compare);
 

全称时间基准(Time Base)模块。该模块主要有两个作用:一个是时钟信号的同步,另一个是计数。

计数器比较功能(Counter Compare)模块有两个比较寄存器CMPA和CMPB,其功能就是将计数器寄存器TBCTR的值和这两个比较寄存器的值进行比较,由此产生比较事件,从而产生PWM波。

当计数器的各种事件送入AQ后,由AQ来决定引脚应该如何动作,是变为高电平,还是变为低电平,还是没有任何动作,又或者直接翻转之前的电平,从而产生所需的PWM波形。

死区控制模块(Dead Band),用于避免功率开关控制信号翻转时发生误触发的情况。 

ePWM学习心得_mlc_WTMOTW的博客-CSDN博客_epwm

3.2 通信

总线是一组传输通道,是各种逻辑器件构成的传输数据的通道,一般由由数据线、地址线、控制线等构成。

接口是一种连接标准,又常常被称之为物理接口。

协议就是传输数据的规则。总线、接口和协议的区别联系深度解读-电子发烧友网 (elecfans.com)

(3条消息) 嵌入式学习(四)——串口_南边的柴柴的博客-CSDN博客_嵌入式串口

串口是怎样传输数据的_Crazzy_M的博客-CSDN博客_串口助手是怎么发送数据的

串口通信的基本原理_贝勒里恩的博客-CSDN博客_串口通信的基本原理

3.2.1 I²C(板与板)

       I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。

I2C 总线是一个半双工通信协议。由两根线组成,时钟线(SCL)和数据线(SDA)。I2C 可以分为主机和从机,同一 I2C 总线上只能有一个主机,可以有多个从机。需要注意的是从机不能发出传输请求,并且从设备的数据传输也是由主机进行控制的。

I2C 的传输速率有

标准模式:100kHz,
快速模式:400kHz,
高速模式:3.4 MHz。
(5条消息) I2C 协议_yang。。的博客-CSDN博客_i2c协议

(5条消息) I2C协议_到底是啥的博客-CSDN博客_i2c协议

(1条消息) IIC原理超详细讲解---值得一看_Z小旋的博客-CSDN博客_iic

        主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。

单片机开发之嵌入式基础_第20张图片

3.2.2 SPI(板与板)

        SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便。

(5条消息) SPI原理超详细讲解---值得一看_Z小旋的博客-CSDN博客_spi

SPI和SCI不同

SPI:SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如AT91RM9200。

SCI:SCI(Serial Communication Interface)意为"串行通信接口",是相对于并行通信的,是串行通信技术的一种总称,最早由Motorola公司提出的。它是一种通用异步通信接口UART,与MCS‐51的异步通信功能基本相同。

SPI和SCI的区别-与非网 (eefocus.com)

《SPI传输时序》

从设备的时钟由主设备通过 SCLK 提供,MOSI、MISO 则基于此脉冲完成数据传输。

SPI 的工作时序模式由 CPOL(Clock Polarity,时钟极性)和 CPHA(Clock Phase,时钟相位)之间的相位关系决定。CPOL 表示时钟信号的初始电平的状态(就是空闲状态),CPOL 为 0 表示时钟信号初始状态为低电平,为 1 表示时钟信号的初始电平是高电平。CPHA 表示在哪个时钟沿采样数据,CPHA 为 0 表示在首个时钟变化沿采样数据,而 CPHA 为 1 则表示在第二个时钟变化沿采样数据。

根据 CPOL 和 CPHA 的不同组合共有 4 种工作时序模式:

①CPOL=0,CPHA=0

②CPOL=0,CPHA=1

③CPOL=1,CPHA=0

④CPOL=1,CPHA=1

一文搞懂SPI的传输时序_airX嵌入式(微信公众号同名)的博客-CSDN博客_spi通信时序

3.2.3 串口通信RS232、RS485(板与PC)

 USB转串口 TTL RS-232 RS-485 COM口 UART区别_Z小旋的博客-CSDN博客_usb转串口ttl

同步通信和异步通信:

同步通信和异步通信的区别是:时钟线的有无。同步通信有时钟线,收发双方通过统一的时钟来频率确定何时进行数据的传输,如I2C和SPI。异步通信没有时钟线,可以任意时刻开始发送字符 但只能在数据的开始和尾加入标志位来区分不同的数据帧,即加上开始位和停止位,所传送的数据以字节为单位。每个字节前加上一位起始位,每个字节的后面加上停止位,接收数据之前也要预先知道波特率的大小,传输效率比同步通信要低。如UART 但方便简单,易于操作

 简单来说:

同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。  
异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。

串行通信与并行通信:

串行通信就是一根数据线,数据是一位一位的依次传输    

而并行通信则是8跟数据线,数据是一个字节一个字节的发送

串口形容一下就是一条车道,而并口就是有8/16个车道同一时刻能传送8/16位(一个字节/两个字节)数据。 

3.2.4 FIFO进程间的通讯

3.2.5 ModBus 

Modbus可将不同厂商生产的控制设备可以连成工业网络,进行集中监控,是一种通用工业标准。Modbus是一个master/slave架构的协议,有一个节点是master节点,其他使用Modbus协议参与通信的节点是slave节点,每一个slave设备都有一个唯一的地址。只有被指定为master节点的节点可以启动一个命令。所有的Modbus数据帧包含了校验码,保证传输的正确性。基本的ModBus命令能指令一个slave设备改变它的寄存器的某个值,控制或者读取一个I/O端口,以及指挥设备回送一个或者多个其寄存器中的数据。    

MODBUS-RTU和ASCII模式及CRC和LRC校验方法简述_BUG从入门到精通的博客-CSDN博客_modbus rtu无校验写法

 Modbus 是OSI模型第 7 层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。Modbus应用层协议和服务规范主要包含两类:一类是串行链路上的Modbus(Modbus 串行链路取决于TIA/EIA 标准:232-F 和 485-A),另一类是TCP/IP 上的Modbus(Modbus TCP/IP 取决于IETF 标准:RFC793 和 RFC791 有关)。

(3条消息) 一文看懂Modbus协议_不脱发的程序猿的博客-CSDN博客

3.2.6 JTAG

JTAG用于硬件测试和系统调试,即是对PCB进行出厂测试的一种方法,JTAG是(Joint Test Action Group;联合测试行动小组)1980年代开发的用于解决电子板制造问题的IEEE标准,更常用的是可以用作编程,调试和探测端口的一种协议。主要用于芯片内部测试。既然是协议,自然也是一种接口,一个将PC与芯片连接起来的接口。

JTAG的基本原理是在器件内部定义一个TAP(TestAccess Port;测试访问),TAP控制器的状态机通过TCK和TMS进行状态的改变,实现数据和指令的输入,通过专用的JTAG测试工具对进行内部节点进行测试。JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。现在,JTAG接口还常用于实现ISP(In-System Programmable;在线编程),对Flash等器件进行编程。

(2条消息) 什么是JTAG?_贾167的博客-CSDN博客_jtag

3.2.7 以太网协议

        以太网协议是由数据链路层和物理层定义的协议。以太网中主机发送的数据产生碰撞后该主机会执行碰撞避免算法,所以我们说以太网是基于碰撞区和碰撞检测的局域网通信标准。碰撞避免算法就是主机等待一段时间后重新发送数据,因此以太网底层也有重传机制,只不过以太网的重传机制只是为了保证将数据从局域网中的一台主机发送到另一台主机。

对比理解MAC地址和IP地址:

        实际数据在路由过程中会存在两套地址,一套是源IP地址和目的IP地址,还有一套是源MAC地址和目的MAC地址。

IP地址描述的是路途总体的起点和终点。
MAC地址描述的是路途上的每一个区间的起点和终点。
比如做公交车时,源IP地址就是我们上车的站点,目的IP地址就是我们最终要下车的站点,而源MAC地址就是公交车上一个已经到达的站点,目的MAC地址就是公交车下一个将要到达的站点。

因此数据在路由过程中,源IP地址和目的IP地址可以理解成是不会变化的,而数据每进行一跳后其源MAC地址和目的MAC地址都会变化。

(3条消息) 数据链路层协议 ——— 以太网协议_2021dragon的博客-CSDN博客_以太网协议

(3条消息) <13>基础知识——以太网(Ethernet )_Dark_Ice_的博客-CSDN博客_csdn 以太网

3.2.8 MQTT协议

MQTT是为了避免物联网中的一些特殊环境数据传输而生成的协议。

MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件 。

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

 你不知道的MQTT物联网协议起源——基于卫星通信的石油管道远程监控 - 知乎 (zhihu.com)

3.3 内存

3.3.1 Bootloader

分为三种:1)本地上电    2)远程备份    3)远程不备份

Bootloader=Boot + loader

Boot的目的:
最终目的:跳到C语言中;为了C语言运行程序会进行一系列的初始化,系统一上电后如何通过一系列的设置让软件程序员进入C语言/更高级语言环境的开发,这个过程就是boot的主要目的。

Loader的目的:
主要目的是开始执行应用逻辑,比如点灯:需要灯的接口开发;串口输入输出:需要串口编程;加载linux的内核:flash的编程、网卡的编程、内核启动前的初始化部分。根据不同的应用会有不同的变化。

一个开发板要想执行loader,要先看boot做了什么事。
Bootloader详解,理解Bootloader看这篇就够了_「已注销」的博客-CSDN博客_bootloader

配置系统时钟之前还有一个问题,不是配了就马上工作正常,还要经过一段时间,在这期间还要引入看门狗。看门狗就是一个定时器,在一段时间之内,如果不对定时器进行重新的喂狗,一旦减到0就会触发一个中断/复位,CPU就相当于重启了。所以要保证有足够的长的时间来执行前提条件(1)、(2)、(3)、(4),所以在配置时钟之前为了安全起见还要把看门狗给关了。同时中断也要关了,因为我们还没进入到C或者说还没进到系统处理,即使中断来了,我们还不知道该怎么处理,因为我们的函数还没注册进去,这时最好把中断也关了,在调用main函数时再将中断打开。除此之外还可以关闭MMU、CACHE,MMU一般指的是有操作系统情况下才用,裸机程序上一般情况下为了简单一点可以不要管它,对于CACHE,指令CACHE无所谓可开可关,但是数据CACHE一般情况下在这时最好关了,虽然说速度可以提高,但是由于涉及到数据完整性的问题,有可能CACHE打开后数据的完整性就会有影响,这样给后期的调试带来很大麻烦,所以先关了它。
 

3.4 嵌入式

3.4.1 嵌入式开发

3.5 操作系统

3.5.1 什么是操作系统

(1)linux、windows、android、ucos就是操作系统
(2)操作系统本质上是一个程序,由很多个源文件构成,需要编译连接成操作系统程序(vmlinz、zImage)
(3)操作系统的主要作用就是管理计算机硬件,给应用程序提供一个运行环境。

操作系统核心功能:

(1)内存管理。如果没有操作系统,内存是需要程序自己来管理的。譬如在uboot中要使用内存的哪里是自己随便用的,没有注册也没有限制。这时候如果程序自己不小心把同一块内存重复用了就会出现程序逻辑错误。系统大了之后(内存多了)内存管理非常麻烦;有了操作系统之后,操作系统负责管控所有的内存,所有的应用程序需要使用内存时都要向操作系统去申请和注册,由操作系统的内存管理模块来分配内存给你使用,这样好处是可以保证内存使用不会冲突。
(2)进程调度。操作系统下支持多个应用程序同时运行(所以可以一边聊QQ一边看电影···),这是宏观上的并行。实际上在单核心CPU上微观上是不能并行的,宏观上的并行就是操作系统提供的分时复用机制。操作系统的进程调度模块负责在各个进程之间进行切换。
(3)硬件设备管理。没有操作系统时要控制任何硬件都要自己写代码,有了操作系统后操作系统本身会去控制各个硬件,应用程序就不用考虑硬件的具体细节了。操作系统的硬件设备管理模块就是驱动模块。
(4)文件系统。文件系统是管理存储设备的一种方式。存储设备是由很多个扇区组成的,每个扇区有512/1024/2048/4096字节,存储设备要以扇区为单位进行读写。如果没有文件系统,程序要自己去读写扇区,就得记得哪个文件在哪个扇区。有了文件系统之后我们人不用再关注扇区,人只用关注文件系统中的目录和文件名,而不用管这个文件在物理磁盘的哪个扇区。

3.5.2 驱动是内核的一部分

驱动:计算机软件术语,是指驱动计算机里软件的程序。驱动程序全称设备驱动程序,是添加到操作系统中的特殊程序,其中包含有关硬件设备的信息。此信息能够使计算机与相应的设备进行通信。驱动程序是硬件厂商根据操作系统编写的配置文件,可以说没有驱动程序,计算机中的硬件就无法工作。

(1)驱动就是内核中的硬件设备管理模块
(2)驱动工作在内核态。
(3)驱动程序故障可能导致整个内核崩溃
(4)驱动程序漏洞会使内核不安全

3.5.3 应用程序和内核

(1)应用程序不属于内核,而是在内核之上的
(2)应用程序工作在用户态,是受限制的。
(3)应用程序故障不会导致内核崩溃
(4)应用程序通过内核定义的API接口来调用内核工作
(5)总结1:应用程序是最终目标
(6)总结2:内核就是为应用程序提供底层资源管理的服务员 

3.5.4 片上系统SOC

片上系统(System-on-Chip)指的是在单个硅芯片就可以实现整个系统的功能。

一个能够实现一定功能的电路系统由多个模块构成, 如处理器、接口、存储器、模数转换器等等。 这些功能模块可以由分立的器件来实现,然后在印刷电路板(PCB)上组合起来, 最终形成板上系统(System-on-a-Board)。 

什么是片上系统“SOC”?_英雄的小白的博客-CSDN博客_soc片上系统

四、知识扩展

4.1 PID控制算法

在汇川变频器之中,运用了PID控制算法,PID算法称之为万能算法,主要分为位置式PID算法和增量式PID算法。

PID 实指“比例 proportional”、“积分 integral”、“微分 derivative”,这三项构 成 PID 基本要素。每一项完成不同任务,对系统功能产生不同的影响。它的结构简单,参数易于调整,是控制系统中经常采用的控制算法。

(1条消息) 位置式PID与增量式PID区别浅析_Z小旋的博客-CSDN博客_增量式pid和位置式pid的区别

PID(proportion integration differentiation)其实就是指比例,积分,微分控制。(一开始看这个算法,公式能看懂,具体怎么用怎么写代码也知道,但是就是不知道原理,不知道为什么要用比例,微分,积分这3个项才能实现最好的控制,用其中两个为什么不行,用了3个项能好在哪里,每一个项各有什么作用)就看下面这一篇文章

(1条消息) 一文读懂PID控制算法(抛弃公式,从原理上真正理解PID控制)_确定有穷自动机的博客-CSDN博客_pid

一文搞懂PID控制算法_不脱发的程序猿的博客-CSDN博客_pid控制算法

4.2 滤波算法 

4.2.1 均值滤波、中值滤波

下文有均值滤波、中值滤波、一阶滤波、卡尔曼滤波等的算法代码的实现和滤波之后的图

滤波算法——均值滤波,中值滤波,一阶(αβ)滤波,卡尔曼滤波_GoodluckTian的博客-CSDN博客_滤波算法

卡尔曼滤波:卡尔曼滤波器的深入理解与可视化 - 知乎 (zhihu.com) 

卡尔曼滤波算法原理(KF,EKF,AKF,UKF)_GoodluckTian的博客-CSDN博客_卡尔曼滤波算法原理

4.2.2 LC、RC滤波电路

        常用的滤波电路有无源滤波和有源滤波两大类。无源滤波主要形式有电容滤波、电感滤波和复式滤波(包括L型、LC滤波、LCπ型滤波和RCπ型滤波等)。有源滤波的主要形式是有源RC滤波,也称为电子滤波器。直流电中的脉动成分的大小用脉动系数来表示,此值越大则滤波器的效果越差。

        电容具有“阻直流,通交流,通高频,阻低频”的本领,而电感则有“通直流,阻交流,通低频,阻高频”的功能。

(1) RC滤波器相对于LC滤波器来说,更容易小型化或者集成,LC相对体积就大多了;

(2) RC滤波器有耗损,LC滤波器理论上可以无耗损;

(3) RC比LC的体积要小,成本要底;

(4) RC用在低频电路中,LC滤波一般用在高频电路中;

(5) RC滤波中的电阻要消耗一部分直流电压,R不能取得很大,用在电流小要求不高的电路中.RC体积小,成本低.滤波效果不如LC电路; LC滤波主要是电感的电阻小,直流损耗小.对交流电的感抗大,滤波效果好.缺点是体积大,笨重.成本高.用在要求高的电源电路中.

(6)滤波级数越多效果也好,但是带来的是损耗和成本越高,所以不建议超过3级;

(7) RC滤波器一般常与运算放大器组合使用,构成有源滤波器,多作为低频信号的滤波。例如,在锁相环路中作为环路滤波器使用。
LC和RC滤波电路分析_水枂的博客-CSDN博客_lc滤波电路

4.3 时钟树

时钟树有系统时钟和其他时钟,就是通过不同的设备将时钟信号进行处理。

一般使用HSE(高速外部时钟信号),除非HSE出问题之后才用HSI(高速内部时钟信号),因为HSI根据温度和环境的情况频率会飘逸不稳定。

(3条消息) STM32-RCC时钟-时钟树介绍_学c入门到入土的博客-CSDN博客_时钟树

你可能感兴趣的:(单片机,嵌入式硬件)