stm32f10x
嵌入式stm32
定义: 以应用 为中心,以计算机技术 为基础,软硬件 可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统
特点:
- 系统内核小
- 专用性强
- 系统精简
- 高实时性
- 多任务的操作系统
- 专门的开发工具和环境
ST公司的STM32系列芯片采用了 Cortex-M3内核(哈佛结构),其分为两个系列:
- STM32F101系列(基本型)为标准型,运行频率为36MHz
- STM32F103系列(增强型)为标准型,运行频率为72MHz
固件库函数及其头文件的命名规则:
系统、源程序文件和头文件命名都以“stm32f10x_”作为开头
ARM Cortex系列:
- Cortex-A—高性能应用处理器
- Cortex-R—实时应用的高性能内核
- Cortex-M—低成本的微控制器内核
Cortex-M3是一个32位处理器内核,内部的数据路径,寄存器,存储器接口是32位,采用了哈佛 结构
常用关键字
ifdef:
条件编译 :其中一部分内容只在满足一定条件才进行编译
可以防止双重定义的错误
endif:
与ifdef成对使用
static:
- 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变
- 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问
- 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用
inline:
内联函数:为了解决一些频繁调用的小函数大量消耗栈空间的问题,加快程序执行速度
typedef:
声明新的类型名来替代原有的类型名,增加编程效率
extern
- 可以在一个文件中引用另一个文件中定义的变量或者函数
RCC(复位和时钟控制器)时钟树
- AHB:HCLK=SYSCLK=72M
- APB1:HCLK1=HCLK/2=36M(低速) USART2/3/4/5
- APB2:HCLK2=HCLK=72M(高速) GPIO,USART1,SPI1
-
PLL:锁相环时钟,两个时钟源:HSE,HSI/2
-
HSE:高速外部时钟信号,最常用8M无源晶振,可以不分频或2分频
-
HSI:高速内部时钟信号
-
LSE:低速外部时钟信号
-
LSI:低速内部时钟信号
当STM32复位后,HSI将被选为系统时钟
定时器(8个)16位
- 基本定时器:TIM6,TIM7 只能向上计数, 只能定时 ,无外部IO接口
- 通用定时器:TIM2,TIM3,TIM4,TIM5 上下计数,可以定时,输出比较、输入捕捉,每个定时器有4个外部IO
- 高级定时器:TIM1,TIM8 上下计数,可以定时,输出比较、输入捕捉,每个定时器有8个外部IO 互补输出信号
STM32通用定时器TIM的16位计数器可以采用三种方式工作:
- 向上计数模式
- 向下计数模式
- 中央对齐模式
USART(通用同步/异步串行接收/发送器)
USART 满足外部设备对工业标准 NRZ 异步串行数据格式的要求,并且使用了小数波特率发生器
既可以工作在全双工模式下,也可工作在半双工 模式下,既可以工作在异步模式下,也可工作在同步模式下,支持使用 DMA
波特率(B/s)计算:
Tx/Rx=fpLCK/(16*USARTDIV)
fpLCK是USART时钟频率
USARTDIV存放在波特率寄存器USART_BRR的无符号定点数
DIV_Mantissa (16进制)寄存器定义USARTDIV的整数 部分;DIV_Fraction (16进制)寄存器定义USARTDIV小数 部分
例:
115200=72000000/16*USARTDIV
USARTDIV=39.0625
DIV_Fraction=0.0625*16=1=0x01,DIV_Mantissa=39=0x27,USART_BRR=0x271
DMA(直接存储器存取)
是单片机的一个外设,主要功能是用来搬数据 ,不需要占用CPU
DMA1: 7个通道
DMA2: 5个通道(只存在于大容量单片机中)
每个DMA通道有3个事件标志,分别是:
- DMA传输过半
- DMA传输完成
- DMA传输出错
传输方向:
- 从存储器到外设
- 从外设到存储器
- 从存储器到存储器
LCD液晶
完整的显示屏由:
- 液晶显示面板
- 电容触摸面板
- PCB底板
液晶与CPU通讯的通信协议主要有:
- SPI
- 8080
- RGB
STM 32F1 系列芯片没有集成
GPIO
每个I/O端口位可以自由的编程,尽管I/O端口寄存器必须以32位字方式访问
STM32系列微处理器最多可以有7组GPIO端口 ,每组端口有16个IO接口,每个端口有7个 寄存器:
- 2个32位配置寄存器(GPIOx_CRH,GPIOx_CRL)
- 2个32位数据寄存器(GPIOx_IDR(输入),GPIOx_ODR(输出))
- 1个32位置位/复位寄存器(GPIOx_BSRR)
- 1个复位寄存器(GPIOx_BRR)
- 1个32位锁定寄存器(GPIOx_LCKR)
引脚模式配置
- 浮空输入
- 上拉输入
- 下拉输入
- 模拟输入
- 开漏输出
- 推挽输出
- 复用推挽输出
- 复用开漏输出
引脚输出速度:
- 2MHz
- 10MHz
- 50MHz
端口重映射:把管脚的外设功能映射到另一个管脚
端口复用:不同的功能对应同一管脚
常用库函数:
- GPIO_Init:初始化外设GPIOX寄存器
- GPIO_ReadInputDataBit:读取指定端口管脚的输入
- GPIO_ReadInputData:读取指定的GPIO端口输入
- GPIO_SetBits:设置指定的数据端口位
- GPIO_ResetBits:清除指定的数据端口位
- GPIO_WriteBit:设置或清除指定的数据端口位
- GPIO_Write:向指定的GPIO端口写入数据
EXTI(外部中断/事件控制器)
支持多达19个中断/事件请求,每个输入线都可以被独立的屏蔽,挂起寄存器保持着状态线的中断要求
4位中断优先级,16个可编程的优先等级
STM32的所有端口都有外部中断能力。当使用 外部中断功能时,相应的引脚必须配置成 输入 模式
中断向量表由启动文件startup_stm32f10x_hd.s建立,在编写中服函数时,需要从中断向量表中查找中服函数名
例:NVIC_PriorityGroup_0:先占优先级0位,从优先级4位
中断触发方式:
- EXTI_Trigger_Falling:
- EXTI_Trigger_Rising:
- EXTI_Trigger_Rising_Falling:
SRAM,DRAM存储原理
SRAM(静态随机存储器): 只要保持通电,里面的数据就可以保持住, 靠双稳态触发器记忆信息
DRAM(动态随机存储器): 需要定期刷新操作,靠MOS电路中的栅极电容来记忆信息的,比SRAM集成度高、功耗低,成本低
常用名词解释
USART:
通用同步/异步串行接收/发送器
I2C:
内部集成电路
SPI:
串行通信接口
SDIO:
安全数字输入输出接口
FSMC:
灵活的静态存储控制器
I2S:
集成电路内置音频总线
ADC:
模拟数字转换器
GPIO:
通用输入输出
EEPROM:
带电可擦可编程只读存储器
DCMI:
数字摄像头接口
OLED:
有机发光二极管
LQFP:
四方扁平式封装技术
LFBGA:
球栅阵列封装
VDD/VSS:
电源电压(单极器件)
电路公共接地端电压或电源负极
VREF+/VREF-:
基准电压正负端