ARM架构
概念:
ARM架构(Advanced RISC Machine)是一种处理器架构,广泛应用于移动设备、嵌入式系统和低功耗应用中
ARM架构的特点和优势:
1、简化指令集
:ARM采用精简指令集(RISC, Reduced Instruction Set Computer),指令集简单且易于解码和执行,使得处理器设计更加高效。
2、低功耗设计
:ARM架构在设计上注重低功耗特性,使得ARM处理器能够在电池供电的移动设备上实现较长的续航时间。
3、高性能
:尽管ARM架构着重于低功耗设计,但它大量使用寄存器,提供出色的性能。ARM处理器通过多核设计、高频率运行和高级优化技术,实现了高效的计算能力。
4、可扩展性
:ARM架构具有良好的可扩展性,可以应用于不同的设备和应用领域。从低端的嵌入式系统到高端的服务器,ARM处理器都能够满足各种需求。
5、软件生态系统
:ARM架构享有广泛的软件生态系统支持。许多操作系统(如Android、iOS)和应用程序已经针对ARM架构进行了优化,使得ARM处理器成为移动设备的首选。
6、设计定制性
:ARM架构提供了灵活的设计定制选项,使得芯片制造商能够根据特定应用的需求进行定制和优化,从而实现更好的性能和功耗平衡。
面经真题 | ARM体系架构基础知识_牛客网 (nowcoder.com)
————————————————————-——————————————————————
ARM寄存器主要有哪些
37个
ARM寄存器根据其功能和用途,主要可以分为以下几类:
一、通用寄存器(General Purpose Registers, GPRs)
ARM处理器共有31个通用寄存器,这些寄存器都是32位的,可用于存储数据、传递参数、保存返回值等。通用寄存器可以进一步细分为以下几类:
- 未分组寄存器(R0~R7):
- 这些寄存器在所有处理器模式下都访问同一个物理寄存器。
- 它们是真正的通用寄存器,没有体系结构所隐含的特殊用途。
- 分组寄存器(R8~R12, R13, R14):
- 这些寄存器所访问的物理寄存器取决于当前的处理器模式。
- R8~R12各有两组物理寄存器:一组用于FIQ(快速中断)模式,另一组用于除FIQ以外的所有模式。
- R13和R14各有6个分组的物理寄存器,其中一个用于用户模式和系统模式,其他5个分别用于5种异常模式。
- R13常用作堆栈指针(Stack Pointer, SP),但用户也可使用其他寄存器作为堆栈指针。
- R14用作子程序链接寄存器(Link Register, LR),用于保存子程序调用的返回地址。
- 程序计数器(R15, PC):
- 用于存储当前正在执行的指令的地址。
- 在ARM状态下,位[1:0]为0,位[31:2]用于保存PC。
- 在Thumb状态下,位[0]为0,位[31:1]用于保存PC。
二、状态寄存器(Program Status Registers, PSRs)
状态寄存器用于存储当前程序的状态信息,包括条件码标志、中断使能、执行模式等。ARM处理器中主要有两个重要的状态寄存器:
- 当前程序状态寄存器(CPSR):
- 这是一个32位的特殊寄存器,包含程序状态字(PSW)的各个标志位。
- 它的内容包括条件码(如N、Z、C、V,分别代表负数、零、进位、溢出)、中断禁止位(I、F,分别控制IRQ和FIQ中断的禁止)、工作状态位(T,指示处理器当前是运行在ARM状态还是Thumb状态)、以及模式位(M[4:0],决定处理器的运行模式)。
- 备份的程序状态寄存器(SPSR):
- 当异常发生时,SPSR用于保存CPSR的当前值,以便在异常处理结束后恢复原有状态。
- 每种异常模式都有一个对应的SPSR。
三、其他寄存器
除了上述两类主要寄存器外,ARM架构还包含了一些其他类型的寄存器,如控制寄存器、特定用途寄存器、SIMD和浮点寄存器、系统寄存器等。这些寄存器在ARM处理器的不同版本和扩展中可能有所不同,用于实现特定的功能,如内存管理、调试、系统配置、浮点运算和SIMD操作等。
————————————————————-——————————————————————
总线的定义与作用
定义:
总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,由导线组成的传输线束。在计算机系统中,总线用于连接CPU、内存、外设等部件,实现它们之间的数据、地址和控制信号的传输。
作用:
- 数据传输:作为数据传输的通道,实现CPU与内存、外设之间的数据交换。
- 地址传输:用于指定数据存储或外设控制的地址。
- 控制信号传输:将CPU的控制信号传输到外设,实现对外设的控制
————————————————————-——————————————————————
时钟树与总线之间的关系
- 时钟信号提供者:时钟树是总线时钟信号的提供者。它为总线(如AHB总线、APB总线等)提供适当的时钟频率,确保总线上的数据传输、地址传输和控制信号传输能够按照预定的时序进行。
- 性能与同步的保障:时钟树通过提供稳定的时钟信号,保障总线上的数据传输和通信的同步性和可靠性。同时,时钟树中的时钟分频和同步机制,有助于优化系统的整体性能和功耗。
- 协同工作:时钟树和总线在微控制器系统中协同工作,共同实现系统的各项功能。时钟树为总线提供时钟信号,而总线则利用这些时钟信号实现各个部件之间的数据交换和控制信号的传输。
————————————————————-——————————————————————
时钟树分析
5个时钟源
1.HSI高速内部时钟:RC振荡器,频率为16MHz,精度不高。可以作为系统钟或PLL时钟输入
2.HSE高速外部时钟:可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~26MHz
3.LSI低速内部时钟,RC振荡器(电阻+电容),频率32kHz,提供低功耗时钟。主要供独立看门狗。
4.LSE是低速外部时钟,接频率为32.768kHz的石英晶体。可以作为RTC时钟源
5.PLL为锁相环倍频输出。
STM32F4xx 器件具有两个 PLL:
● 主 PLL (PLL) 由 HSE 或 HSI 振荡器提供时钟信号,并具有两个不同的输出时钟:
— 第一个输出用于生成高速系统时钟(最高达 168 MHz)
— 第二个输出用于生成 USB OTG FS 的时钟 (48 MHz)、随机数发生器的时钟
(48 MHz) 和 SDIO 时钟 ( 48 MHz)。
● 专用 PLL (PLLI2S) 用于生成精确时钟,从而在 I2S 接口实现高品质音频性能。
————————————————————-——————————————————————
stm32的最小系统
1、芯片
2、电源电路
3、时钟电路
4、复位电路
5、调试和下载电路
————————————————————-——————————————————————
GPIO口的概念和应用场景
一、GPIO口的概念
GPIO(General Purpose Input/Output),即通用输入/输出端口,是嵌入式系统中非常重要的基本硬件资源之一。GPIO引脚由微处理器内部的I/O控制器控制,每个引脚都可以独立配置为输入或输出模式,并通过软件编程进行灵活的控制。
GPIO工作模式:
1、GPIO_MODE_IN(输入模式):根据其内部电路的上拉电阻和下拉电阻分为上拉输入和下拉输入,改变的是没有操作IO口时的默认电平。
2、GPIO_MODE_OUT(输出模式):用于输出高低电平,根据两个mos管的工作模式,分为推挽输出和开漏输出。
3、GPIO_MODE_AF(复用模式):通常复用于UART,IIC,SPI等通信接口。用于与外部设备通信。
4、GPIO_MODE_AN(模拟输入模式):常用于ADC电路的输入输出。
二、GPIO口的应用场景
GPIO口在嵌入式系统中的应用场景非常广泛,主要包括以下几个方面:
- 控制外部设备:
- LED灯控制:通过GPIO口输出高低电平,可以控制LED灯的亮灭,实现简单的灯光控制功能。
- 继电器控制:继电器是一种通过小电流控制大电流的设备,通过GPIO口控制继电器的开闭,可以实现对大电流设备的控制,如电机、加热器等。
- 电机控制:对于小型直流电机,可以通过GPIO口输出PWM(脉冲宽度调制)信号来控制电机的转速和方向。
- 读取外部设备状态:
- 按键输入:通过GPIO口读取按键的状态(按下或未按下),实现人机交互功能。
- 传感器数据读取:连接各种传感器(如温度传感器、湿度传感器、光敏传感器等),通过GPIO口读取传感器输出的模拟或数字信号,获取外部环境的数据。
- 通信接口:
- 虽然GPIO口主要用于输入输出功能,但某些GPIO引脚还可以配置为特定的通信接口模式,如I2C、SPI、UART等,实现与外部设备的串行通信。
- 中断功能:
- 将GPIO口配置为中断模式,可以在外部事件(如按键按下、传感器触发等)发生时产生中断请求,使CPU能够实时响应并处理这些事件。
GPIO中的构成
保护二极管:IO引脚的上下两个二极管用于防止外部过高、过低的电压的输入,当引脚电压大于VDD_FD的时候,上方二极管导通,当引脚电压小于VSS的时候,下方二极管导通,防止不正常的电压把芯片烧坏。
上拉、下拉电阻:控制引脚默认的电平,当引用上拉电阻的时候,引脚默认电平为高电平,当引用下拉电阻的时候,引脚默认电平为低电平。
TTL施密特触发器:基本原理就是电压大于正向阈值电压的时候,输出为高。当输入电压小于负向阈值电压的时候,输出为低;IO口的信号通过触发器之后,转换为数字信号1和0,也就是高低电平,并且是TTL电平协议,这就是为很么STM32是TTL电平协议的原因
P_MOS和N_MOS管:控制输出模式,P_MOS管高电平导通,低电平关闭。N_MOS相反
————————————————————-——————————————————————
中断
概念:中断是stm32中的一个重要机制,它可以使cpu能够异步处理事件。
优点:1、stm32有很多中断源,如IO引脚电平变化,传感器接受数据,adc转换完成等,使cpu可以灵活的响应外部或者内部的事件
2、中断允许设置优先级和向量嵌套,可以使程序变得更加灵活,高效,可拓展。
中断流程:当STM32在程序运行过程中触发中断条件时,STM32会暂停当前正在运行的程序,转头去处理中断程序,处理完后又会返回原先暂停的地方继续运行主程序。
1、中断响应:当中断事件发生时,STM32首先会对中断请求进行检测。如果检测到中断请求,CPU会暂停当前进程的执行,将控制权交给中断处理程序。
2、中断处理:中断处理程序是一段特殊的代码,负责处理中断事件。中断处理程序必须尽可能快地执行完成,以便尽快恢复原来的执行状态。
3、中断返回:当中断处理程序执行完成时,CPU会返回到原来的执行状态,继续执行之前中断事件发生时的程序。
————————————————————-——————————————————————
NVIC的组成:
1、中断优先级寄存器:NVIC使用寄存器来配置中断的优先级。这些寄存器允许开发者为每个中断设置优先级,以决定在多个中断同时发生时,哪个中断应该首先被处理。
2、中断向量表:每个中断在NVIC中都有一个唯一的编号(向量),这些向量存储在中断向量表中。中断向量表是一个特殊的存储区域,它包含了每个中断服务程序(ISR)的入口地址。
3、系统控制寄存器:系统控制寄存器提供了对NVIC中断控制器的配置和控制。
4、特殊功能寄存器:特殊功能寄存器是NVIC中断控制器对外暴露的寄存器,用于实现对中断处理的控制,包括中断使能、中断标志、中断状态等。
————————————————————-——————————————————————
请解释一下嵌入式系统中的中断嵌套和中断优先级的概念。
一、中断嵌套
定义:
中断嵌套是指当CPU正在处理一个中断源的服务请求(即执行相应的中断服务程序ISR)时,如果发生了另一个优先级更高的中断源请求,CPU会暂停当前正在处理的中断服务程序,转而去处理这个优先级更高的中断请求。处理完高优先级的中断后,CPU会返回到之前被暂停的中断服务程序,继续执行未完成的部分。这个过程就是中断嵌套。
定义:
中断优先级是指当多个中断源同时向CPU发出中断请求时,CPU根据中断源的优先级来决定首先响应哪个中断请求。每个中断源都被分配了一个唯一的优先级值,这个值决定了它在中断队列中的位置。优先级高的中断会先于优先级低的中断得到处理。
————————————————————-——————————————————————
外部中断配置的流程
1、配置时钟
2、初始化要配置的引脚
3、设置该引脚的中断功能
4、配置触发中断的条件
5、设置中断优先级
//中断KEY_1相关函数声明
void INTERRUPT_KEY1_Config(void)
{
//1、配置时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
//配置GPIO接口
//2.初始化IO接口
GPIO_InitTypeDef keystruct;
//引脚号码
keystruct.GPIO_Pin = GPIO_Pin_4;
//输入模式
keystruct.GPIO_Mode = GPIO_Mode_IN;
//上拉电阻
keystruct.GPIO_PuPd = GPIO_PuPd_UP;
//低速
keystruct.GPIO_Speed = GPIO_Low_Speed;
//初始化
GPIO_Init(GPIOE,&keystruct);
//3、外部中断配置.E组四号引脚配置成中断功能
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource4);
//4、外部中断初始化
EXTI_InitTypeDef exitstruct;
exitstruct.EXTI_Line = EXTI_Line4;
exitstruct.EXTI_LineCmd = ENABLE;
exitstruct.EXTI_Trigger = EXTI_Trigger_Falling;
exitstruct.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_Init(&exitstruct);
//中断控制器
NVIC_InitTypeDef nvicstruct;
//中断类型 —— 外部中断
nvicstruct.NVIC_IRQChannel = EXTI4_IRQn;
nvicstruct.NVIC_IRQChannelCmd = ENABLE;
//抢占优先级 四选一
nvicstruct.NVIC_IRQChannelPreemptionPriority = 0;
//响应优先级
nvicstruct.NVIC_IRQChannelSubPriority = 0;
NVIC_Init(&nvicstruct);
}
————————————————————-——————————————————————
请解释一下嵌入式系统中的软中断和硬中断的区别
在嵌入式系统中,软中断和硬中断是两种不同类型的中断机制,它们在触发方式、处理过程、优先级管理等方面存在显著差异。以下是对这两种中断机制的详细解释和区别:
一、定义与触发方式
- 硬中断(Hardware Interrupt)
- 定义:硬中断是由外部硬件设备触发的中断,如定时器、串口、外部按键、磁盘、网卡等。
- 触发方式:当硬件设备需要CPU的注意或处理时,会向CPU发送中断信号,CPU在接收到信号后会暂停当前正在执行的程序,转而去处理中断服务程序(ISR)。
- 软中断(Software Interrupt)
- 定义:软中断是由软件指令触发的中断,通常用于操作系统内部的任务调度或I/O请求处理。
- 触发方式:软中断是由当前正在运行的程序或操作系统本身通过执行特定的中断指令来触发的,不需要外部硬件设备的参与。
二、处理过程与特性
- 处理过程
- 硬中断:处理过程包括中断信号的接收、中断服务程序的执行以及中断返回。在硬中断处理过程中,CPU会保存当前程序的执行状态(如程序计数器、寄存器等),然后跳转到中断服务程序执行相应的处理,处理完毕后恢复之前的状态并继续执行原程序。
- 软中断:软中断的处理过程与硬中断类似,但触发方式不同。软中断主要用于操作系统内部的任务调度和I/O请求处理,其处理过程也涉及到状态的保存与恢复,但更多地是依赖于操作系统的调度策略。
- 特性差异
- 触发时机:硬中断的触发时机是随机的,由外部硬件设备的状态决定;而软中断的触发时机则是由程序控制的,具有确定性。
- 可屏蔽性:硬中断通常是可屏蔽的,即可以通过设置中断屏蔽位来阻止某些中断的响应;而软中断则不可屏蔽,因为它们是由程序主动触发的。
- 优先级:在嵌入式系统中,中断控制器通常支持中断优先级管理,高优先级的中断可以打断低优先级的中断服务程序。虽然软中断本身没有直接的优先级概念,但它们在操作系统内部的调度策略中可能会受到优先级的影响。
三、应用场景与实例
- 硬中断:适用于需要实时响应的外部事件处理,如键盘输入、网络通信等。
- 软中断:主要用于操作系统内部的任务调度和I/O请求处理,如进程切换、磁盘I/O操作等。
四、总结
软中断和硬中断在嵌入式系统中各自扮演着重要的角色,它们的主要区别在于触发方式、处理过程以及特性差异。硬中断由外部硬件设备触发,具有随机性和可屏蔽性;而软中断则由程序指令触发,具有确定性和不可屏蔽性。在实际应用中,根据具体需求选择合适的中断机制对于提高系统的响应能力和效率至关重要。
————————————————————-——————————————————————
Systick
简述一下STM32或者说ARM Cortex内核的Systick:
Systick属于内核上的设备,提供系统时钟
是Cortex-M microcontrollers内核中提供的一个简单而有效的系统定时器,设计用来给操作系统提供时间基准,或用于生成周期性的中断。以下是关于STM32或ARM Cortex内核的SysTick的详细简述:
1. 功能特性
- 自动重载的递减计数器:SysTick是一个24位自动重载的递减计数器,达到0时,计数器会自动重新装载预设的值,并可以产生一个可选的中断。
- 灵活的时钟源选择:SysTick定时器可以选择内核时钟(processor clock)或内核时钟的1/8作为其时钟源,这为开发者提供了根据实际需求选择时钟速度的灵活性。
- 无需外部硬件:SysTick是内核内置功能,不需要其他外部硬件,可以保持系统的精简。
2. 应用场景
- 操作系统节拍:实时操作系统(RTOS)常用SysTick定时器作为系统的基础节拍源,用于任务调度、时间管理等。
- 程序延时:在不需要精确时间管理的应用中,SysTick可以用来实现简易的延时功能,例如等待硬件准备好或实现非阻塞延迟。
- 时间测量:SysTick也可以用于程序执行时间的测量,从而帮助开发者优化代码。
3. 寄存器与配置
SysTick具有几个关键的寄存器,包括:
- SysTick 控制和状态寄存器(STK_CTRL):用于使能SysTick功能,配置时钟源,以及设置是否触发中断。
- SysTick 重装载值寄存器(STK_LOAD):用于设置SysTick定时器的重载值,即计数器达到0后重新装载的值。
- SysTick 当前值寄存器(STK_VAL):用于读取SysTick定时器的当前值。
- SysTick 校准值寄存器(STK_CALIB):提供SysTick定时器的校准信息,通常用于精确测量时间。
4. 初始化与使用
为了初始化SysTick定时器,通常需要设置定时器的重载值,选择时钟源,并可选地使能SysTick中断。以下是一般的初始化步骤:
- 选择时钟源:通过SysTick控制和状态寄存器(SysTick CTRL)中的CLKSOURCE位来控制。
- 设置重载值:根据定时器所需的时间间隔和系统时钟频率,计算并设置SysTick的重载值。
5. 注意事项
- 时钟频率:SysTick定时器的精度和计时范围取决于所选的时钟源和重载值。
- 中断优先级:SysTick的中断优先级是固定的,开发者在编写中断服务例程时需要注意这一点。
- 调试期间的暂停:当处理器在调试期间被暂停、睡眠状态时,SysTick定时器也会暂停运作。
综上所述,SysTick是Cortex-M系列微控制器中非常实用的功能,对于需要精确时间管理或操作系统支持的应用来说尤其重要。通过合理配置和使用SysTick定时器,开发者可以实现高效的任务调度和时间管理。
————————————————————-——————————————————————
RS232的概述和特点
概述:"RS-232-c“(硬件接口)是一种广泛使用的串行通信接口标准。'RS'是“推荐标准”的缩写,232为标识号,‘c’表示修改次数。
“RS232”是个人计算机的通讯接口之一,由EAI指定的异步传输标准接口。
RS232的特点:
- 接口标准:
- RS-232接口定义了多种连接器类型,包括DB-25、DB-15和DB-9等,其中DB-9是最常用的规格。
- DB-9连接器包含了9个引脚,常用的引脚包括接收数据(RXD)、发送数据(TXD)和地线(GND)等。
- 电气特性:
- RS-232采用负逻辑传送方式,逻辑“1”的电平为-5V-15V,逻辑“0”的电平为+5V+15V。这种电气标准旨在提高抗干扰能力,增大通信距离。
- RS-232的接口电平值较高,容易损坏接口电路的芯片,且与TTL电平不兼容,因此通常需要使用电平转换电路才能与TTL电路连接。
- 传输方式:
- RS-232支持全双工和半双工两种传输方式,但在实际应用中,通常使用全双工方式以实现数据的双向传输。
- 它采用串行传送方式,将微机的TTL电平转换为RS-232C电平,传送距离一般可达30米。若采用光电隔离20mA的电流环进行传送,其传送距离可以达到1000米。
- 传输速率:
- RS-232规定了多种标准传送速率,包括50b/s、75b/s、110b/s、150b/s、300b/s、600b/s、1200b/s、2400b/s、4800b/s、9600b/s、19200b/s等,可以灵活地适应不同速率的设备。
- 在异步传输时,最高传输速率可达20Kbps,但在实际应用中,由于接口特性和电气特性的限制,传输速率可能会受到一定影响。
- 传输距离:
- RS-232接口的直接传输距离有限,最大传输距离标准值为50英尺(约15米)。在实际应用中,若需要更长的传输距离,通常需要添加调制解调器(Modem)等设备进行中继。
- 抗干扰能力:
- RS-232接口采用单端通讯方式,其发送电平与接收电平的差只有2~3V,共模抑制能力较差,容易受到共地噪声和外部干扰的影响。因此,在传输距离较长或环境干扰较大的情况下,可能需要采取额外的抗干扰措施。
- 应用领域:
- RS-232接口被广泛应用于计算机、通信设备、工业自动化等领域。在计算机领域中,它常被用于连接鼠标、键盘、打印机等外部设备;在通信设备领域中,它则被用于连接Modem、路由器等设备;在工业自动化领域中,它也被用于连接传感器、执行器等设备。
————————————————————-——————————————————————
通信背景知识(并行,串行;同步,异步;单工,双工等)
处理器与外部设备的通信,按照数据的传输方式有2种: 串行通信与并行通信:
并行通信。
传输原理:数据各个位同时传输。
-优点:速度快。
-缺点:占用引脚资源多。
串行通信。
传输原理:数据按位顺序传输。
-优点:占用引脚资源少。
-缺点:速度相对较慢,不能远距离传输。
处理器与外部设备的通信,按照数据的传输方向有3种:单工,半双工,全双工。
单工: 数据传输只支持数据在一个方向上传输。
半双工: 允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;
全双工: 允许数据同时在两个方向上传输,因此,全双工通信是两个 单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。
同步与异步:
在通信协议的时序总线上传送的每一位数据,数据总线上都有一个时钟脉冲相对应,这叫做同步控制。
————————————————————-——————————————————————
UART(通用异步收发传输器)
————————————————————-——————————————————————
UART有几根主线?有什么作用,有不用接的线吗
总线数量
- 标准数量:UART通信通常使用三根线进行数据传输,分别是TX(发送)、RX(接收)和GND(地线)。但在某些情况下,如使用RS-232接口时,可能会包含更多的信号线,但基本的UART通信只需要这三根线。
每根线的作用
- TX(发送数据线):用于从发送设备(如微控制器)向接收设备(如计算机或其他微控制器)发送数据。
- RX(接收数据线):用于从接收设备向发送设备发送数据,实际上是接收发送设备发送过来的数据。
- GND(地线):提供电路公共的参考点,确保所有信号的电平都有一个统一的基准。
可能不用接的线
- 在标准的UART通信中,通常没有“不用接的线”,因为TX、RX和GND都是必需的。然而,在特定的应用场景或硬件设计中,如果某些功能不被使用或已经通过其他方式实现(如通过软件模拟、使用内部信号等),那么对应的硬件线路可能会被省略或空置。
- 需要注意的是,省略或空置线路应该基于充分的理解和考虑,以避免对通信过程造成不良影响
————————————————————-——————————————————————
通用计时器的基本概念
通用定时器(如STM32系列中的TIMx定时器)是微控制器中常用的功能模块,用于实现定时、计数、输入捕获、输出比较、PWM生成等多种功能。其基本工作原理可以概括为以下几个方面:
一、功能模块组成
通用定时器主要由以下几个功能模块组成:
- 时基单元:包括计数器寄存器(TIMx_CNT)、预分频器寄存器(TIMx_PSC)和自动装载寄存器(TIMx_ARR)。
- 输入捕获单元:用于捕获外部信号的脉冲宽度或频率。
- 输出比较单元:用于生成输出波形,如PWM信号。
- 中断/DMA单元:在特定事件发生时产生中断或DMA请求。
二、基本工作原理
-
时基单元工作原理
- 计数器寄存器(TIMx_CNT):根据时钟源输入的时钟信号进行计数。计数范围通常为1~65535,超出此范围将发生溢出。
- 预分频器寄存器(TIMx_PSC):对时钟源输入的时钟信号进行分频,分频系数可以在1~65535之间设置。通过预分频器,可以降低计数器的计数频率,从而扩大定时范围。
- 自动装载寄存器(TIMx_ARR):用于设置计数器的自动装载值。当计数器计数值达到此值时,将产生中断事件,并根据设置重新装载计数器值。
-
计数模式
- 向上计数模式:计数器从0开始计数,计数值达到自动装载值(TIMx_ARR)时产生中断事件,然后重新从0开始计数。
- 向下计数模式:计数器从自动装载值(TIMx_ARR)开始向下计数,计数值达到0时产生中断事件,然后重新从自动装载值开始计数。
- 中央对齐模式(向上/向下计数):计数器先向上计数到自动装载值-1,然后产生中断事件并向下计数到1,再次产生溢出事件,之后重新从0开始计数。
-
输入捕获
- 输入捕获单元用于捕获外部信号的边沿(如上升沿或下降沿),并记录捕获时刻的计数器值。这可以用于测量输入信号的脉冲宽度或频率。
-
输出比较
- 输出比较单元将计数器值与预设的比较值进行比较,当两者相等时产生输出比较事件。根据配置,可以生成不同的输出波形,如PWM信号。
-
中断/DMA
- 在特定事件发生时(如计数器溢出、输入捕获、输出比较等),通用定时器可以产生中断或DMA请求。这允许微控制器在需要时响应这些事件,执行相应的处理程序。
三、应用示例
通用定时器可以被广泛应用于各种场合,如:
- 定时控制:用于实现定时任务,如延时、周期性任务等。
- 脉冲宽度调制(PWM):生成PWM信号,用于电机控制、LED调光等。
- 输入信号测量:测量外部信号的脉冲宽度或频率,用于信号处理或分析。
总之,通用定时器是微控制器中非常重要的功能模块之一,其灵活性和多功能性使其在各种应用中发挥着重要作用。
————————————————————-——————————————————————
PWM的基本工作原理
一、PWM的基本概念
首先,可以简要介绍PWM的全称及其作用。PWM,即脉冲宽度调制(Pulse Width Modulation),是一种通过改变脉冲信号的宽度来控制模拟信号平均值的技术。它常用于电机控制、照明调节、电源管理等领域,以实现精确的模拟量控制。
二、PWM的基本工作原理
接下来,详细解释PWM在STM32中的基本工作原理:
- 脉冲信号生成:
- STM32中的定时器(如TIMx)用于生成周期性的脉冲信号。定时器的计数器(CNT)会根据预设的时钟频率进行递增或递减计数。
- 脉冲信号的周期由自动重装载寄存器(ARR)的值决定。当CNT的值达到ARR时,定时器会重新从0开始计数,形成一个周期性的脉冲信号。
- 占空比控制:
- 占空比是指脉冲信号中高电平(或有效电平)所占的时间比例。在STM32中,通过比较计数器(CNT)的值与捕获/比较寄存器(CCRx)的值来控制PWM信号的占空比。
- 当CNT的值小于CCRx时,PWM信号输出高电平(或有效电平);当CNT的值大于或等于CCRx时,PWM信号输出低电平(或无效电平)。通过调整CCRx的值,可以改变PWM信号的占空比。
- 输出模式与极性:
- STM32支持多种PWM输出模式,如边沿对齐模式和中心对齐模式。边沿对齐模式下,PWM信号的起始和终止边沿与定时器的计数周期对齐;中心对齐模式下,PWM信号的起始位置位于周期的中间。
- PWM信号的输出极性也可以设置,包括高电平有效和低电平有效两种模式。这通过配置相应的寄存器位来实现。
三、STM32中PWM的配置步骤
为了更具体地说明如何在STM32中配置PWM,可以简要介绍配置步骤:
- 使能定时器及端口时钟:通过STM32的时钟管理系统使能定时器和相关GPIO端口的时钟。
- 配置GPIO为复用功能:将用于输出PWM信号的GPIO引脚配置为复用推挽输出模式,并映射到相应的定时器通道上。
- 初始化定时器:配置定时器的自动重装载值(ARR)、预分频系数、计数模式等参数。
- 配置PWM输出:设置PWM模式、输出极性、使能比较输出等参数。
- 启动定时器:使能定时器,开始生成PWM信号。
四、总结与拓展
最后,可以对PWM的基本原理和STM32中的配置方法进行总结,并适当拓展一些实际应用场景,如电机速度控制、LED亮度调节等,以展示PWM技术的广泛应用和重要性。
————————————————————-——————————————————————
DHT11的原理和概念
1. 原理
DHT11是一种数字式温湿度传感器,其核心工作原理基于电阻式温度传感器和电容式湿度传感器的结合。具体来说:
- 温度测量:DHT11内部集成了一个NTC(负温度系数)测温元件,即热敏电阻。这种电阻的阻值会随着温度的变化而变化,通过测量其阻值,可以计算出当前的温度值。
- 湿度测量:对于湿度的测量,DHT11采用了一个电容式湿度传感器。该传感器的电容值会随着湿度的变化而变化,通过测量其电容值,可以计算出当前的湿度值。
DHT11内部还包含了一个数字信号处理单元,用于将温度传感器和湿度传感器采集到的模拟信号转换为数字信号,并通过单线串行接口输出。这种数字输出的方式使得DHT11能够直接与各种微控制器(如单片机、Arduino等)进行连接和数据传输。
2. 概念
DHT11是一种集成了温湿度传感器和数字信号处理单元的复合传感器。它能够将环境中的温度和湿度信息转换为数字信号,并通过单线串行接口与外部设备进行通信。由于其具有体积小、功耗低、精度高等优点,DHT11在温湿度测量领域得到了广泛的应用。
3、补充
具体来说,DHT11传感器输出的数据格式为一个40位的数据包,其中包含16位的湿度值、16位的温度值和8位的校验和。外部设备在接收数据后,需要根据规定的协议解析数据并进行校验,以确保数据的准确性。
此外,DHT11传感器还具有卓越的长期稳定性、无需额外部件、超长的信号传输距离、超低能耗等优点,使得它在各种嵌入式项目和物联网应用中得到了广泛的应用。
DHT11的工作原理
1、DHT11 数据结构:
8bit湿度整数数据+8bit湿度小数数据
+8bit温度整数数据+8bit温度小数数据 +8bit校验和
2、DHT11的传输时序:
主机发送 低(18ms 以上)+高(20 - 40us)的信号;
DHT11 响应信号 低 + 高(40-50us)
然后DHT11开始发数据 数据的格式为低(12-14us)+高;
其中如果高电平的时间为120us左右,则代表‘1’;30us左右代表‘0’;
————————————————————-——————————————————————
IIC协议基本概念
I2C(Inter-Integrated Circuit)是一种由NXP(原PHILIPS)公司开发的串行、同步、半双工通信协议,带应答机制,支持一主多从、多主多从,用于连接微控制器、传感器、存储器和其他外设。
IIC的物理层
IIC一共有只有两个总线: 一条是双向的串SDA,一条是串SCL
SDA(Serial data)是数据线,D代表Data也就是数据,Send Data 也就是用来传输数据的
SCL(Serial clock line)是时钟线,C代表Clock 也就是时钟 也就是控制数据发送的时序的
IIC主要特点:
通常我们为了方便把IIC设备分为主设备和从设备,基本上谁控制时钟线(即控制SCL的电平高低变换)谁就是主设备。
IIC主设备功能:主要产生时钟,产生起始信号和停止信号。
IIC从设备功能:可编程的IIC地址检测,停止位检测,反向传输数据。
IIC的一个优点是它支持多主控(multimastering), 其中任何一个能够进行发送和接收的设备都可以成为主设备。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。
支持不同速率的通讯速度,标准速度(最高速度100kHZ),快速(最高400kHZ)。
SCL和SDA都需要接上拉电阻 (大小由速度和容性负载决定一般在3.3K-10K之间) 保证数据的稳定性,减少干扰。
IIC是半双工,而不是全双工 ,同一时间只可以单向通信。
为了避免总线信号的混乱,要求各设备连接到总线的输出端时必须是漏极开路(OD)输出或集电极开路(OC)输出。
IIC的高阻态:
漏极开路(Open Drain)即高阻状态,适用于输入/输出,其可独立输入/输出低电平和高阻状态,若需要产生高电平,则需使用外部上拉电阻。
高阻状态:高阻状态是三态门电路的一种状态。逻辑门的输出除有高、低电平两种状态外,还有第三种状态——高阻状态的门电路。电路分析时高阻态可做开路理解。
我们知道IIC的所有设备是接在一根总线上的,那么我们进行通信的时候往往只是几个设备进行通信,那么这时候其余的空闲设备可能会受到总线干扰,或者干扰到总线,怎么办呢?
为了避免总线信号的混乱,IIC的空闲状态只能有外部上拉, 而此时空闲设备被拉到了高阻态,也就是相当于断路, 整个IIC总线只有开启了的设备才会正常进行通信,而不会干扰到其他设备。
————————————————————-——————————————————————
IIC协议的基本内容
I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
- 开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。
- 结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。
- 应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据,这个低电平就是ACK信号。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
- 这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。
数据有效性
- IIC信号在数据传输过程中,当SCL=1高电平时,数据线SDA必须保持稳定状态,不允许有电平跳变,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
- SCL=1时 数据线SDA的任何电平变换会看做是总线的起始信号或者停止信号。不变的是数据,变化的是信号。
- 也就是在IIC传输数据的过程中,SCL时钟线会频繁的转换电平,以保证数据的传输。
应答信号
每当主机向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信号,以确认从机是否成功接收到了数据,
- 应答信号:主机SCL拉高,读取从机SDA的电平,为低电平表示产生应答。
- 应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节;
- 应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。
IIC数据传送
- 数据传送格式
- SDA线上的数据在SCL时钟“高”期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的“高”或“低”状态才可以改变。输出到SDA线上的每个字节必须是8位,数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。
- 当一个字节按数据位从高位到低位的顺序传输完后,紧接着从设备将拉低SDA线,回传给主设备一个应答位ACK, 此时才认为一个字节真正的被传输完成 ,如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到数据。
————————————————————-——————————————————————
IIC协议的工作流程
发送数据:
1、主机发送开始信号
2、发送7位从设备地址 + 0(读—0,写—1)
3、从设备回应,主机获取ACK
4、主机发送字节地址
5、从设备回应,主机获取ACK
6、主机发送一个8位的数据
7、从设备回应,主机获取ACK
8、主设备发出stop信号,协议结束
接收数据
1、主机发送开始信号
2、发送7位从设备地址 + 0(读—0,写—1)
3、从设备回应,主机获取ACK
4、主机发送字节地址
5、从设备回应,主机获取ACK
6、主机再次发送一个起始信号
7、发送7位从设备地址 + 1(读—0,写—1)
8、从设备回应,主机获取ACK
9、主机在指定地址获取一个八位数据
10、主机给从设备发送一个NACK,表示不需要回应,不会在接收数据。
11、主机发送stop信号,结束。
————————————————————-——————————————————————
SPI协议的基本概念
简介
SPI是串行外设接口(Serial Peripheral Interface)的缩写,是美国摩托罗拉公司(Motorola)最先推出的一种同步串行传输规范,也是一种单片机外设芯片串行扩展接口,是一种高速、全双工、同步通信总线,所以可以在同一时间发送和接收数据,SPI没有定义速度限制,通常能达到甚至超过10M/bps。
SPI有主、从两种模式,通常由一个主模块和一个或多个从模块组成(SPI不支持多主机),主模块选择一个从模块进行同步通信,从而完成数据的交换。提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave),SPI接口的读写操作,都是由主设备发起,当存在多个从设备时,通过各自的片选信号进行管理。
SPI接口一般使用4条线通信:
SPI通讯需要四个管脚:
SCK(serial clock串行时钟,由主控产生脉冲方波时钟);
MOSI(master output salve input,主机将数据一位一位的传输给从机的数据通道)
MISO(master input salve output,从机将数据一位一位的传输给主机的数据通道)
CS(chip select,低电平表示选择,高电平表示释放)。(并不绝对)
SPI总线可以挂载多个设备,如何区分多个设备呢?就是通过CS管脚来进行区分。每一个SPI从设备都对应有一个CS片选脚。主控和SPI从设备进行通信时,首先会将相应的从设备的片选管脚-拉低主设备只能有一个。
————————————————————-——————————————————————
SPI总线四种工作方式:
SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串 行同步时钟极性和时钟相位可以进行配置。
时钟极性(CPOL)对传输协议没有重大的影响。决定空闲状态的电平。
如果CPOL=0,串行同步时钟的空闲状态为低电平;
如果CPOL=1,串行同步时钟 的空闲状态为高电平。
时 钟 相 位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。
如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数 据被采样;
如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。
——————SPI主模块和与之通信的外设备时钟相位和极性应该一致。
根据时钟极性和时钟相位,SPI有四种工作模式
Mode0:CKP=0,CKE =0:当空闲态时,SCK处于低电平,数据采样是在第1个边沿,也就是SCK由低电平到高电平的跳变,所以数据采样是在上升沿(准备数据),(发送数据)数据发送是在下降沿。
Mode1:CKP=0,CKE=1:当空闲态时,SCK处于低电平,数据发送是在第2个边沿,也就是SCK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。
Mode2:CKP=1,CKE=0:当空闲态时,SCK处于高电平,数据采集是在第1个边沿,也就是SCK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。
Mode3:CKP=1,CKE=1:当空闲态时,SCK处于高电平,数据发送是在第2个边沿,也就是SCK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。
————————————————————-——————————————————————
通信原理
SPI主设备和从设备都有一个串行移位寄存器,主设备通过向它的SPI串行寄存器写入一个字节来发起一次传输。
SPI数据通信的流程可以分为以下几步:
1、主设备发起信号,将CS拉低,启动通信。
2、主设备通过发送时钟信号,来告诉从设备进行写数据或者读数据操作(采集时机可能是时钟信号的上升沿(从低到高)或下降沿(从高到低),主设备将立即读取数据线上的信号,这样就得到了一位数据(1bit)。
3、主机(Master)将要发送的数据写到发送数据缓存区(Menory),缓存区经过移位寄存器,串行移位寄存器通过MOSI信号线将字节一位一位的移出去传送给从机,同时MISO接口接收到的数据经过移位寄存器一位一位的移到接收缓存区。
4、从机(Slave)也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机。同时通过MOSI信号线接收主机发送的数据,这样,两个移位寄存器中的内容就被交换。
着重说明:SPI只有主模式和从模式之分,没有读和写的说法,外设的写操作和读操作是同步完成的。若只进行写操作,主机只需忽略接收到的字节(虚拟数据);反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。也就是说,你·发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。
————————————————————-——————————————————————
SPI优缺点
优点
无起始位和停止位,因此数据位可以连续传输而不会被中断;
没有像I2C这样复杂的从设备寻址系统;
数据传输速率比I2C更高(几乎快两倍);
分离的MISO和MOSI信号线,因此可以同时发送和接收数据;
极其灵活的数据传输,不限于8位,它可以是任意大小的字;
非常简单的硬件结构。从站不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)。
缺点
使用四根信号线(I2C和UART使用两根信号线);
无法确认是否已成功接收数据(I2C拥有此功能);
没有任何形式的错误检查,如UART中的奇偶校验位;
只允许一个主设备;
没有硬件从机应答信号(主机可能在不知情的情况下无处发送);
没有定义硬件级别的错误检查协议;
与RS-232和CAN总线相比,只能支持非常短的距离;
———————————————————————————————————————————
ADC接口
一、ADC定义
ADC是模数转换器(Analog-to-Digital Converter)缩写,主要用于将连续传输的模拟信号转换为数字信号,便于数字系统(如中央处理器CPU、微控制器MCU等)对传输信息进行快速处理和分析。
二、基本内容
1、分辨率:可配置12位、10位、8位、6位等分辨率;STM32的ADC通常是12位的,这意味着它可以将模拟信号转换为0到4095(即2^12-1)之间的数字值。这个数字值代表了输入模拟信号的强度或大小。12位ADC是一种逐次逼近型模拟数字转换器,它有19个通道;各通道的A\D转换可以单次、连续、扫描或者间断实现。ADC的结果可以以左对齐、右对齐、居中对齐在16位数据寄存器中。
2、通道: STM32的ADC具有多个通道,这些通道允许同时或依次转换多个模拟信号。不同型号的STM32具有不同数量的ADC通道,但通常都包括16个或更多的外部通道和几个内部通道(如温度传感器、内部参考电压等)。
三、原理
STM32的ADC采用逐次逼近型(Successive Approximation Register, SAR)转换原理。ADC的工作原理是将模拟信号分割成一系列离散的取样,并将每个取样值转换为相应的数字表示。这个过程涉及到两个主要步骤:采样和量化。
-
采样:在ADC的采样阶段,模拟信号被采样并保持一段时间,以确保在转换过程中信号保持不变。
采样方式有两种:
a):规则通道组:相当于正常的循环程序。最多16个通道。
b):注入通道组:相当于中断。最多4个通道
-
逐次逼近:在转换阶段,ADC使用一个内部数字到模拟转换器(DAC)和一个比较器来逐位确定转换结果。从最高位(MSB)开始,DAC输出一个中间值(通常是0和满量程之间的一半),然后比较器将这个值与输入模拟信号进行比较。根据比较结果,ADC决定是保留还是清除当前位,并相应地调整DAC的输出值。这个过程一直重复,直到确定了所有位(即达到了所需的分辨率)。
-
输出:转换完成后,ADC将结果存储在数据寄存器中,并可能产生中断信号以通知微控制器。
四、使用场景
- ADC在许多应用中起着重要作用,例如传感器信号采集、音频采样、数据采集和控制系统等。它使得模拟信号能够与数字系统进行交互和处理,从而实现各种测量、监测和控制任务。
———————————————————————————————————————————
ESP8266模块
8266片上集成wifi+MCU,使用的是一个M0的内核,成本很低,因为片上有wifi和MCU,所以作为网络终端非常的方便,当然,因为是wifi,所以低功耗较高。说白了,esp8266也是一个单片机,上电还是得从0地址开始跑。
开发模式:
ESP8266系列一般具有两种开发方式:AT指令开发和SDK开发。
AT指令:厂家出厂时预先在ESP8266芯片烧入好固件,封装好WiFi的协议栈,内部已经实现透传,而用户只需要使用一个USB转TTL的模块或者单片机的串口就能实现与WiFi模块的通信,发送AT指令来对WiFi模块进行控制。(和蓝牙透传模块类似)
SDK开发:由于ESP8266本身即是可编程的芯片,可以把它视为一个带有无线通信的单片机,而用户需要在专门的IDE中编写对应的程序,然后通过烧写固件的方式将程序写入到芯片中,因此,想要实现WiFi通信,需要自定义WiFi协议栈,对用户掌握的相关知识要求更高。
应用模式
ESP266支撑单AP模式、单STA模式和混合模式(可以在两种模式下切换的状态。)
AP模式下:WiFi模块产生热点,提供无线接入服务,允许其它无线设备接入,提供数据访问,一般的无线路由/网桥工作在该模式下。该模式对应TCP传输协议中的服务端(TCP Server)。
STA模式下,WiFi模块为连接到无线网络的终端(站点),可以连接到AP,一般无线网卡工作在STA模式下。该模式对应TCP传输协议中的客户端(TCP Client)。
简单来说,AP模式可以将ESP8266作为热点,让其他的设备连接上它;STA模式可以连接上当前环境下的WIFI热点。
———————————————————————————————————————————
DMA模块
DMA,全称Direct Memory Access,即直接存储器访问。
DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。
DMA定义:
DMA用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。
DMA传输方式
DMA的作用就是实现数据的直接传输,而去掉了传统数据传输需要CPU寄存器参与的环节,主要涉及四种情况的数据传输,但本质上是一样的,都是从内存的某一区域传输到内存的另一区域(外设的数据寄存器本质上就是内存的一个存储单元)。四种情况的数据传输如下:
外设到内存
内存到外设
内存到内存
外设到外设
DMA传输参数
我们知道,数据传输,首先需要的是
1 数据的源地址
2 数据传输位置的目标地址 ,
3 传递数据多少的数据传输量 ,
4 进行多少次传输的传输模式
DMA所需要的核心参数,便是这四个
STM32少个DMA资源?
对于大容量的STM32芯片有2个DMA控制器 两个DMA控制器,DMA1有7个通道,DMA2有5个通道。
每个通道都可以配置一些外设的地址。
DMA中断
每个DMA通道都可以在DMA传输过半、传输完成和传输错误时产生中断。为应用的灵活性考虑,通过设置寄存器的不同位来打开这些中断。
————————————————————————————————
DMA的传输过程
一、DMA预处理阶段
- 初始化:
- CPU首先执行几条I/O指令,用于测试外设的状态、向DMA控制器的相关寄存器设置初值、设置传送方向等。
- 这些初始化工作完成后,CPU继续执行原来的程序,而外设则准备好向DMA控制器发出DMA请求。
- 外设请求:
- 外设完成数据准备后,向DMA控制器发出DMA请求,请求进行数据传输。
二、DMA请求与响应阶段
- DMA控制器请求总线:
- DMA控制器接收到外设的DMA请求后,向CPU发出总线请求信号(如HOLD信号),请求获得总线控制权。
- CPU响应:
- CPU在执行完当前的总线周期后,会向DMA控制器发出响应请求的回答信号(如HLDA信号),并释放总线控制权。
三、数据传送阶段
- DMA控制器控制数据传输:
- DMA控制器在获得总线控制权后,会向外部设备发出DMA请求回答信号,并开始控制数据传输。
- DMA的数据传送可以以单字节(或字)为基本单位,也可以以数据块为基本单位。
- DMA控制器会从指定的源地址读取数据,并将数据写入到指定的目标地址,同时更新源地址和目标地址的指针。
- 循环与检查:
- DMA控制器会不断重复读取、写入数据的过程,并检查数据计数的值是否为零。
- 如果数据计数值不为零,则继续数据传输;如果为零,则进入DMA后处理阶段。
四、DMA后处理阶段
- 中断请求:
- 当传送长度计数器计到0时,DMA操作结束,DMA控制器通过中断请求线向CPU发出中断信号。
- 中断处理:
- CPU在接收到中断信号后,会暂停当前程序的执行,转而执行中断服务程序进行DMA结束处理工作。
- 中断服务程序可能会包括更新状态寄存器、清除中断标志、进行后续的数据处理等操作。
- 恢复执行:
- 中断处理结束后,CPU会返回到被中断的程序继续执行。此时,CPU重新获得总线控制权,并继续执行原来的程序。
五、总结
DMA的传输过程是一个高度自动化的过程,它通过减少CPU的干预来提高数据传输的效率。DMA预处理阶段完成了必要的初始化工作;DMA请求与响应阶段实现了总线控制权的转移;数据传送阶段完成了数据的实际传输;DMA后处理阶段则通过中断处理来结束DMA操作并恢复CPU的执行。整个过程中,DMA控制器扮演了关键角色,它负责控制数据传输的整个过程,从而实现了高速、高效的数据交换。
———————————————————————————————————————————
stm32的启动流程
STM32的启动流程是一个复杂但有序的过程,主要涉及到复位、初始化、配置系统时钟以及进入主函数(main函数)等步骤。以下是对STM32启动流程的详细解析:
一、复位
复位是STM32启动过程的第一步,其目的是重置STM32的所有硬件和软件状态,以便为后续的步骤做准备。复位可以通过外部设备(如按钮)或外部事件(如电源失效)来完成,也可以通过程序完成。
二、初始化
在复位之后,STM32会进行一系列的初始化操作,包括堆栈指针的初始化、中断向量表的配置以及系统时钟的配置等。
- 堆栈指针初始化:STM32在启动时会首先初始化堆栈指针(SP),这是确保后续程序能够正确执行的基础。
- 中断向量表配置:中断向量表是一个包含了中断服务程序入口地址的表格,STM32在启动时会配置这个表格,以便在发生中断时能够正确地跳转到相应的中断服务程序。
- 系统时钟配置:系统时钟是STM32运行的基础,STM32在启动时会配置系统时钟,以确保各个硬件模块能够以正确的频率运行。
三、启动和运行
在完成上述初始化操作后,STM32会开始执行启动代码,并最终跳转到用户编写的main函数,从而进入正常运行状态。
- 执行启动代码:启动代码通常包含一些必要的初始化操作,如系统时钟的进一步配置、外设的初始化等。这些操作完成后,启动代码会跳转到main函数。
- 进入main函数:在main函数中,用户可以编写自己的应用程序代码,实现所需的功能。
四、STM32的启动模式
STM32支持多种启动模式,这些模式决定了向量表的位置和程序的启动方式。常见的启动模式包括:
- 常规模式(主闪存存储器):这是最常见的启动模式,处理器会执行复位向量表中的复位地址,从而启动芯片。
- Bootloader模式(系统存储器):这是一种特殊的启动模式,通常用于更新固件或通过外部接口(如UART或USB)加载新的程序。
- 从内置SRAM启动:这个模式一般用于程序调试,因为SRAM没有程序存储的能力。
五、启动文件分析
STM32的启动过程主要由汇编代码完成,这些代码通常位于启动文件中(如startup_stm32f10x.s)。启动文件包含了堆栈的定义、中断向量表的配置以及复位处理函数的实现等关键内容。
六、总结
STM32的启动流程是一个从复位到进入main函数的过程,涉及到多个步骤和多个硬件和软件组件的协同工作。了解这个流程对于开发人员来说是非常重要的,因为它有助于他们更好地理解和控制STM32的行为,从而编写出更加高效和可靠的应用程序。