栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

STM32外部中断及串口

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

STM32外部中断及串口

本博客为实验室第三次作业。

中断

  中断的定义:中断是计算机方面特有的名词,指在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行

中断的执行流程:

外部中断  

外部中断的定义:外部中断指的是由外部引发的中断,具体到STM32就指的是由外设引发的中断,即外部中断源。

外部中断通用I/O映像

STM32单片机的每一个GPIO都可以被设置为外部中断输入,根据引脚序号的不同可以将外部中断分为不同的组,分别为PA0-PG0为EXTI0组,以此类推,PA15-PG15为EXTI15组,共16组,并且每一组中同一个时刻只能有一个中断源工作,所以,STM32单片机最多允许同时有16个外部中断。外部中断的分配方式如下表所示:

GPIO引脚中断标志位中断处理函数
PA0~PG0

EXTI0

EXTI0_IRQHandler
PA1~PG1EXTI1EXTI1_IRQHandler
PA2~PG2EXTI2EXTI2_IRQHandler
PA3~PG3EXTI3EXTI3_IRQHandler
PA4~PG4EXTI4EXTI4_IRQHandler
PA5~PG5EXTI5EXTI9_5_IRQHandler
PA6~PG6EXTI6
PA7~PG7EXTI7
PA8~PG8EXTI8
PA9~PG9EXTI9
PA10~PG10EXTI10EXTI15_10_IRQHandler
PA11~PG11EXTI11
PA12~PG12EXTI12
PA13~PG13EXTI13
PA14~PG14EXTI14
PA15~PG15EXTI15

其中5-9,10-15采用并线,所以STM32EXTI结构如图所示

另外还有四条 EXTI 线的连接方式如下: ● EXTI 线 16 连接到 PVD 输出 ● EXTI 线 17 连接到 RTC 闹钟事件 ● EXTI 线 18 连接到 USB 唤醒事件 ● EXTI 线 19 连接到以太网唤醒事件 ( 只适用于互联型产品 )

外部中断的配置:

初学者会觉得外部中断的配置是一个相当繁琐的过程,因为配置外部中断需要将上图所示的四个部分全部打穿

配置外部中断一般的步骤为:

开启IO口时钟,初始化IO口为输入。调用函数:

GPIO_Init();


2)开启IO口复用时钟。调用函数:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);


3)设置IO口与中断线的映射关系。调用函数:

GPIO_EXTILineConfig();


4)初始化线上中断,设置触发条件等。调用函数:

EXTI_Init();


5)配置中断分组(NVIC),并使能中断。调用函数:

NVIC_Init();


6)编写中断服务函数。调用函数:

EXTIx_IRQHandler();

7)清除中断标志位。调用函数:

EXTI_ClearITPendingBit()。
NVIC优先级分组

NVIC的中断优先级由优先级寄存器的4位(0~15)决定,这4位可以进行切分,分为高n位的抢占优先级和低4-n位的响应优先级 抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,抢占优先级和响应优先级均相同的按中断号排队


串口

定义:串行接口简称串口,也称串行通信接口

划分标准:

同步串行接口(英文:Synchronous Serial Interface,SSI)是一种常用的工业用通信接口。

 异步串行是指UART(Universal Asynchronous Receiver/Transmitter),通用异步接收/发送。

和USART : Universal Synchronous Asynchronous Receiver/Transmitter 通用同步/异步收发器

Other

波特率:在串行通讯中,数据是按位进行传送的,因此传送速率用每秒钟传送格式位的数目来表示,称为波特率。

  波特率决定了串口传输的速度,1波特=1bps(位/秒)。波特率为9600的话就是1s传输9600位的数据。


  单工:只能一个方向传输。
  半双工:可以两个方向传输,但需要分时复用。
  全双工:两个方向传输。

串口配置的一般步骤:

1.串口时钟使能:先使能GPIO时钟:

 RCC_APB2PeriphClockCmd();

2.GPIO端口模式设置 GPIO_Init(); ——模式设置为GPIO_Mode_AF_PP
 

GPIO_Mode_IN_FLOATING;

3.串口参数初始化
 

USART_Init();

5.开启中断并且初始化NVIC (如果需要开启中断才需要这个步骤)

NVIC_Init();
USART_ITConfig(0);


6.使能串口:

USART_ Cmd();


7.编写中断处理函数:

USARTX_IRQHandler();


8.串口数据收发:

void USART SendData();//发送数据到串口,DR
uint16 tUSART_ ReceiveData(;//接受数据,从DR读取接受到的数据


9.串口传输状态获取:

FlagStatus USART_GetFlagStatus(USART_TypeDef*USARTx,uint16_t USARTL_FLAG);
void USART_ClearlTPendingBit(USART_TypeDef*USARTx,uint16_t USART_IT;


作业如上

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/934271.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号