Stm32 IO端口及其中断

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

弟4章I/O端口及中断

I/O口(GPIO)

一、GPIO的概述:

GPI/O,通用型之输入输出(General Purpose I/O)的简称,对于stm32的学习,应该从最基本的GPIO开始学习:首先看看STM32的datasheet上对GPIO口的简单介绍:每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。共7组寄存器。GPIO端口的每个位可以由软件分别配置成多种模式。每个I/O端口位可以自由编程,然而I/0端口寄存器必须按32位字被访问(不允许半字或字节访问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器的读/更改的独立访问;这样,在读和更改访问之间产生IRQ时不会发生危险。我们常用的IO端口寄存器只有4个:CRL、CRH、IDR、ODR。CRL和CRH控制着每个IO口的模式及输出速率。二、GPIO的配置:

当使用GPIO时,需要两步。一是:配置模式,二是配置时钟。对于模式配置共有8种,可以通过编程选择:

1.浮空输入:GPIO_Mode_IN_FLOATING

2.带上拉输入:GPIO_Mode_IPU

3.带下拉输入:GPIO_Mode_IPD

4.模拟输入:GPIO_Mode_AIN

5.开漏输出:GPIO_Mode_Out_OD

6.推挽输出:GPIO_Mode_Out_PP

7.复用功能的推挽输出:GPIO_Mode_AF

8.复用功能的开漏输出:GPIO_Mode_AF_OD

模式7和模式8需根据具体的复用功能决定。时钟配置将会在后续课程中一一介绍。

I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz 和50MHz),这有利于噪声控制。这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。

三、GPIO的功能:

1.通用I/O(GPIO):最最基本的功能,可以驱动LED、可以产生PWM、可以驱动蜂鸣器等等;

2.单独的位设置或位清除:方便软体作业,程序简单。端口配置好以后只需GPIO_SetBits(GPIOx,GPIO_Pin_x)就可以实现对GPIOx的pinx位为高电平;GPIO_ResetBits(GPIOx,GPIO_Pin_x)就可以实现对GPIOx的pinx位为低电平。

3.外部中断/唤醒线:端口必须配置成输入模式时,所有端口都有外部中断能力;

4.复用功能(AF):复用功能的端口兼有IO功能等。复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式:(CNFx[1:0]=01b,MODEx[1:0]=00b)。

5.软件重新映射I/O复用功能:为了使不同器件封装的外设I/O 功能的数量达到最优,可以把一些复用功能重新映射到其他一些脚上。这可以通过软件配置相应的寄存器来完成。这时,复用功能就不再映射到它们的原始引脚上了;

6.GPIO锁定机制:主要针对复位设定的,当某端口位lock后,复位后将不改变的此端口的位配置。

四、GPIO的配置

void GPIO_Config(void)

{

//对PB3进行初始化配置

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//设置推挽输出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//设置翻转速度

GPIO_Init(GPIOB,&GPIO_InitStructure);//对PB3初始化

/*对PB6上拉输出*/

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//设置上拉GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化PB6

}

中断系统

一、中断的定义

中断的定义:指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断。

二、STM32中断的概述(NVIC)

ARM cortex_m3内核支持256个中断(16个内核+240外部)和可编程256级中断优先级的设置STM32采用Cortex-m3内核,但是STM32并没有使用Cortex-m3的全部资源。STM32目前支持的中断共为84个(16个内核+68个外部),(注:68个外部中断可以

)和16级可编程中断优先级的设置(仅使中断向量表)

参看stm32中断向量表

用中断优先级设置8bit中的高4位,见后面解释)。STM32的外部中断通道已经固定分配给相应的外设。NVIC,中文名嵌套中断向量控

制器,是Cortex-M3系列控制器内部独有集成单元,与CPU结合紧密,降低中断延迟时间并且能更加高效处理后续中断。

三、中断优先级

STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,也可把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就

要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。既然每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个bits用于设置中断源的优先级,这8个bits 可以有8种分配方式,如下:所有8位用于指定响应优先级

最高1位用于指定抢占式优先级,最低7位用于指定响应优先级

最高2位用于指定抢占式优先级,最低6位用于指定响应优先级

最高3位用于指定抢占式优先级,最低5位用于指定响应优先级

最高4位用于指定抢占式优先级,最低4位用于指定响应优先级

最高5位用于指定抢占式优先级,最低3位用于指定响应优先级

相关文档
最新文档