嵌入式面试高频——stm32知识点

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位的,可用于存储数据、传递参数、保存返回值等。通用寄存器可以进一步细分为以下几类:

  1. 未分组寄存器(R0~R7)
    • 这些寄存器在所有处理器模式下都访问同一个物理寄存器。
    • 它们是真正的通用寄存器,没有体系结构所隐含的特殊用途。
  2. 分组寄存器(R8~R12, R13, R14)
    • 这些寄存器所访问的物理寄存器取决于当前的处理器模式。
    • R8~R12各有两组物理寄存器:一组用于FIQ(快速中断)模式,另一组用于除FIQ以外的所有模式。
    • R13和R14各有6个分组的物理寄存器,其中一个用于用户模式和系统模式,其他5个分别用于5种异常模式。
    • R13常用作堆栈指针(Stack Pointer, SP),但用户也可使用其他寄存器作为堆栈指针。
    • R14用作子程序链接寄存器(Link Register, LR),用于保存子程序调用的返回地址。
  3. 程序计数器(R15, PC)
    • 用于存储当前正在执行的指令的地址。
    • 在ARM状态下,位[1:0]为0,位[31:2]用于保存PC。
    • 在Thumb状态下,位[0]为0,位[31:1]用于保存PC。

二、状态寄存器(Program Status Registers, PSRs)

状态寄存器用于存储当前程序的状态信息,包括条件码标志、中断使能、执行模式等。ARM处理器中主要有两个重要的状态寄存器:

  1. 当前程序状态寄存器(CPSR)
    • 这是一个32位的特殊寄存器,包含程序状态字(PSW)的各个标志位。
    • 它的内容包括条件码(如N、Z、C、V,分别代表负数、零、进位、溢出)、中断禁止位(I、F,分别控制IRQ和FIQ中断的禁止)、工作状态位(T,指示处理器当前是运行在ARM状态还是Thumb状态)、以及模式位(M[4:0],决定处理器的运行模式)。
  2. 备份的程序状态寄存器(SPSR)
    • 当异常发生时,SPSR用于保存CPSR的当前值,以便在异常处理结束后恢复原有状态。
    • 每种异常模式都有一个对应的SPSR。

三、其他寄存器

除了上述两类主要寄存器外,ARM架构还包含了一些其他类型的寄存器,如控制寄存器、特定用途寄存器、SIMD和浮点寄存器、系统寄存器等。这些寄存器在ARM处理器的不同版本和扩展中可能有所不同,用于实现特定的功能,如内存管理、调试、系统配置、浮点运算和SIMD操作等。

总线的定义与作用

定义
总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,由导线组成的传输线束。在计算机系统中,总线用于连接CPU、内存、外设等部件,实现它们之间的数据、地址和控制信号的传输。

作用

  1. 数据传输:作为数据传输的通道,实现CPU与内存、外设之间的数据交换。
  2. 地址传输:用于指定数据存储或外设控制的地址。
  3. 控制信号传输:将CPU的控制信号传输到外设,实现对外设的控制

时钟树与总线之间的关系

  1. 时钟信号提供者:时钟树是总线时钟信号的提供者。它为总线(如AHB总线、APB总线等)提供适当的时钟频率,确保总线上的数据传输、地址传输和控制信号传输能够按照预定的时序进行。
  2. 性能与同步的保障:时钟树通过提供稳定的时钟信号,保障总线上的数据传输和通信的同步性和可靠性。同时,时钟树中的时钟分频和同步机制,有助于优化系统的整体性能和功耗。
  3. 协同工作:时钟树和总线在微控制器系统中协同工作,共同实现系统的各项功能。时钟树为总线提供时钟信号,而总线则利用这些时钟信号实现各个部件之间的数据交换和控制信号的传输。

时钟树分析

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口的应用场景

GPIO口在嵌入式系统中的应用场景非常广泛,主要包括以下几个方面:

  1. 控制外部设备
    • LED灯控制:通过GPIO口输出高低电平,可以控制LED灯的亮灭,实现简单的灯光控制功能。
    • 继电器控制:继电器是一种通过小电流控制大电流的设备,通过GPIO口控制继电器的开闭,可以实现对大电流设备的控制,如电机、加热器等。
    • 电机控制:对于小型直流电机,可以通过GPIO口输出PWM(脉冲宽度调制)信号来控制电机的转速和方向。
  2. 读取外部设备状态
    • 按键输入:通过GPIO口读取按键的状态(按下或未按下),实现人机交互功能。
    • 传感器数据读取:连接各种传感器(如温度传感器、湿度传感器、光敏传感器等),通过GPIO口读取传感器输出的模拟或数字信号,获取外部环境的数据。
  3. 通信接口
    • 虽然GPIO口主要用于输入输出功能,但某些GPIO引脚还可以配置为特定的通信接口模式,如I2C、SPI、UART等,实现与外部设备的串行通信。
  4. 中断功能
    • 将GPIO口配置为中断模式,可以在外部事件(如按键按下、传感器触发等)发生时产生中断请求,使CPU能够实时响应并处理这些事件。

中断

概念:中断是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);
}

请解释一下嵌入式系统中的软中断和硬中断的区别

在嵌入式系统中,软中断和硬中断是两种不同类型的中断机制,它们在触发方式、处理过程、优先级管理等方面存在显著差异。以下是对这两种中断机制的详细解释和区别:

一、定义与触发方式

  1. 硬中断(Hardware Interrupt)
    • 定义:硬中断是由外部硬件设备触发的中断,如定时器、串口、外部按键、磁盘、网卡等。
    • 触发方式:当硬件设备需要CPU的注意或处理时,会向CPU发送中断信号,CPU在接收到信号后会暂停当前正在执行的程序,转而去处理中断服务程序(ISR)。
  2. 软中断(Software Interrupt)
    • 定义:软中断是由软件指令触发的中断,通常用于操作系统内部的任务调度或I/O请求处理。
    • 触发方式:软中断是由当前正在运行的程序或操作系统本身通过执行特定的中断指令来触发的,不需要外部硬件设备的参与。

二、处理过程与特性

  1. 处理过程
    • 硬中断:处理过程包括中断信号的接收、中断服务程序的执行以及中断返回。在硬中断处理过程中,CPU会保存当前程序的执行状态(如程序计数器、寄存器等),然后跳转到中断服务程序执行相应的处理,处理完毕后恢复之前的状态并继续执行原程序。
    • 软中断:软中断的处理过程与硬中断类似,但触发方式不同。软中断主要用于操作系统内部的任务调度和I/O请求处理,其处理过程也涉及到状态的保存与恢复,但更多地是依赖于操作系统的调度策略。
  2. 特性差异
    • 触发时机:硬中断的触发时机是随机的,由外部硬件设备的状态决定;而软中断的触发时机则是由程序控制的,具有确定性。
    • 可屏蔽性:硬中断通常是可屏蔽的,即可以通过设置中断屏蔽位来阻止某些中断的响应;而软中断则不可屏蔽,因为它们是由程序主动触发的。
    • 优先级在嵌入式系统中,中断控制器通常支持中断优先级管理,高优先级的中断可以打断低优先级的中断服务程序。虽然软中断本身没有直接的优先级概念,但它们在操作系统内部的调度策略中可能会受到优先级的影响。

三、应用场景与实例

  • 硬中断:适用于需要实时响应的外部事件处理,如键盘输入、网络通信等。
  • 软中断:主要用于操作系统内部的任务调度和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中断。以下是一般的初始化步骤:

  1. 选择时钟源:通过SysTick控制和状态寄存器(SysTick CTRL)中的CLKSOURCE位来控制。
  2. 设置重载值:根据定时器所需的时间间隔和系统时钟频率,计算并设置SysTick的重载值。

5. 注意事项

  • 时钟频率:SysTick定时器的精度和计时范围取决于所选的时钟源和重载值。
  • 中断优先级:SysTick的中断优先级是固定的,开发者在编写中断服务例程时需要注意这一点。
  • 调试期间的暂停:当处理器在调试期间被暂停、睡眠状态时,SysTick定时器也会暂停运作。

综上所述,SysTick是Cortex-M系列微控制器中非常实用的功能,对于需要精确时间管理或操作系统支持的应用来说尤其重要。通过合理配置和使用SysTick定时器,开发者可以实现高效的任务调度和时间管理。

RS232的概述和特点

概述:"RS-232-c“(硬件接口)是一种广泛使用的串行通信接口标准。'RS'是“推荐标准”的缩写,232为标识号,‘c’表示修改次数。

        “RS232”是个人计算机的通讯接口之一,由EAI指定的异步传输标准接口。

RS232的特点:

  1. 接口标准
    • RS-232接口定义了多种连接器类型,包括DB-25、DB-15和DB-9等,其中DB-9是最常用的规格。
    • DB-9连接器包含了9个引脚,常用的引脚包括接收数据(RXD)、发送数据(TXD)和地线(GND)等。
  2. 电气特性
    • RS-232采用负逻辑传送方式,逻辑“1”的电平为-5V-15V,逻辑“0”的电平为+5V+15V。这种电气标准旨在提高抗干扰能力,增大通信距离。
    • RS-232的接口电平值较高,容易损坏接口电路的芯片,且与TTL电平不兼容,因此通常需要使用电平转换电路才能与TTL电路连接。
  3. 传输方式
    • RS-232支持全双工和半双工两种传输方式,但在实际应用中,通常使用全双工方式以实现数据的双向传输。
    • 它采用串行传送方式,将微机的TTL电平转换为RS-232C电平,传送距离一般可达30米。若采用光电隔离20mA的电流环进行传送,其传送距离可以达到1000米。
  4. 传输速率
    • 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,但在实际应用中,由于接口特性和电气特性的限制,传输速率可能会受到一定影响。
  5. 传输距离
    • RS-232接口的直接传输距离有限,最大传输距离标准值为50英尺(约15米)。在实际应用中,若需要更长的传输距离,通常需要添加调制解调器(Modem)等设备进行中继。
  6. 抗干扰能力
    • RS-232接口采用单端通讯方式,其发送电平与接收电平的差只有2~3V,共模抑制能力较差,容易受到共地噪声和外部干扰的影响。因此,在传输距离较长或环境干扰较大的情况下,可能需要采取额外的抗干扰措施。
  7. 应用领域
    • RS-232接口被广泛应用于计算机、通信设备、工业自动化等领域。在计算机领域中,它常被用于连接鼠标、键盘、打印机等外部设备;在通信设备领域中,它则被用于连接Modem、路由器等设备;在工业自动化领域中,它也被用于连接传感器、执行器等设备。

通信背景知识(并行,串行;同步,异步;单工,双工等)

处理器与外部设备的通信,按照数据的传输方式有2种: 串行通信与并行通信:

并行通信。

传输原理:数据各个位同时传输。

-优点:速度快。

-缺点:占用引脚资源多。

串行通信。

传输原理:数据按位顺序传输。

-优点:占用引脚资源少。

-缺点:速度相对较慢,不能远距离传输。

处理器与外部设备的通信,按照数据的传输方向有3种:单工,半双工,全双工。

单工: 数据传输只支持数据在一个方向上传输。

半双工: 允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;

全双工: 允许数据同时在两个方向上传输,因此,全双工通信是两个 单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。

同步与异步

在通信协议的时序总线上传送的每一位数据,数据总线上都有一个时钟脉冲相对应,这叫做同步控制。

UART(通用异步收发传输器)

UART有几根主线?有什么作用,有不用接的线吗

总线数量

  • 标准数量:UART通信通常使用三根线进行数据传输,分别是TX(发送)、RX(接收)和GND(地线)。但在某些情况下,如使用RS-232接口时,可能会包含更多的信号线,但基本的UART通信只需要这三根线。

每根线的作用

  1. TX(发送数据线):用于从发送设备(如微控制器)向接收设备(如计算机或其他微控制器)发送数据。
  2. RX(接收数据线):用于从接收设备向发送设备发送数据,实际上是接收发送设备发送过来的数据。
  3. GND(地线):提供电路公共的参考点,确保所有信号的电平都有一个统一的基准。

可能不用接的线

  • 在标准的UART通信中,通常没有“不用接的线”,因为TX、RX和GND都是必需的。然而,在特定的应用场景或硬件设计中,如果某些功能不被使用或已经通过其他方式实现(如通过软件模拟、使用内部信号等),那么对应的硬件线路可能会被省略或空置。
  • 需要注意的是,省略或空置线路应该基于充分的理解和考虑,以避免对通信过程造成不良影响
  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值