目录
1、嵌入式系统的核心部分主要由硬件和软件两部分组成:
2、嵌入式系统硬件:
3、嵌入式处理器从体系上分类,可以分为冯·诺依曼结构和哈佛结构两种:
4、几类常见的嵌入式处理器类型:
5、MCU组成结构:
7、DSP组成结构:
8、SoC组成结构:
9、MPU组成结构:
10、嵌入式系统的开发流程概要:
11、面向硬件的开发模式:
12、面向软件的开发模式:
13、嵌入式应用软件开发过程:
14、ARM处理器的特点:
15、ARM Cortex-M3结构:
16、特权级别和操作模式:
17、特权分级和操作模式间的切换:
18、Cortex-M3存储器系统功能特性:
19、Cortex-M3存储器映射:
20、位带操作:
21、端模式:
22、中断和异常:
23、低功耗模式:
24、ARM Cortex-M3 指令集:
25、STM32系列微控制器简介:
26、STM32F1命名规则:
27、总线结构:
28、存储空间组织:
29、STM32启动配置:
30、STM的复位模式:
31、STM32的系统时钟:
32、STM32时钟树配置流程:
33、STM32时钟树配置函数:
34、STM32电源:
35、STM电源管理工作模式:
36、微控制器最小系统:
37、基于CMSIS标准的应用软件基本架构:
38、CMSIS 标准软件架构:
39、STM32F10x标准外设库体系结构:
40、STM32F10x标准外设库外设名称缩写定义:
41、GPIO的基本概念:
42、STM32F10x微控制器的GPIO:
43、GPIO的工作模式:
44、STM32 GPIO配置操作:
45、STM32 GPIO位带操作:
46、常用的 GPIO 操作库函数:
47、使用标准外设库函数操作GPIO的一般步骤:
48、STM32F10x 微控制器的 GPIO 提供三种输出速度选项,以便在不同应用场景中调整性能和功耗:
49、中断的基本概念:
50、STM32的嵌套向量中断控制器NVIC:
51、STM32中断优先级判别实例:
52、STM32 NVIC配置常用库函数:
53、STM32的外部中断/事件控制器EXTI:
54、STM32 EXTI常用库函数:
55、STM32的定时器类型、数量与用途:
56、SysTick定时器相关库函数:
57、SysTick定时器的定时时间计算:
58、看门狗的概念与作用:
STM32独立看门狗IWDG:
STM32窗口看门狗WWDG:
两种看门狗区别:
59、STM32 通用定时器:
60、DMA的基本概念:
61、DMA优缺点与应用 :
61、STM32 DMA控制器主要特性:
62、STM32 DMA寄存器:
DMA_CPARx:
DMA_CMARx:
DMA_CNDTRx:
63、STM32 DMA 通道优先级:
64、DMA要点&易错点归纳&例题:
65、串行通信的基本概念:
1、同步通信
2、异步通信
3、单工通信
4、半双工通信
5、全双工通信
6、异步串行通信的波特率
66、异步串行通信相关标准:
1、异步串行通信的帧结构
2、串行通信中的校验与纠错方式
67、USART分数波特率的产生:
68、USART数据帧格式:
69、USART的状态标志和中断:
70、USART配置:
71、SPI总线概述:
72、SPI接口信号:
73、SPI通信互连方式 :
74、SPI工作模式(传输时序):
75、SPI数据传输速率和数据格式:
76、SPI易错点:
77、I2C总线概述:
78、I2C接口信号:
79、I2C总线主要特点:
80、I2C与SPI的简单比较 :
81、I2C易错点:
82、1-Wire单总线概述:
83、1-Wire单总线典型通信流程:
84、利用GPIO模拟1-Wire总线注意点:
85、STM32 FSMC接口概述:
86、STM32 FSMC地址映射:
87、FSMC公用信号:
88、FSMC易错点:
89、模拟数字转换器ADC:
90、模拟数字转换器DAC:
91、CAN总线概述 :
92、STM32 bxCAN:
1、嵌入式系统的核心部分主要由硬件和软件两部分组成:
2、嵌入式系统硬件:
3、嵌入式处理器从体系上分类,可以分为冯·诺依曼结构和哈佛结构两种:
4、几类常见的嵌入式处理器类型:
嵌入式微处理器 | MPU |
嵌入式微控制器 | MCU |
嵌入式数字信号处理器 | DSP |
嵌入式片上系统 | SoC |
5、MCU组成结构:
7、DSP组成结构:
8、SoC组成结构:
9、MPU组成结构:
10、嵌入式系统的开发流程概要:
11、面向硬件的开发模式:
12、面向软件的开发模式:
13、嵌入式应用软件开发过程:
14、ARM处理器的特点:
15、ARM Cortex-M3结构:
16、特权级别和操作模式:
17、特权分级和操作模式间的切换:
18、Cortex-M3存储器系统功能特性:
19、Cortex-M3存储器映射:
20、位带操作:
21、端模式:
22、中断和异常:
23、低功耗模式:
24、ARM Cortex-M3 指令集:
25、STM32系列微控制器简介:
26、STM32F1命名规则:
27、总线结构:
28、存储空间组织:
29、STM32启动配置:
30、STM的复位模式:
31、STM32的系统时钟:
32、STM32时钟树配置流程:
33、STM32时钟树配置函数:
RCC_AHBPeriphClockCmd(u32 RCC_AHBPeriph,FunctionalState NewState);//使能或者失能AHB外设时钟RCC_APB2PeriphClockCmd(u32 RCC_APB2Periph,FunctionalState NewState); //使能或者失能APB2外设时钟RCC_APB1PeriphClockCmd(u32 RCC_APB1Periph, FunctionalState NewState); //使能或者失能APB1外设时钟
34、STM32电源:
35、STM电源管理工作模式:
36、微控制器最小系统:
37、基于CMSIS标准的应用软件基本架构:
38、CMSIS 标准软件架构:
39、STM32F10x标准外设库体系结构:
40、STM32F10x标准外设库外设名称缩写定义:
41、GPIO的基本概念:
42、STM32F10x微控制器的GPIO:
注意:在STM32上,除特殊功能的管脚外,其他所有的管脚都可以作为GPIO使用。
43、GPIO的工作模式:
口诀:浮空上下模拟入,开推输出赢天下。 开推复用功能多,I2C、USART、SPI便捷多。
44、STM32 GPIO配置操作:
45、STM32 GPIO位带操作:
46、常用的 GPIO 操作库函数:
1、初始化和配置 GPIO:
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
2、读取 GPIO 引脚输入状态:
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
3、读取 GPIO 输出数据寄存器:
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
4、设置 GPIO 输出引脚的状态:
void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
47、使用标准外设库函数操作GPIO的一般步骤:
示例:
GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO初始化结构体变量
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能PORTA时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //KEY0对应的引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA2
48、STM32F10x 微控制器的 GPIO 提供三种输出速度选项,以便在不同应用场景中调整性能和功耗:
- 2 MHz:低速输出
- 10 MHz:中速输出
- 50 MHz:高速输出
49、中断的基本概念:
50、STM32的嵌套向量中断控制器NVIC:
51、STM32中断优先级判别实例:
52、STM32 NVIC配置常用库函数:
注意:整个系统执行过程中,只设置一次中断分组。
53、STM32的外部中断/事件控制器EXTI:
其特性:1、 每个 IO 都可以作为外部中断输入;2、 每个中断 / 事件都可以独立地配置其触发事件(上升沿、下降沿或双边沿),并能够单独地被屏蔽;3、 每个中断线都有专用的状态位(挂起请求寄存器),保持着其中断请求;4、 支持多达 20 个软件的中断 / 事件请求;5、 可以将多达 112 个通用 I/O 引脚映射到 16 个外部中断/事件输入线上;6、 可检测脉冲宽度小于 APB2 时钟宽度的外部信号。
54、STM32 EXTI常用库函数:
55、STM32的定时器类型、数量与用途:
1、高级定时器:包括 2 个 16 位定时器(TIM1、TIM8),支持上/下/上下计数,用于三相 PWM 发生器(电机控制场景)。
2、通用定时器:包括 3~10 个 16 位定时器(TIM2~TIM5,TIM9~TIM14),支持上/下/上下计数,用于输入捕获、输出比较、PWM 和脉冲计数。
3、基本定时器:包括 2 个 16 位向上计数器(TIM6、TIM7),用于产生 DAC 触发信号。
4、看门狗定时器:包括一个 12 位独立看门狗(IWDG)和一个 7 位窗口看门狗(WWDG)。
5、系统时基定时器:一个 24 位 SysTick 定时器,用于产生微秒和毫秒级延时。
6、实时时钟:一个 32 位可编程 RTC 定时器,用于提供实时时钟和日历功能。
56、SysTick定时器相关库函数:
1、初始化SysTick定时器:
void SysTick_Config(uint32_t ticks);
此函数用于初始化SysTick定时器,参数ticks是定时器递减的初始值。在定时器溢出后,会自动重载此值并产生一个系统滴答时钟(System Tick)中断。
注意:ticks的最大值不能超过0x00FFFFFF。
2、获取当前SysTick值:
uint32_t SysTick_GetCurrentValue(void);
3、在使用SysTick定时器时,通常需要实现延时功能。以下是一个使用SysTick定时器实现的毫秒级延时函数示例:
void SysTick_DelayMs(uint32_t ms)
{uint32_t ticks = ms * (SystemCoreClock / 1000);uint32_t start_tick = SysTick->VAL;for (;;){uint32_t elapsed_ticks = (start_tick - SysTick->VAL) & 0x00FFFFFF;if (elapsed_ticks >= ticks){break;}}
}
此函数接受一个ms参数,表示需要延时的毫秒数。它首先将毫秒数转换为SysTick计数器的滴答数(ticks),然后等待指定的滴答数。
57、SysTick定时器的定时时间计算:
以例题2说明做题关键:
- 时钟源:需要知道 Systick 时钟源,本例中为 HCLK,即 72 MHz。
- 计数器最大值:Systick 定时器是 24 位递减计数器,所以最大值为 2^24 - 1。
- SysTick_Config() 函数:该函数用于配置 Systick 定时器,传入的参数为定时器每次溢出所需的计数。
- 溢出时间计算:T = ticks / 时钟频率,其中 T 为溢出时间,ticks 为每次溢出所需的计数。
58、看门狗的概念与作用:
STM32独立看门狗IWDG:
STM32窗口看门狗WWDG:
两种看门狗区别:
-
时钟源:
- IWDG:独立看门狗使用独立的低速内部时钟(LSI)作为时钟源,其频率通常为 40 kHz。
- WWDG:窗口看门狗使用系统时钟(PCLK1)作为时钟源。
-
计数器位数:
- IWDG:独立看门狗具有一个 12 位向下计数器。
- WWDG:窗口看门狗具有一个 7 位向下计数器。
-
工作模式:
- IWDG:独立看门狗在计数器减至 0 时触发系统复位。要避免复位,需要在计数器溢出前通过软件“喂狗”(更新计数器值)。
- WWDG:窗口看门狗在计数器减至窗口值(预设范围)内时,软件需要“喂狗”(更新计数器值)。如果在窗口值之外更新计数器或者计数器减至 0,系统将触发复位。这样设计可以检测软件运行过快或过慢的异常情况。
-
可靠性:
- IWDG:由于使用独立的 LSI 时钟,即使主时钟出现问题,IWDG 也能正常工作。因此,IWDG 相对更可靠。
- WWDG:使用系统时钟作为时钟源,如果系统时钟出现问题,WWDG 的可靠性可能会受影响。
59、STM32 通用定时器:
-
要点:
a. 时钟源选择:确保选择适当的时钟源,并了解其对定时器时钟频率的影响。b. 时基单元配置:设置预分频器、计数器和自动重装载寄存器以生成所需的定时周期。 c. 输入捕获配置:为捕获外部信号设置合适的触发条件(上升沿、下降沿)。 d. 输出比较配置:设置输出比较寄存器的值并选择合适的输出模式(如 PWM)。
-
计算例题:
例题1:假设 STM32 系统时钟为 72MHz,通用定时器 TIM3 使用内部时钟源。配置 TIM3 产生 1kHz 的 PWM 信号。
解:首先计算预分频器(PSC)和自动重装载寄存器(ARR)的值。假设 PWM 的分辨率为 1000,那么:
- ARR = 1000 - 1 = 999
- TIM3 时钟频率 = 72MHz
- PWM 频率 = TIM3 时钟频率 / ((PSC + 1) * (ARR + 1))
- 1kHz = 72MHz / ((PSC + 1) * (ARR + 1))
- (PSC + 1) = 72MHz / (1kHz * (ARR + 1))
- PSC = 72MHz / (1kHz * (ARR + 1)) - 1 = 72MHz / (1kHz * 1000) - 1 = 71
配置 TIM3 的 PSC 为 71,ARR 为 999,即可产生 1kHz 的 PWM 信号。
例题2:使用通用定时器 TIM2 的输入捕获功能测量外部信号的周期。输入信号频率为 5kHz,STM32 系统时钟为 72MHz。
解:计算预分频器(PSC)的值。要测量 5kHz 信号,TIM2 的时钟频率应足够高,这里假设为 1MHz。
- TIM2 时钟频率 = 72MHz
- 目标时钟频率 = 1MHz
- PSC = (TIM2 时钟频率 / 目标时钟频率) - 1 = (72MHz / 1MHz) - 1 = 71
配置 TIM2 的 PSC 为 71,使用输入捕获功能测量外部信号周期。计算测量得到的计数值与实际周期的关系:周期 = 计数值 / (1MHz)。
60、DMA的基本概念:
61、DMA优缺点与应用 :
◼ 缺点
◼ 应用
61、STM32 DMA控制器主要特性:
DMA 可实现数据传输(存储器与存储器、外设与存储器等)。支持闪存、SRAM、外设的 SRAM 以及 APB1、APB2 和 AHB 外设作为源和目标。共有 12 个通道(DMA1 有 7 个,DMA2 有 5 个)。每个通道连接专用硬件 DMA 请求并支持软件触发。通道优先级可设定(很高、高、中等、低),相等时由硬件决定。
注意:可编程的数据传输数目最大为65535。
62、STM32 DMA寄存器:
DMA_CPARx:
DMA 通道 x 的外设地址寄存器。用于存储 STM32 外设数据寄存器的基地址,作为数据传输的源或目标。
DMA_CMARx:
DMA 通道 x 的存储器地址寄存器。用于存储 STM32 存储器地址,作为数据传输的源或目标。
DMA_CNDTRx:
DMA 通道 x 的传输数量寄存器。用于控制每次 DMA 传输的数据数量,其范围为 0~65535。该寄存器的值会随着传输的进行而减少,当值为 0 时,表示此次数据传输已结束。
上述寄存器用于配置和控制 DMA 通道的数据传输。DMA 通道可以实现不同外设和存储器之间的高速数据传输,而无需 CPU 的干预,从而提高系统的性能。在 STM32 中,DMA1 有 7 个通道(x = 1...7),而 DMA2 有 5 个通道(x = 1...5)。
63、STM32 DMA 通道优先级:
64、DMA要点&易错点归纳&例题:
-
DMA 传输数据宽度:数据传输宽度指的是 DMA 一次传输的数据位宽。在 STM32 中,DMA 支持字节 (8 位)、半字 (16 位) 和字 (32 位) 三种数据宽度。选择正确的数据宽度是很重要的,否则可能导致数据错误或丢失。
-
DMA 通道配置过程及关键参数:配置 DMA 通道主要涉及以下步骤和参数:
- 选择合适的 DMA 控制器和通道。
- 配置 DMA 通道的数据传输方向 (从外设到存储器或从存储器到外设)。
- 设置数据传输宽度 (字节、半字或字)。
- 配置源和目标地址递增模式 (如果需要在多个地址之间传输数据)。
- 设置循环模式 (如果需要持续传输数据)。
- 配置优先级 (如果有多个 DMA 通道在同时工作)。
- 设置 DMA 触发源 (外设事件或软件触发)。
-
DMA 触发通道:DMA 传输可以由外设事件 (如串口接收完成) 或软件触发。配置正确的触发源是保证 DMA 传输正确执行的关键。
-
DMA 通道中断请求:DMA 传输完成或发生错误时,可以产生中断请求。通过使能相应的中断并编写相应的中断处理程序,可以实现对 DMA 传输的监控和控制。
-
DMA 通道错误管理:DMA 在传输过程中可能出现错误,例如数据溢出、传输宽度不匹配等。为了确保系统的稳定运行,应该检查并处理这些错误,通常是通过监测 DMA 的状态寄存器并采取相应的措施 (如清除错误标志、停止传输等)。注意,在配置DMA通道前,需使能DMA时钟。
1、假设我们使用一个 DMA 通道以 8 位数据宽度将一个外设的数据传输到存储器。当 DMA 传输完成时,发现存储器中有 1000 个数据。请问 DMA 传输了多少字节的数据?
答:由于数据宽度为 8 位 (1 字节),DMA 传输了 1000 × 1 = 1000 字节的数据。
2、假设我们使用一个 DMA 通道以 32 位数据宽度从存储器传输数据到外设。我们需要传输 5000 字节的数据。请问需要配置 DMA 传输的数据数量是多少?
答:由于数据宽度为 32 位 (4 字节),所以需要传输的数据数量为 5000 / 4 = 1250。
3、假设我们使用一个 DMA 通道以 16 位数据宽度将一个存储器的数据传输到另一个存储器。传输过程中,DMA 控制器的源地址从 0x2000_0000 递增到 0x2000_012C。请问 DMA 传输了多少字节的数据?
答:源地址递增量为 0x2000_012C - 0x2000_0000 = 0x12C。由于数据宽度为 16 位 (2 字节),所以 DMA 传输了 0x12C × 2 = 0x258 字节的数据。
65、串行通信的基本概念:
1、同步通信
2、异步通信
3、单工通信
4、半双工通信
5、全双工通信
6、异步串行通信的波特率
66、异步串行通信相关标准:
1、异步串行通信的帧结构
2、串行通信中的校验与纠错方式
67、USART分数波特率的产生:
68、USART数据帧格式:
69、USART的状态标志和中断:
70、USART配置:
71、SPI总线概述:
72、SPI接口信号:
73、SPI通信互连方式 :
74、SPI工作模式(传输时序):
75、SPI数据传输速率和数据格式:
模式1、3均是:数据格式为8位数据帧,低位(LSB)在前,高位(MSB)在后;
模式2、4则是:数据格式为8位数据帧,高位(MSB)在前,低位(LSB)在后。
76、SPI易错点:
77、I2C总线概述:
78、I2C接口信号:
79、I2C总线主要特点:
80、I2C与SPI的简单比较 :
81、I2C易错点:
82、1-Wire单总线概述:
83、1-Wire单总线典型通信流程:
84、利用GPIO模拟1-Wire总线注意点:
85、STM32 FSMC接口概述:
86、STM32 FSMC地址映射:
87、FSMC公用信号:
88、FSMC易错点:
89、模拟数字转换器ADC:
3、
4、
5、
6、
90、模拟数字转换器DAC:
1、
2、DAC引脚:
3、
4、
5、