STM32学习(7)-NVIC中断,抢占优先级和响应优先级,中断寄存器和相对应的函数,串口通信原理,有关串口的寄存器和函数,串口通信实验

一.NVIC中断

1.STM32中断介绍

在这里插入图片描述
STM32F103的60个中断都包括哪些呢,可以参考《STM32中文参考手册》 9.1.2小节表55。如图所示:
在这里插入图片描述
在这里插入图片描述

2.中断优先级分组

STM32中断总共有0~4共5个组,通过SCB->AIRCR寄存器进行配置。如图所示:

在这里插入图片描述

然后在设置相应的抢占优先级和响应优先级。

3.抢占优先级和响应优先级的区别:

在这里插入图片描述
抢占优先级为0的高于抢占优先级为1的,抢占优先级0>1>2>3>4。
响应优先级同理。
在这里插入图片描述

4. 中断函数

在这里插入图片描述

4.1 中断分组函数:

在这里插入图片描述

入口参数还可以选择如下:

在这里插入图片描述

4.2 中断优先级设置相关寄存器

4.2.1 中断设置相关寄存器:

在这里插入图片描述

4.2.2 IP寄存器组

在这里插入图片描述

4.2.3 中断使能寄存器组 ISER[8]

在这里插入图片描述

4.2.4 中断失能寄存器组 ICER[8]

在这里插入图片描述

4.2.5 中断挂起/解挂控制寄存器组ISPR[8],ICPR[8]

在这里插入图片描述

4.2.6 中断激活标志位寄存器组IABR[8]

在这里插入图片描述

4.3 中断参数初始化函数:

在这里插入图片描述
在这里插入图片描述

5.NVIC总结

在这里插入图片描述
注意:(1) NVIC_Init()函数在misc.h文件中定义的。
(2) NVIC_Init()函数中的NVIC_IRQChannel参数在stm32f10x.h文件中。
(3) 中断服务函数在startup_stm32f10x_hd.s文件中。

二.串口实验

参考《STM32F1开发指南-库函数版本》5.3 usart串口文件夹介绍和第九章串口实验
《STM32中文参考手册》第25章 通用同步异步收发器

1. 通信知识

1.1 通信的方式

(1)并行通信 (2)串行通信

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
同步通信通过时钟CLK进行同步信号传输,而异步通信不带时钟同步信号,靠波特率进行互相约定。

在这里插入图片描述

1.2 STM32的串口通信基础

在这里插入图片描述

1.3 如何查找串口引脚呢

参考芯片数据手册

在这里插入图片描述

1.4 UART异步通信的特点

在这里插入图片描述

1.5 串口通信的过程

在这里插入图片描述
在这里插入图片描述
奇偶校验:奇偶校验就是指每次发送接收的每一帧数据加上校验码之后1的个数是奇数还是偶数。
奇偶校验参考链接
奇偶校验参考链接

1.6 串口框图

参考《STM32中文参考手册》第25章 通用同步异步收发器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. STM32 串口常用寄存器和库函数

2.1 常用的寄存器 - 参考STM32中文参考手册 25.6小节

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 串口常用的库函数

在这里插入图片描述

串口初始化函数

在这里插入图片描述

串口初始化的结构体:

在这里插入图片描述

3.串口配置的步骤:

在这里插入图片描述

在这里插入图片描述

按照上面的串口配置步骤,编写相应的代码。

在这里插入图片描述
在这里插入图片描述

4. 串口通信结果

在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32中,串口中断优先级是通过设置NVIC(Nested Vectored Interrupt Controller)的优先级寄存器来实现的。STM32系列微控制器的NVIC具有分优先级和子优先级两个级别。 首先,要设置分优先级。分优先级决定了中断优先级方式,可以设置为0-4,其中0表示没有分。分优先级位数越多,可设置的中断等级就越多,但子优先级的位数就越少。你可以根据你的需求选择适当的分优先级。 其次,设置子优先级。子优先级决定了同一中断优先级顺序。子优先级的个数由分优先级决定,例如,当分优先级为2时,每个有2个子优先级。 在代码中,你可以使用如下函数来设置串口中断优先级: ```c NVIC_InitTypeDef NVIC_InitStructure; // 设置分优先级 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_X); // 配置串口中断 NVIC_InitStructure.NVIC_IRQChannel = USARTx_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = PreemptionPriority; NVIC_InitStructure.NVIC_IRQChannelSubPriority = SubPriority; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); ``` 其中,`USARTx_IRQn` 是串口中断通道,`PreemptionPriority` 是抢占优先级,`SubPriority` 是子优先级。你可以根据你的需求设置不同的优先级等级。 请注意,在设置中断优先级时,抢占优先级越低,中断优先级越高。同一中断,子优先级越低,优先级越高。 希望这个回答对你有帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值