关注同名微信公众号“混沌无形”,阅读更多有趣好文!
1.STM32系统架构基础名词描述
1.1 APB(Advanced Peripheral Bus),片上外设总线。主要用于慢速片上外设与ARM核的通讯
APB外设:APB1(低速)---->DAC,PWR,BKP,bxCAN,USB,I2C1-2,UART4-5,USART2- 3,SPI2/I2S,SPI3/I2S,IWDG,WWDG,RTC,TIM2-7
APB2(高速)---->ADC1-3,USART1,SPI1,TIM1,TIM8,GPIOA-G,EXTI,AFIO
1.2 AHB(Advanced High performance Bus),高性能总线。主要用于系统高性能、高时钟速率模块间通信
1.3 D-Code 访问数据,数据总线; I-Code访问指令的,指令总线
1.4 DMA(Direct Memory Access,直接内存存取) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。
1.5 FSMC(Flexible Static Memory Controller,可变静态存储控制器)是STM32系列采用一种新型的存储器扩展技术。 在外部存储器扩展方面具有独特的优势,可根据系统的应用需要,方便地进行不同类型大容量静态存储器的扩展
1.6 SRAM(Static Random Access Memory),即静态随机存取存储器。它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。
1.7 FLASH闪存 一种非易失性( Non-Volatile )内存,在没有电流供应的条件下也能够长久地保持数据,其存储特性相当于硬盘,这项特性正是闪存得以成为各类便携型数字设备的存储介质的基础。
1.8 I2S(Inter—IC Sound)总线, 又称 集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,该总线专门用於音频设备之间的数据传输,广泛应用于各种多媒体系统。
2.STM32时钟系统
2.1 时钟越快,功耗越大,抗电磁干扰能力越弱-------->多时钟系统
2.2 时钟源:5个(HSE,HSI,LSI,LSE,PLL)使用模块,需先使能相应的时钟
2.3 系统时钟大小:SYSCLK(系统时钟) = 72MHz
AHB总线时钟(使用SYSCLK) = 72MHz
APB1 总线时钟(PCLK1) = 36MHz
APB2 总线时钟(PCLK2) = 72MHz
PLL时钟 = 72MHz
3.端口福永和重映射
3.1 端口复用
3.1.1 端口复用步骤--->端口时钟和外设时钟的使能
1)GPIO端口时钟使能
2)复用的外设时钟使能
3)端口模式设置------>初始化GPIO以及复用外设功能
3.2 端口重映射-Alternate functions(把复用功能重新映射到其他引脚)
3.2.1 端口重映射步骤
1)使能GPIO时钟----->RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE)
2) 使能串口1时钟----->RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE)
3) 使能AFIO时钟----->RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE)
4) 开启(部分)重映射----->PinRemapConfig(GPIO_(Partial)Remap_USART1,ENABLE)
3.3 NVIC-嵌套向量中断控制器(Nested Vectored Interrupt Controller) 中断优先级管理
3.3.1 cm3:256=16个内核中断+240个外部中断;STM32:84=16个内核中断+68个可屏蔽中断;STM32F103只有60个可屏蔽中断
3.3.2 NVIC寄存器介绍--NVIC_Type中的寄存器都是写1有效,写0无效
NVIC_Type结构体的成员如下-->每个成员均用8个32位寄存器控制,8X32=256
1)ISER[8]->Interrupt Set-Enable Registers:ISER[0]的bit0-31分别对应中断0-31,与ISER[1]的bit31-59,共60个中断
2)ICER[8]->Interrupt Clear-Enable Registers:和ISER功能相反,用于清除中断
3)ISPR[8]->Interrupt Set-Pending Registers(中断挂起控制寄存器):置1,可将正在进行的中断挂起,执行同级或高级的中断
4)ICPR[8]->Interrupt Claer-Pending Registers:与ICPR作用相反
5)IABR[8]->Interrupt Active Bit Registers(中断激活标志位寄存器-只读):该位位1,则表示所对应的中断正在执行,中断执行完成,硬件自动清零
6)IP[240]->Interrupt Priority Registers(中断优先级控制寄存器):240个8位寄存器组成,IP[59]-IP[0]分别对应中断59-0,且只使用高四位=>抢占优先级+子优先级
*##*STM32中断分组:5组(0-4),分组设置由SCB->AIRCR寄存器的bit10-8来定义
抢占优先级>响应优先级,数值越小,则优先级越高--------需查看AIRCR中断分组表-共5组
中断分组函数:NVIC_PriorityGroupConfig(u32 NVIC_PriorityGroup),整个系统只能调用一次
函数的参数(NVIC_PriorityGroup值)有下列5种:
NVIC_PriorityGroup_0 => 选择第0组
NVIC_PriorityGroup_1 => 选择第1组
NVIC_PriorityGroup_2 => 选择第2组
NVIC_PriorityGroup_3 => 选择第3组
NVIC_PriorityGroup_4 => 选择第4组
*##*STM32中断初始化函数:NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)
NVIC_InitStruct成员:
typedef struct
{
uint8_t NVIC_IRQChannel;//定义初始化中断号
uint8_t NVIC_IRQChannelPreemptionPriority;//定义抢占优先级
uint8_t NVIC_IRQChannelSubPriority;//子优先级
FunctionalState NVIC_IRQChannelCmd;//该中断是否使能
}EXTI_InitTypeDef;
typedef struct
{
uint8_t NVIC_IRQChannel;//定义初始化中断号
uint8_t NVIC_IRQChannelPreemptionPriority;//定义抢占优先级
uint8_t NVIC_IRQChannelSubPriority;//子优先级
FunctionalState NVIC_IRQChannelCmd;//该中断是否使能
}EXTI_InitTypeDef;
中断优先级设置步骤:
(1) 设置中断分组,确定组号-->确定抢占优先级和子优先级的分配位数,调用函数
(2) 设置所用中断的优先级,调用函数
7)STIR:
喜欢的话,可以关注微信公众号“混沌无形”