第一章——嵌入式技术设计基础
什么是嵌入式系统
国外:嵌入式系统是“控制、监视或者辅助装置、机器和设备运行的装置”(不用记)
国内:嵌入式系统是“以应用为中心、以计算机技术为基础、软件/硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统
Embedded
嵌入式系统的技术特点
硬件的特点-硬件电路高度集成、体积较小-低成本、低功耗
软件的特点一实时性和可靠性-软件剪裁和固化一代码高效
嵌入式系统一般由4个部分组成
嵌入式处理器(嵌入式硬件平台)
外围硬件设备(嵌入式硬件平台)
嵌入式操作系统(可选)
用户应用程序
嵌入式处理器分为四个
嵌入式微控制器
(MCU)
通常把集成了微处理器、存储器和片内外设的芯片称之为微控制器
例如,MSC-51系列是典型的8位微控制器:SAMSUNG的S3Cxxxx、NXP的LPC2xxx系列等是32位微控制器。
嵌入式DSP处理器
(DSP)
通常把集成了乘累加器、具有多数据总线的处理器称之为DSP。数字信号处理器DSP是进行信号处理运算的专用处理器。
嵌入式微处理器(MPU)
通常把集成了处理器核、存储器管理器、高速缓存的芯片称之为微处理器。例如:x86系列、ARM系列、PowerPC系列、MIPS系列等。
嵌入式片上系统(System On Chip)SOC
把基于微处理器或微控制器、外设控制器的应用解决方案称之为片上系统。把一个或多个CPU单元以及功能部件集成在单个共片上。
嵌入式系统的开发模式
宿主机-目标机模式
宿主机:通用微型机(PC机)
目标机:待开发的嵌入式系统
利用宿主机(PC机)上丰富的软硬件资源及良好的开发环境和调试工具来开发目标板上的软件,然后通过交叉编译环境生成目标代码和可执行文件,通过在线仿真器、串口、网络等方式下载到目标机上;利用交叉调试器监控程序运行,实时分析;最后将程序下载固化到目标机上,完成整个开发过程。
交叉编译是在一种平台上编译出能运行于另一种平台上的程序。
例如在X86平台上编译出能运行于ARM平台上的程序。
第二章——cortex M3处理器
Cortex-A(Application)
基于ARMv7-A体系结构-用于高性能开放应用程序平台,支持操作系统
Cortex-R (Real-time)
基于ARMV7-R体系结构-用于实时性要求的高端嵌入式系统
Cortex-M(Microcontroller)
基于ARMV7-M和ARMV6-M体系结构用于运行实时控制系统的小规模应用程序
Cortex-M3处理器
高性能、低功耗、32位RISC处理器
基于ARM V7-M结构,只执行Thumb-2指令3段指令流水线(取指-译码-执行)
Cortex-M3的两个操作状态
工作状态(Thumb State)
Cortex-M3启动后执行程序代码(Thumb指令)的工作状态
调试状态(Debug state)
通过调试程序的停止请求或者处理器调试事件才能进入的调试状态 ,停止执行指令
在工作状态时,处理器具有两级特权层次。特权级(Privileged Level)-可以访问所有处理器资源,执行所有指令可执行异常处理程序和应用程序用户级(非特权级,Unprivileged Level)-不能访问部分受限的存储区域和进行部分操作-只能执行应用程序
在工作状态时,处理器还具有两种操作模式。异常模式(例程模式,Handler Mode)-只能在特权级下,执行异常处理程序线程模式(Thread Mode)特权级和用户级下,执行应用程序复位后,处理器默认进入线程模式的特权级执行应用程序(Thumb 状态)
通用寄存器
16个:RO-R15,32位
R13:堆栈寄存器SP(Stack Pointer)
MSP:默认堆栈指针,复位后或异常模式使用。PSP:线程模式下应用程序使用
R14:连接寄存器LR(Link Register)
LR:保存函数或子程序的返回地址
R15:程序计数器PC(ProgramCounter)
下一条指令的地址
多字节数据默认采用小端方式存放-也支持大端方式的存储系统每个字Word是32位指令字长有16位(Thumb指令)还有32位(Thumb-2指令访问代码区必须对齐偶地址(PC最低位是0)
大部分指令要求对齐地址访问部分指令可以支持非对齐地址访问
123456789 大端存储12在最小的地址是,小端存储12在最大的地址
第三章——通用IO端口GPIO
STM32L431RCT6基本参数
处理器核、Flash容量、引脚数、时钟频率、外设接口、存储器结构等
处理器核
内核: ARM Cortex-M4 处理器
最大频率: 80 MHz
DSP 指令集: 支持
浮点单元 (FPU): 单精度浮点运算单元
存储器
Flash 容量: 256 KB
SRAM 容量: 64 KB
引脚数
引脚数: 64 个引脚 (LQFP64 封装)
时钟
最大时钟频率: 80 MHz
内部时钟源: 4 MHz 的 MSI 振荡器,可调节范围
外部时钟源: 高速晶振 (HSE) 和低速晶振 (LSE)
外设接口
GPIO: 多达 51 个通用输入/输出引脚
ADC: 3 个12位 ADC,具有多达 16 个通道
DAC: 2 个12位 DAC
比较器: 2 个
运算放大器: 2 个
I2C: 3 个(支持 SMBus/PMBus)
SPI: 3 个
USART/UART: 3 个
USB: USB 2.0 全速
I2S: 1 个
CAN: 1 个 (CAN 2.0B)
SDMMC: 1 个(用于 SD/SDIO/MMC 卡接口)
RTC: 实时时钟
触摸感应: 支持多达 24 个电容感应通道
定时器
通用定时器: 5 个 16 位定时器(包括 1 个高级定时器)
基本定时器: 2 个
低功耗定时器: 1 个
看门狗定时器: 独立看门狗和窗口看门狗
系统定时器: SysTick 定时器
电源管理
电源电压: 1.71V 至 3.6V
低功耗模式: 支持多种低功耗模式(停止模式、待机模式、关断模式等)
存储器保护
MPU: 内存保护单元
安全功能: 128-bit 的唯一ID,支持安全引导
GPIO端口概述
通用IO口,又称为GPI0(General-Purposel0ports),CPU的一个接口模块O为一些协议比较简单的外部设备/电路提供了一种控制手段,STM32单片机最多有7个16位的并行I/0端口:PA、PB、PC、PD、PE、PF、PGSTM32单片机不同封装时,GPIO口数目不同
STM32单片机GPIO口的操作流程
操作流程
设置GPIO口的时钟
设置GPIO口的参数
使能GPIO口
设置或者读取GPIO口引脚值
说明
。每一个GPIO口在使用前,都需要使能该端口所对应的时钟。主要包括GPIO口的工作模式设置,端口引脚的设置,端口传输速率等的设置,可通过库函数进行初始化设置。通过调用相应的库函数,使能GPIO口。实际程序设计中,通过直接调用相应的库函数,设置或者读取GPIO口的引脚值
第四章——显示器件及IIC通讯
总线结构
SDA (Serial Data Line): 传输数据的双向线路。
SCL (Serial Clock Line): 提供时钟信号的双向线路。
第五章——定时器与中断系统
STM32系列单片机定时器的计数模式
向上模式
计数器从0开始计数,直到计数到自动重载值(TIMX ARR 寄存器的内容),然后从0重新开始计数并产生计数器溢出事件
向下模式
计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件
向上/向下模式
计数器从0开始向上计数到自动重载值,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数
t2定时器启动代码
这个1s是怎么算出来的呢?
time=(period+1)*(prescaler+1)/时钟频率
=(9999+1)*(7999+1)/80
=1s
预分频器 (Prescaler): 预分频器将定时器时钟频率除以指定的值。htim2.Init.Prescaler = 8000 – 1 将定时器时钟频率除以8000。
计数模式 (CounterMode):
htim2.Init.CounterMode = TIM_COUNTERMODE_UP 设置定时器为向上计数模式。
自动重装载值 (Period): 定时器计数到该值后会自动重装载,并触发中断。htim2.Init.Period = 10000 – 1 设置定时器周期为10000个计数。
中断配置: HAL_NVIC_SetPriority 设置中断优先级,HAL_NVIC_EnableIRQ 使能中断。
中断概述
。CPU执行程序时,由于发生了某种随机的事件(外部或内部),引起CPU暂时中断正在运行的程序,转去执行一段特殊的服务程序(中断服务子程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程称为中断
STM32中指定中断优先级的寄存器位有4位,这4个寄存器位的优先级如下
第0组 所有4位用于指定响应优先级
第1组 最高1位用于指定抢占式优先级,最低3位用于指定响应优先级
第2组 最高2位用于指定抢占式优先级,最低2位用于指定响应优先级
第3组 最高3位用于指定抢占式优先级,最低1位用于指定响应优先级
第4组 所有4位用于指定抢占式优先级
抢占优先级与响应优先级中,抢占式优先级占主导地位,抢占式优先级高的中断会优先打断主程序或者另外一个中断程序。
如果两个中断的抢占式优先级一样高,则当两个中断同时发生时,CPU会先处理响应优先级高的事件,再处理响应优先级较低的事件。
第六章——ADC、串行通讯
拥有1~3个12位ADC
每个ADC具有16个模拟输入通道可以测量16个外部信号源主ADC1还可以测量2个内部信号源
各个通道可以采用单次、连续、扫描或间断模式将模拟量转换为数字量12位转换结果保存于16位数据寄存器中·可以选择左对齐或右对齐方式存储
ADC共16个多路复用通道,可组织成两组
·一个组由一系列转换组成·可以是在任何通道上、并以任何顺序进行
STM32将ADC的转换分为2个通道组
规则通道组
。规则通道相当于正常运行的程序
。注入通道组
·注入通道就相当于中断
两者关系口
注入通道的转换可以打断规则通道的转换
在注入通道被转换完成之后,规则通道才得以继续转换
STM32单片机温度检测的软件程序设计
温度检测的软件程序设计主要步骤
。进行ADC模式的初始化设置
。使能ADC的应用端口
。读取ADC的转换结果
根据ADC的结果计算温度值
显示温度值
用户任务对adc初始化
串行数据传输将数据分解成二进制位
用一条信号线一位一位顺序传输数据·
通信线路少,远距离通信的成本低·
适合于远距离数据传送和近距离数据传送·
可以减小芯片尺寸、提升传输速率
需制定通信协议(通信规程),解决传送速率、信息格式、数据同步、数据校验等问题串行异步通信、串行同步通信
数据传输速率=比特率(Bit Rate)
每秒传输的二进制位数bps
字符中每个二进制位持续的时间长度都一样,是数据传输速率的倒数
进行二进制数码传输,每位时间长度相等:比特率=波特率(Baud Rate)
过去,限制在50 bps到9600 bps之间,现在,可以达到115200bps或更高
发表回复