STM32有好几个串口。比方说STM32F103ZET6有5个串口,串口1的引脚对应的IO为PA9,PA10.PA9,PA10默许功用是GPIO,所以当PA9,PA10引脚作为串口1的TX,RX引脚运用的时分,那便是端口复用。
复用端口初始化有几个进程:
1) GPIO端口时钟使能。要运用到端口复用,当然要使能端口的时钟了。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
2) 复用的外设时钟使能。比方你要将端口PA9,PA10复用为串口,所以要使能串口时钟。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
3) 端口形式装备。 在IO复用位内置外设功用引脚的时分,有必要设置GPIO端口的形式,至于在复用功用下GPIO的形式是怎样对应的,这个能够检查手册。
所以,咱们在运用复用功用的是时分,最少要使能2个时钟:
1) GPIO时钟使能 ;2) 复用的外设时钟使能 一起要初始化GPIO以及复用外设功用
串口设置的一般进程能够总结为如下几个进程:
1) 串口时钟使能,GPIO时钟使能
2) 串口复位
3) GPIO端口形式设置
4) 串口参数初始化
5) 敞开中止而且初始化NVIC(假如需求敞开中止才需求这个进程)
6) 使能串口
7) 编写中止处理函数
端口重映射:(暂略)
中止量操控:
STM32有84个中止,包含16个内核中止和68个可屏蔽中止,具有16级可编程的中止优先级。而咱们常用的便是这68个可屏蔽中止,可是STM32的68个可屏蔽中止,在STM32F103系列上面,又只要60个(在107系列才有68个)。
ISER[2]:ISER全称是:Interrupt Set-Enable Registers,这是一个中止使能寄存器组。
ICER[2]:全称是:Interrupt Clear-Enable Registers,是一个中止除能寄存器组。
ISPR[2]:全称是:Interrupt Set-Pending Registers,是一个中止挂起操控寄存器组。
ICPR[2]:全称是:Interrupt Clear-Pending Registers,是一个中止解挂操控寄存器组。
IABR[2]:全称是:AcTIve Bit Registers,是一个中止激活标志位寄存器组。
IPR[15]:全称是:Interrupt Priority Registers,是一个中止优先级操控的寄存器组。
简略介绍一下STM32的中止分组:STM32将中止分为5个组,组0~4。该分组的设置是由SCB-》AIRCR寄存器的bit10~8来界说的。
经过这个表,咱们就能够清楚的看到组0~4对应的装备联系,例如组设置为3,那么此刻一切的60个中止,每个中止的中止优先寄存器的高四位中的最高3位是抢占优先级,低1位是呼应优先级。每个中止,你能够设置抢占优先级为0~7,呼应优先级为1或0。抢占优先级的等级高于呼应优先级。而数值越小所代表的优先级就越高。
STM32的中止如此之多,装备起来并不简单,因而,咱们需求一个强壮而便利的中止操控器NVIC (Nested Vectored Interrupt Controller)。NVIC是归于
Cortex内核的器材,不行屏蔽中止 (NMI)和外部中止都由它来处理,而SYSTICK不是由NVIC来操控的。
运用NVIC来装备中止时,天然想到ST库必定也现已把它封装成库函数了。对NVIC初始化NVIC_Init() 函数,首要要界说并填充一个NVIC_InitTypeDef 类型的结构体。
这个结构体有四个成员:
NVIC_IRQChannel 需求装备的中止向量;
NVIC_IRQChannelCmd 使能或封闭相应中止向量的中止呼应;
NVIC_IRQChannelPreempTIonPriority 装备相应中止向量抢占优先级;
NVIC_IRQChannelSubPriority 装备相应中止向量的呼应优先级;
首要要用NVIC_IRQChannel参数来挑选即将装备的中止向量,用NVIC_IRQChannelCmd参数来进行使能(ENABLE)或封闭(DISABLE)该中止。在NVIC_IRQChannelPreempTIonPriority成员要装备中止向量的抢占优先级,在NVIC_IRQChannelSubPriority需求装备中止向量的呼应优先级。
抢占优先级和呼应优先级
STM32的中止向量具有两个特点,一个为抢占特点,另一个为呼应特点,其特点编号越小,标明它的优先等级越高。
抢占,是指打断其它中止的特点,即因为具有这个特点,会呈现嵌套中止(在履行中止服务函数A的进程中被中止B打断,履行完中止服务函数B再持续履行中止服务函数A),抢占特点由NVIC_IRQChannelPreemptionPriority的参数装备。
而呼应特点则应用在抢占特点相同的情况下,当两个中止向量的抢占优先级相一起,假如两个中止一起抵达,则先处理呼应优先级高的中止,呼应特点由NVIC_IRQChannelSubPriority的参数装备。
例如:现在有三个中止向量:
中止向量 抢占优先级 呼应优先级
A 0 0
B 1 0
C 1 1
若内核正在履行C的中止服务函数,则它能被抢占优先级更高的中止A打断,因为B和C的抢占优先级相同,所以C不能被B打断。但假如B和C中止是一起抵达的,内核就会首要呼应呼应优先等级更高的B中止。
NVIC只能够装备16种 中止向量的优先级,也便是说,抢占优先级和呼应优先级的数量由一个4位的数字来决议,把这个4位数字的位数 分配成抢占优先级部分和呼应优先级部分。有5组分配方法。
要装备这些优先级组,能够选用库函数NVIC_PriorityGroupConfig(),可输入的参数为NVIC_PriorityGroup_0 ~ NVIC_PriorityGroup_4,分别为以上介
绍的5种分配组。
中止优先级设置的进程:
1. 体系运转开端的时分设置中止分组。确认组号,也便是确认抢占优先级和子优先级的分配位数。调用函数为NVIC_PriorityGroupConfig();
2. 设置所用到的中止的中止优先等级。对每个中止调用函数为NVIC_Init();