嵌入式

名词解释
- Sco:片上芯片;System on Chip
- RTOS:嵌入式实时操作系统;Real-Time Operating System
- MCU:嵌入式微控制器/单片机;Microcontroller Unit
- MIPS:无内部互锁流水级的微处理器;Microprocessor without Interlocked Pipeline Stages
- RAM:随机存取存储器;Random Access Memory
- SRAM;静态随机存储器;Static Random Access Memory
- DRAM:动态随机存取存储器;Dynamic Random Access Memory
- SDRAM:同步动态随机存储器;Synchronous Dynamic Random Access Memory
- ROM:只读存储器;Read-Only Memory
- EEPROM:电可擦除可编程只读存储器;Electrically Erasable Programmable Read-Only Memory
- Flash:闪存存储器;Flash Memory
- GPIO:通用输入输出接口;General Purpose Input/Output
- USART:通用同步异步收发器;universal asynchronous receiver and transmitter
- Ethernet:以太网接口;
- I2C:集成电路总线接口;Inter-Integrated Circuit
- SPI:串行外围设备接口;Serial Peripheral Interface
- NVIC:嵌套向量中断控制器;Nested Vectored Interrupt Controller
- MPU:有内存保护单元/存储器保护单元;Memory Protection Unit
- MMU:有内存管理单元;Memory Management Unit
- WIC:唤醒中断控制器;Wake-up Interrupt Controller
- TCM:紧耦合接口;Tightly Coupled Memory
- RISC:精简指令集;Reduced Instruction Set Computing
- CISC:复杂指令集;Complex Instruction Set Computing
- MSP:主堆栈指针;(永远使堆栈末尾地址加1);Main Stack Pointer
- PSP:进程堆栈指针;Process Stack Pointer
- xPSR:程序状态寄存器(三合一);Program Status Register
- ISR:中断服务程序;Interrupt Service Routine
- DMA:直接内存读取;Direct Memory Access
- PLL:锁相环;Phase-Locked Loop
- PWM:脉冲宽度调制;Pulse Width Modulation
- ADC :模数转换器;
- DAC:数模转换器;
第一章 嵌入式系统概述(了解关键概念)
基本概念
- 定义:嵌入式系统就是一个具有特定功能或用途的计算机软硬件集合体,是对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统 。
- 特点:专用性,低功耗、小体积、高集成度、
- 应用:手机、智能电气、汽车、自动化设备、通信设备等等;
- 计算机硬件的5大组成部分:控制器、运算器、存储器、输入输出设备;
系统体系
- 硬件架构:;
- 软件结构的三个层面:设备驱动层(板级支持包、驱动程序)、OS层、应用层(应用程序、硬件抽象层);
硬件系统
- 嵌入式处理器分类:嵌入式微处理器、嵌入式微控制器、嵌入式DSP、嵌入式SoC;
- 存储系统;
- IO接口;
操作系统
- 非实时操作系统:Linux、ios、Android;
- 实时操作系统:Vxworks、RTX、FreeRTOS;
课后习题
- I/O与CPU信息传送控制方式:查询、中断、DMA控制方式
- 嵌入式系统与计算机系统有什么区别?通用计算机使用高性能处理器,追求更高的存储容量,嵌入式系统要求智能化控制。
第2章 ARM Cortex-M体系结构
概述
A 尖端的基于虚拟内存的操作系统和用户应用;
R 针对实时系统;
M 针对微控制器;
内核基础



寄存器组:
低组寄存器:指定寄存器的所有指令;
高组寄存器:指定寄存器的32位指令,16位不行;

堆栈
MSP:默认调用;
PSP:用户应用程序代码使用;

LR(链接寄存器):用于接收来自PC的返回地址;
PC(程序记数寄存器):指向下一条待执行的地址;
堆栈操作:
① 满递减堆栈。
指向最后压入堆栈的数据,且存储地址减小;② 满递增堆栈。
③ 空递增堆栈。
④ 空递减堆栈。
指向压入堆栈数据的下一个地址,且存储地址增大;入栈出栈(eg:交换R1和R2)
push(R1):将数据放入R1;
pop(R1):将数据从R1取出;
特殊功能寄存器
程序中断寄存器(xPSR);
中断屏蔽寄存器;
控制寄存器;
存储器系统
- 主要特性

数据类型
字:32bit
半字:16bit
字节:8bit
存储形式
0x12345678———-左边为高位
大端存储:高位放低地址
小端存储:高位放高地址
位带区
每个比特扩大为32位的字;
公式:bit_word_addr = bit_band_base + (byte_offset x 32) + bit_number × 4
eg):0x20000300:0x22006008(= 0x22000000 + (0x300*_32) + (2*_4))
异常和中断
优先级
抢占优先级:
响应优先级:
抢占:

末尾连锁

课后习题
试说明Corte-M3/M4处理器两种模式和两种特权的使用。
两种模式:线程模式和处理器模式。
这两种模式可以区别普通应用程序的代码和异常服务例程的代码(包括中断服务例程的代码)。
两种特权:特权级和用户级。
提供一种存储器访问的保护机制。
Corte-M3/M4处理器中断向量处存放的是对应中断的什么信息?
中断向量处存放的是中断服务程序的入口地址。
Corte-M3/M4处理器复位后执行的第一项操作是什么?第二项操作是什么?
第一项操作:从0x00000000地址处将存储的栈顶指针(一个地址)取出来放在MSP中。
第二项操作:从0x00000004地址处将存储的复位异常应用程序入口地址取出来放在PC中。处理器中的程序从此处开始执行。进行STM32F4系列微控制器程序开发一般需要准备开发板、集成开发环境(IDE)、仿真器。
第3章 STM32F429微控制器概述
简介:


时钟系统(考):

电源系统:
三个部分:备份电路、ADC电路、调压器主供电电路;
复位系统:
三种类型:
系统复位:
NRST:外部复位;

电源复位:
备份域复位:
备份域控制寄存器(RCC_BDCR)
课后练习
STM32F29IGT6微控制器的引脚有哪些类型?
引脚类型主要有电源引脚、晶振I/O引脚、下载I/O引脚、BOOT I/O引脚、复位I/O引脚、GPIO引脚等。
清零:与 置位:或 取反:异或
第5章 GPIO结构及应用
结构原理
9个端口和16个引脚;
- 掌握 考(例如元器件什么用)

GPIO 功能描述
输入浮空上电默认模式

输入上拉

输入下拉

模拟功能
注意:在模拟配置中,I/O 引脚不能为 5 V 容忍。禁止上拉和下拉;

具有上拉或下拉功能的开漏输出
推挽和开漏的区别:
推挽:0使N-MOS通,使得引脚与地导通,输出低电平;
1使P-MOS通,使得引脚与Vdd导通,输出高电平; 好处:既能提高电路的负载,,又能提高开关的速度;开漏(默认输出低电平,输出高电平必须接上拉电阻):
P-MOS始终截止; 0使N-MOS通,1使N-MOS截止,变成高阻态;
具有上拉或下拉功能的推挽输出

具有上拉或下拉功能的复用功能推挽

具有上拉或下拉功能的复用功能开漏

GPIO相关寄存器
- 每个通用 I/O 端口包括以下寄存器 :
4 个 32 位配置寄存器(GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR 和 GPIOx_PUPDR)
端口模式寄存器:

端口输出寄存器:

端口输出速度寄存器:

上拉下拉寄存器:

2 个 32 位数据寄存器(GPIOx_IDR 和 GPIOx_ODR);
端口输入数据寄存器:

端口输出数据寄存器:

1 个 32 位置位/复位寄存器 (GPIOx_BSRR);
端口置位复位寄存器:

1 个 32 位锁定寄存器 (GPIOx_LCKR) ;
2 个 32 位复用功能选择寄存器(GPIOx_AFRH 和 GPIOx_AFRL);
分为高位低位;
GPIO典型应用步骤及常用库函数
初始化函数
创建结构体;
实例化;
使能GPIO时钟;
配置引脚;
4个:
模式
推挽/开漏
速度
上拉/下拉/悬空
初始化
读取输入/输出电平函数
实际操作IDR和ODR;
设置输出电平函数
实际操作BSSR寄存器
### **GPIO应用实例**
1. GPIO输出实验:**控制LED灯,以1s为周期进行闪烁。**
- 可能画电路图

- Code:

2. GPIO输入实验:
- 电路图

- 可能画流程图

- Code


3. **GPIO复用应用实例**
- 在最后,需要配置GPIOx_AFRL或者GPIOx_AFRH寄存器,将IO连接到所需的AFx。
- code

4. **矩阵按键应用**
- 逐行扫描:逐行输出低电平,当检测到不是低电平时,根据检测到的列号综合判断;
- 行列扫描:首先全部行线输出低电平,判断出列号,然后所有列线输出低电平,判断出行号,综合得出按键所在位置;
- 流程图

课后练习
- 當要同時初始化某個GPIO的1號、2號引腳,賦給GPIO_InitTypeDef結構體類型成員GPIO_Pin的值是 GPIO_Pin_1 | GPIO_Pin_2
第6章 NVIC
简介
NVIC中断管理方法:
应用中断和复位控制寄存器SCB_AIRCR(Application interrupt and reset control register

抢占式优先级>响应优先级>中断表中的排位顺序
常用库函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14typedef struct
{
uint8_t NVIC_IRQChannel; //设置中断通道
uint8_t NVIC_IRQChannelPreemptionPriority;//设置抢占优先级
uint8_t NVIC_IRQChannelSubPriority; //设置响应优先级
FunctionalState NVIC_IRQChannelCmd; //使能/禁止
} NVIC_InitTypeDef;
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;// 37 串口1中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;// 抢占优先级为1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//响应优先级为2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据上面指定的参数初始化NVIC寄存器
第7章 外部中断/事件控制器(EXTI)
简介
中断请求

触发事件

外部中断服务
16个中中断线只有7个中断服务,其中5-9共用一个,10-15共用一个;
- 触发方式:上升沿/下降沿/双沿触发
常用库函数
初始化


应用实例
按键中断





课后习题
外部中断的中断请求信号可以是控制器外部产生由GPIO引脚引入的,也可以是由控制器内部一些片上外设产生的。这一说法是否正确?_正确___。
外部中断信号输入的触发信号形式可以是__上升沿触发_、_下降沿触发_、_边沿触发_、。
每个外部中断在中断向量表中,是否都独立占用一个位置?不是
应用外部中断,需要先使能GPIO端口的时钟和___ SYSCFG___时钟。
试述初始化外部中断的步骤。
(1)使能用到GPIO时钟和SYSCFG时钟。
(2)初始化相应GPIO的引脚为输入。
(3)设置GPIO引脚与EXTI线的映射关系。
(4)初始化工作类型、设置触发条件、使能等等。
(5)配置中断分组(NVIC),并初始化相应中断通道的优先级及使能/禁止。
(6)编写中断服务函数。
(7)编写中断服务程序处理内容。课后习题中有详细参考
第9章 定时器系统
简介
- 用途:基本定时功能、生成输出波形(输出比较、PWM和带死区插入的互补PWM)和测量输入信号的脉冲宽度(输入捕抓)等;
- 基本结构:

时钟源:

内部时钟源模式
从模式控制寄存器(TIMx_SMCR)的位段SMS = 000,例如,在HCLK=180MHz,PCLK2=90MHz(APB2总线时钟预分频系数=2)的情况下,定时器TIM1的内部时钟源=2×PCLK2=180MHz。
外部时钟源模式1
设置SMS = 111;对TS进行设置;
外部时钟源模式2
以ETR引脚输入作为时钟源;
编码器模式
基本定时模式
时基单元

➀计数器寄存器 (TIMx_CNT)
➁预分频器寄存器 (TIMx_PSC)
➂自动重载寄存器 (TIMx_ARR):存储溢出值
➃重复计数器寄存器 (TIMx_RCR)
计数模式
对TIMx_CNT进行计数,通用定时器可以向上计数、向下计数、向上向下双向计数模式。
ARPE = 0(无缓冲),反之;
递增计数模式;
递减计数模式;
中央对齐模式;
捕抓/比较功能
- 功能:输入:测频率,PWM周期,占空比;
PWM输入:
当连续两次捕抓同一输出信号的连续两个边沿跳变,两次得到的计数寄存器值分别为C1和C2(假设C1和C2计数期间没有溢出事件),那么这一输入信号的周期:
(C2-C1)/CK_CNT)/输入捕抓通道预分频系数。
PWM输出:
**”死区”**(Dead Time)是指在输出比较事件(例如PWM输出)之间引入的一段时间延迟。这段延迟时间允许在两个输出切换之间确保输出电路稳定的时间,以避免可能的短路或过渡电流
TIMx_CCRx:捕获/比较寄存器
计算各个寄存器的值
边沿比较模式;
中心对齐模式;

中心对齐模式,CRR不变,ARR = ARR/2;
常用库函数

应用实例





课后习题
中心对齐计数模式是先以递增计数模式,从0计数到__ ARR -1___,然后产生一次向上溢出,再在从___ ARR _计数到____1,然后产生一次向下溢出。
当使能了比较输出功能,输出PWM波,在边沿比较模式下,当TIM_x__CNT计数值在_0~ CCR-1 寄存器___范围时,输出有效电平;在 CCR~ARR 范围时,输出反向电平。
定时器TIM2挂载在APB1总线上,假设PCLK1=45MHz,选择内部时钟作为计数时钟源(默认情况下这一时钟源频率=2×PCLK1),TIM2_PSC=8,TIM2_ARR=49,则计数溢出一次,时间为多长?怎么计算?
(TIM2_PSC+1)*(TIM2_ARR +1)/ 90000000 = 9 * 50 / 90000000 = 5us使用内部时钟时,怎么确定各定时器的时钟基准频率?
答:
除非APB的分频系数是1,否则通用定时器的时钟等于APB时钟的2倍。
默认调用SystemInit函数情况下:
SYSCLK=180M
AHB时钟=180M
APB1时钟=45M,APB2时钟=90M
APB分频系数分别是4和2
所以,定时器时钟是相应挂载总线时钟的2倍。
第14章 I2C
简介
- 支持多个通信主机和多个通信从机;
SDA - 数据信号线(serial DAta)
SCL - 时钟信号线(serial CLock)
- 物理层

- IIC是半双工:允许双边的通信,但是同一时间只允许发送或者接收;
- IIC可以在通讯过程中,改变主机。通过使用仲裁机制判断真正的主机;
协议层

总线空闲状态 :
SDA :高电平
SCL : 高电平

发:

收:

软件模拟IIC
开始信号

结束信号

模拟I2C总线协议读写AT24CXX系列EEPROM实验
- EEPROM实验

若A0不用,悬空使用NC替换A0表示;

课后习题
- 描述I2C通信线路上电路接口形式。
I2C器件的SDA引脚和SCL引脚是开漏电路形式,因此,SDA和SCL总线都需要连接上拉电阻,当总线空闲时,两条总线均为高电平。
连接到总线上的任意器件输出低电平都会将总线信号拉低,即各器件的SDA和SCL信号线在总线上都是“线与”的关系。
第15章 SPI控制器
简介
支持单主多从;
来自主机的片选信号用于选择从机,低电平,拉高时从机与SPI总线断开连接。

- SPI传输

在时钟SCLK的控制下实现数据的环形传输。
要开始SPI通信,主机必须发送时钟信号,并通过使能NSS信号选择从机。
时钟极性和相位
CPOL=0,时钟空闲时低电平,SCLK有效时高电平;
CPOL=1,时钟空闲时高电平,SCLK有效时低电平。
CPHA=0,数据采样在第1个边沿;
CPHA=1,数据采样在第2个边沿。

SPI控制器
主模式的全双工收发过程

主要特性

全双工****(Full Duplex)是一种通信模式,其中数据可以在通信设备之间同时双向传输,即设备可以同时发送和接收数据。这与半双工(Half Duplex)和单工(Simplex)通信模式相对。
状态标志
TXE=1:发送缓冲区位为空,对SPI_DR执行写操作时将清零TXE标志;
RXNE=1:接收缓冲区存在有效的已接受数据,读取SPI_DR时将清零RXNE标志;
BUSY =1 ,表示 SPI 正忙于通信,用于指示SPI 通信的状态。
常用库函数
SPI初始化函数


课后习题
实验
触摸式按键实验
- 输入检测方法:
- 触摸式按键: 通常通过检测电容变化或电阻变化来确定触摸的位置。触摸事件通常会触发中断或通过轮询进行检测。
- 普通按键: 通过检测GPIO引脚的电平变化(上升沿或下降沿)来确定按键的状态。可以使用中断或轮询方法。
- 触摸式按键支持连续触发(可以一直按下)


