【秋招】嵌入式面试八股文 - ARM 零散内容
本文为 第二章 ARM 部分,具体整篇目录可以看前言!
第一部分(纯八股)
1 DMA存储
- DMA主要是用来搬运数据,但是不经过CPU,数据直接从外设到存储器,或者从存储器到存储器,存储器可以是SRAM或者FLASH。
- DMA包含DMA1(7通道)和DMA2(5通道)。每个通道可以接收多个外设请求,但是同一时间只能接收一个,不能同时接收多个。
1.1 仲裁器
- 多个DMA通道请求,由仲裁器管理。分两个阶段,先软件阶段:根据优先级设置(4个优先级)判断,如果两个通道优先级一样,则进入硬件阶段,根据通道号决定谁优先级高,通道0高于通道1。
1.2 从哪来到哪里去
(1)外设到存储器
- 以ADC采集为例,DMA外设寄存器的地址对应的就是ADC数据寄存器的地址,DMA存储器的地址就是我们自定义的变量(用来接收存储AD采集的数据)的地址。方向我们设置外设为源地址。
(2)存储器到外设
- 与(1)设置方式类似,只是更改发送端和接收端
(3)存储器到存储器
- 与(1)设置方式类似,只是更改发送端和接收端
1.3 DMA结构体
- 第一个参数:DMA_PeripheralBaseAddr 用来设置 DMA 传输的外设基地址,比如要进行串口 DMA 传输,那么外设基地址为串口接受发送数据存储器 USART1->DR 的地址,表示方法为 &USART1->DR。
- 第二个参数:DMA_MemoryBaseAddr为内存基地址,也就是我们存放DMA传输数据的内存地址。
- 第三个参数:DMA_DIR 设置数据传输方向,决定是从外设读取数据到内存还送从内存读取数据发送到外设,也就是外设是源地还是目的地,这里我们设置为从内存读取数据发送到串口,所以外设自然就是目的地了,所以选择值为 DMA_DIR_PeripheralDST。
- 第四个参数:DMA_BufferSize 设置一次传输数据量的大小,这个很容易理解。
- 第五个参数:DMA_PeripheralInc 设置传输数据的时候外设地址是不变还是递增。如果设置 为递增,那么下一次传输的时候地址加1,这里因为我们是一直往固定外设地址&USART1->DR发送数据,所以地址不递增,值为DMA_PeripheralInc_Disable。
- 第六个参数:DMA_MemoryInc 设置传输数据时候内存地址是否递增。这个参数和 DMA_PeripheralInc意思接近,只不过针对的是内存。这里我们的场景是将内存中连续存储单元的数据发送到串口,毫无疑问内存地址是需要递增的,所以值为 DMA_MemoryInc_Enable。
- 第七个参数:DMA_PeripheralDataSize 用来设置外设的数据长度是为字节传输(8bits),半 字传输(16bits)还是字传输(32bits),这里我们是8位字节传输,所以值设置为DMA_PeripheralDataSize_Byte。
- 第八个参数: DMA_MemoryDataSize是用来设置内存的数据长度,和第七个参数意思接近,这里我们同样设置为字节传输 DMA_MemoryDataSize_Byte。
2 SysTick部分总结
2.1 SysTick异常优先级和片上外设中断优先级谁的优先级更高?
- 在 STM32 中,SysTick(系统滴答定时器)异常优先级和片上外设中断优先级是两个不同的概念,它们的优先级高低取决于具体的配置,SysTick 异常的优先级可配置,片上外设中断优先级也可配置,二者的优先级谁高谁低由用户的配置决定
2.2 SysTick 定时器及其中断优先级
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
【秋招】嵌入式八股文最全总结 文章被收录于专栏
双非本,211硕。本硕均为机械工程,自学嵌入式,在校招过程中拿到小米、格力、美的、比亚迪、海信、海康、大华、江波龙等offer。八股文本质是需要大家理解,因此里面的内容一定要详细、深刻!这个专栏是我个人的学习笔记总结,是对很多面试问题进行的知识点分析,专栏保证高质量,让大家可以高效率理解与吸收里面的知识点!掌握这里面的知识,面试绝对无障碍!