STM32-SPI 中断

  1. SPI协议

1.1 SPI总线介绍

SPI接口是Motorola (motorola | Smartphones, Accessories & Smart Home Devices)首先提出的全双工三线/四线同步串行外围接口采用主从模式(Master Slave)架构。

时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first);SPI接口有2根单向数据线,为全双工通信。

 SPI总线被广泛地使用在FLASH、ADC、LCD等设备与MCU间,要求通讯速率较高的场合。

1.2 SPI总线物理(拓扑结构)

SPI总共有4根总线,分别是:设备选择线(ss)、时钟线(SCLK)、串行输出数据线(MOSI)、串行输入数据线(MISO)。

(1)MOSI:主器件数据输出,从器件数据输入

(2)MISO:主器件数据输入,从器件数据输出

(3)SCLK :时钟信号,由主器件产生

(4)/SS:从器件使能信号,由主器件控制(片选)

1.3 SPI总线协议

起始信号:  NSS信号线由高变低,是SPI通讯的起始信号   (NSS是片选信号,使能信号)

结束信号:NSS信号由低变高,是SPI通讯的停止信号 

数据传输:SPI使用MOSI及MISO信号线来传输数据,使用SCK信号线进行数据同步。MOSI及MISO数据线在SCK的每个时钟周期传输一位数据高位在前低位在后,且数据输入输出是同时进行的。SPI每次数据传输可以 8 位或 16 位为单位,每次传输的单位数不受限制。

1.3 SPI总线协议

起始信号:  NSS信号线由高变低,是SPI通讯的起始信号   (NSS是片选信号,使能信号)

结束信号:NSS信号由低变高,是SPI通讯的停止信号 

数据传输:SPI使用MOSI及MISO信号线来传输数据,使用SCK信号线进行数据同步。MOSI及MISO数据线在SCK的每个时钟周期传输一位数据高位在前低位在后,且数据输入输出是同时进行的。SPI每次数据传输可以 8 位或 16 位为单位,每次传输的单位数不受限制。

1.4 SPI的四种通信模式

在SPI操作中,最重要的两项设置就是时钟极性(CPOL)和时钟相位(CPHA)这两项即是主从设备间数据采样的约定方式。

SPI有四种通信模式:

时钟极性CPOL : 设置时钟空闲时的电平

当CPOL = 0 ,SCK引脚在空闲状态保持低电平;

当CPOL = 1 ,SCK引脚在空闲状态保持高电平。

时钟相位CPHA :设置数据采样时的时钟沿

当 CPHA=0 时,MOSI或 MISO 数据线上的信号将会在 SCK时钟线的奇数边沿被采样

当 CPHA=1时, MOSI或 MISO 数据线上的信号将会在 SCK时钟线的偶数边沿被采样

数据线被采样,都是等待数据线变化稳定半个时钟周期进行采样。

通信模式的设置:

由CPOL及CPHA的不同状态,SPI分成了四种模式主机与从机需要工作在相同的模式下才可以正常通讯,因此通常主机要按照从机支持的模式去设置.

  1. LCD液晶显示屏

液晶的组成

某些物质在熔融状态或被溶剂溶解之后,尽管失去固态物质的刚性,却获得了液体的易流动性,并保留着部分晶态物质分子的各向异性有序排列,形成一种兼有晶体和液体的部分性质的中间态,这种由固态向液态转化过程中存在的取向有序流体称为液晶

物理特点

当通电时导通,排列变得有秩序,使光线容易通过;不通电时排列混乱,阻止光线通过

液晶显示屏内部构造

颜色深度

        ① R,G,B三基色组合形成各种颜色。

 ② 能显示的颜色数由RGB的数字信号的位数来决定

例如,以3位数字信号来表示颜色深度

RGB24 (24位真彩色)

R:8

G:8

B:8

所以他能显示的颜色深度就是2^8 *2^8 *2^8

STM32G030C8T6------->RGB16(RGB565)

颜色深度:2*5 2*6 2*5

让一个一个像素点显示正红色:1111 1000 0000 0000 0xf800

让一个一个像素点显示正绿色:0000 0111 1110 0000 0x07e0

  1. 点亮LCD显示屏

1)查看原理图

    底板原理图

2)修改引脚名,右击

3)输出速度改为高速

4)将驱动文件放到工程目录下

5)将执行文件加入到工程内。

6)添加完后先编译一次,再将对应头文件添加到主函数,调用函数即可

  1. 字符显示

英文字符和数字字符包括标点符号在font.h中已经生成好了字模,因此不需要再次取模。直接调用字符串显示函数即可

屏幕大小位128*128像素点

每个字符高16宽是8

//显示字符
//x轴、y轴、字色、底色、显示的字符内容
void Gui_DrawFont_GBK16(uint16_t x0, uint16_t y0, uint16_t fc, uint16_t bc, uint8_t *s)
{
    int i,j,k,x,y,xx;    unsigned char qm;    long int ulOffset;    char  ywbuf[32];

  1. 汉字显示

//入参:X轴,Y轴,字体颜色,背景颜色,显示字符,字符个数
void Gui_DrawFont_1616(uint16_t x0, uint16_t y0, uint16_t fc, uint16_t bc,const char tfont16[][32],int num)

6、图片显示

注意:

1)图片格式为128*128

2)点击保存,将文件保存成.h格式,并将生成好的.h文件添加到inc目录下

3)添加头文件

4)图片显示函数,将生成的图片数据数组首地址进行传递。

7、中断系统

7.1 基本概念

在处理器中,中断相当是对于突发事件的处理过程

当遇到内部/外部的紧急事件需要处理时,暂时中止当前程序,转而去处理紧急事件,

待处理完毕后,再返回被打断的程序继续向下运行。

暂停:保护现场

继续:恢复现场 

7.2 中断的意义

中断能够对突发事件进行及时处理,实现程序的并行化(时间片),进而提高CPU的工作效率。当发生突发事件时,比如外部触发的输入信号、定时器溢出等,中断会立即打断正在执行的程序,转而执行中断服务函数(ISR)来处理该事件。

为什么提高效率了?

因为CPU对于没有发生的事情是在不停的在轮询(询问有没有发生?)

中断能提高CPU的效率,同时能对突发事件做出实时处理。实现程序的并行化,实现嵌入式系统进程之间的切换

7.3 中断处理过程

中断处理过程

 进入中断 

  1. 处理器自动保存现场到堆栈里(堆栈——内存)
  2. {PC, xPSR, R0-R3, R12, LR}
  3. 一旦入栈结束,ISR便可开始执行(中断服务程序)

退出中断

  1. 中断前的现场被自动从堆栈中恢复

2.  一旦出栈完成,继续执行被中断打断的指令

  1. 出栈的过程也可被打断,使得随时可以响应新的中断而不再进行 现场保存

        R0 - R12 

        R13  栈指针 SP       : 指向栈顶地址

        R14 链接寄存器 LR :存放返回地址

        R15 程序计数器 PC :保存要执行的指令地址

示例

老师在上课 (正常执行的程序)

班主任叫我去开会 (中断信号)

暂停讲课、保存腾讯会议 (压栈保护现场)

根据会议室门牌号去开会 (根据中断向量表跳转到中断服务程序)

开会 (执行中断服务程序)

回到教室继续上课 (恢复现场返回主程序继续执行)

7.4 中断体系结构

注:中断和异常的区别

中断是微处理器外部发送的,通过中断通道送入处理器内部,一般是硬件引起的,比如按键中断、串口接收中断,而异常通常是微处理器内部发生的,大多是软件引起的,比如除法出错异常,特权调用异常等待。不管是中断还是异常,微处理器通常都有相应的中断/异常服务程序

7.5 NVIC 

嵌套向量中断控制器(Nested Vectored Interrupt Controller) 

 NVIC主要功能

负责管理中断 (CPU的小助理)

中断管理

支持异常及中断向量化处理

支持嵌套中断

1)管理中断事件(清除、挂起)

每一个中断事件都有执行禁止两种状态,由NVIC负责将中断事件标记为清除和挂起两种状态。 处理器的中断可以电平的形式的,也可以是脉冲形式的,这样中断控制器就可以处理任何中断源。

(当中断执行完成时,NVIC会将中断事件置为清除状态)

2)支持中断向量化处理(向量表)

      当中断事件发生时,处理器会将PC(程序计数器 PC :保存要执行的指令地址)设置为一个特定地址(中断事件入口函数的地址),进而跳转到中断服务程序去执行,这就是个中断(异常)向量,因为每一个异常源或者中断事件都会对应一个服务程序的入口地址,将这些地址按照优先级进行排布后,组成的一张表就称为中断(异常)向量表。

Cortex-M0内核可以处理15个内部异常和32个外部中断

STM32G030 只使用了6个内部异常和28个外部中断

向量化处理中断的好处:传统的处理方式需要软件去完成。采用向量表处理异常,M0处理器会从存储器的向量表中,自动定位异常的程序入口。从发生异常到异常的处理中间的时间被缩减。

3)支持中断嵌套  (优先级)

        要启用中断嵌套,首先需要在NVIC模块中配置中断优先级。每个中断都有一个相应的优先级,中断嵌套使得某个中断能够打断正在执行的较低优先级中断,从而及时响应更高优先级的中断请求。

3个固定的优先级,都是负值,不能改变。

四个可编程优先级,用两个bit位表示,00,01,10,11(0、1、2、3)

优先级数值越小,优先级等级越高。

    注意

      不同优先级的中断同时发生,优先处理优先级编号较小的那个(中断优先级)

      同样优先级的中断同时发生,中断向量号较小的那个优先响应(响应优先级)

7.6 EXTI

主要功能:产生中断、事件。

产生中断的目的:是将信号送入NVIC,进而运行中断服务程序,实现对应功能,是软件级。

产生事件的目的:是将采集到的一个脉冲信号送到某个外设,进而驱动某些设备做出动作,是电路级别的传输,是硬件级的。

在 STM32G030 中,共有最多 28 中断 / 事件线可用

GPIO 口连接到 16 个外部中断 / 事件线

外部中断流程框图

编号1是信号输入线,EXTI支持产生多达28个外部事件/中断请求。

编号2是边沿检测电路,用于监测上升沿或下降沿信号。

它会根据上升沿触发选择寄存(EXTI_RTSR)和下降沿触发选择寄存器(EXTI_FTSR)对应位的设置来控制信号触发。

边沿检测电路以输入线作为信号输入端,监测是否有边沿跳变,检测到有边沿跳变输出有效信号 1 给编号 3 电路,否则输出无效信号0。

编号3是一个或门电路,信号来源是外部事件或者软件中断/事件寄存器产生。

允许我们通过程序控制EXTI_SWIER就可以启动中断/事件线

编号4是一个与门电路,信号来源是编号3送来的信号和中断屏蔽寄存器的值,

如果中断屏蔽寄存器为0,也不会将信号送到NVIC,

只有编号3送来了中断信号且中断屏蔽寄存器允许产生中断,才会将中断信号送入NVIC.

接下来我们来看看红色虚线指示的电路流程。它是一个产生事件的线路,最终输出一个脉冲信号。

     产生事件线路是在编号3电路之后与中断线路有所不同,之前电路都是共用的。

编号5是一个与门电路,信号来源是编号3送来的信号和事件屏蔽寄存器的值,

如果事件屏蔽寄存器为0,不会将信号送到脉冲发生器,

只有编号3送来了信号且事件屏蔽寄存器允许产生事件,才会将信号送入脉冲发生器(编号6), 进而产生脉冲来控制外部设备做出动作。

这样我们可以简单的控制 EXTI_EMR 来实现是否要产生事件的目的

8.按键中断实验(外部中断)

          实验要求:STM32正常执行LED灯闪烁主程序,当检测到按键按下时处理中断事件,通过串口打印“HelloWorld!!!”

按键中断编程步骤分析

1、使能相应的时钟

2、配置GPIO管脚为中断功能

3、设置中断优先级

4、使能相应的中断

  1. 实现中断服务程序

打开原理图,找到按键的引脚

配置STM32CubeMX

信号设置为中断

勾选NVIC中断表中外部中断EXIT(4~15行)

确定为外部中断且为上升沿触发

代码编写

跳转进去之后发现中断服务程序没有功能,因此需要我们自己重写

重写中断服务程序

能否在中断用延时消抖解决按键抖动问题?

从本质上,原则问题不允许

从理论上,中断优先级的问题

9.串口中断实验(内部中断)

 发送完成中断实验

          实验要求:主程序发送一句字符串“HelloWorld”,当这条字符串发送完成时触发中断事件,调用中断服务程序发送“HelloHello

串口中断编程步骤分析

1、使能相应的时钟

2、配置GPIO管脚为串口功能

3、设置中断优先级

4、使能相应的中断

5、实现中断服务程序

配置引脚

将串口usart1设置为全局中断

中断模式下发送数据

主程序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/193482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

垃圾回收与内存泄漏

前端面试大全JavaScript垃圾回收与内存泄漏 🌟经典真题 🌟什么是内存泄露 🌟JavaScript 中的垃圾回收 🌟标记清除 🌟引用计数 🌟真题解答 🌟总结 🌟经典真题 请介绍一下 Jav…

P7 链表 链表头前方插入新节点

目录 前言 01 链表头插入数据 示例代码 02 指定节点前方插入新节点 测试代码 前言 🎬 个人主页:ChenPi 🐻推荐专栏1: 《C》✨✨✨ 🔥 推荐专栏2: 《 Linux C应用编程(概念类)_ChenPi的博客-CSDN博客》✨…

Web前端JS如何获取 Video/Audio 视音频声道(左右声道|多声道)、视音频轨道、音频流数据

写在前面: 根据Web项目开发需求,需要在H5页面中,通过点击视频列表页中的任意视频进入视频详情页,然后根据视频的链接地址,主要是 .mp4 文件格式,在进行播放时实时的显示该视频的音频轨道情况,并…

史上最全低代码平台盘点!三分钟盘点2023年顶尖二十个低代码平台!

史上最全低代码平台盘点!三分钟盘点2023年顶尖二十个低代码平台! 什么是低代码平台?2023年顶尖二十大低代码平台,哪个值得一试?低代码平台应该如何选择?本篇,我们将为大家盘点顶尖的十大低代码平…

分享一个简单的基于C语言嵌入式GUI界面切换代码

目录 前言 一、数据类型 二、页面调度 三、页面显示 四、视频展示 前言 最近在用LVGL写一个简单的UI界面,需要进行几个页面的切换,所以就自己写了一个简单页面切换代码,方便进行页面切换,同时使UI代码结构更加清晰。这个结构…

非常好的简历精选7篇

想要打造一份令人眼前一亮的简历,赢得招聘方的青睐?参考这7篇精选的“非常好的简历”案例!无论是应届毕业生还是职场人士,都能从中借鉴灵感,提升简历质量。让求职之路更加顺畅,轻松斩获心仪职位&#xff01…

【java毕业设计源码】基于SSM框架的在线智能题库管理系统设计与实现

该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等学习内容。 目录 一、项目介绍: 二、文档学习资料: 三、模块截图: 四、开发技术与运行环境: 五、代码展示: 六、数据库表截图&#xff1a…

智能优化算法应用:基于入侵杂草算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于入侵杂草算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于入侵杂草算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.入侵杂草算法4.实验参数设定5.算法结果6.参考…

c# OpenCV安装(一)

一 通过NuGet 安装四个拓展包 OpenCvSharp4、OpenCvSharp4.Extensions、OpenCvSharp4.runtime.win、OpenCvSharp4.WpfExtensions C#使用OpenCV的一些代码 需要加头文件 using OpenCvSharp; //为了使用opencv using Point OpenCvSharp.Point; //为了确定我们使用的poin…

Android HCI日志分析案例1

案例1--蓝牙扫描设备过程分析 应用层发起搜索蓝牙设备,Android 官方提供的蓝牙扫描方式有三种,分别如下: BluetoothAdapter.startDiscovery(); //可以扫描经典蓝牙和BLE两种。BluetoothAdapter.startLeScan();//扫描低功耗蓝牙,…

数据领域建设的五大方向

1.数据技术的发力点 数据汇聚技术包括5G高速光纤ipv6下一代互联网、卫星互联网、叠加互联网、区块链、标识、编码和解析等;数据处理技术包括云计算、边缘计算、分布式计算、大数据处理、AI分析、绿色低碳、数据空间、隐私计算、区块链、数据脱敏、数据沙箱等&#…

stm32 can滤波器接收指定的ID

CAN 文章目录 CAN一、配置1、对扩展数据帧进行过滤:(只接收扩展数据帧)CAN_FilterIdHigh:CAN_FilterIdLow:2、对扩展远程帧过滤:(只接收扩展远程帧)3、对标准远程帧过滤:(只接收标准远程帧)4、对标准数据帧过滤:(只接收标准数据帧)5、对扩展帧进行过滤:(…

【Erlang进阶学习】2、匿名函数

受到其它一些函数式编程开发语言的影响,在Erlang语言中,将函数作为一个对象,赋予其“变量”的属性,即为我们的匿名函数 或 简称 fun,它具有以下特性: (匿名函数:不是定义在Erlang模…

<DB2>《AIX服务器DB2数据库裸设备表空间扩容方案》

《AIX服务器DB2数据库裸设备表空间扩容方案》 1 表空间状态查看1.1 连接数据库(实例用户操作)1.2 查看表空间剩余(实例用户操作)1.3 查看所属表空间的容器属性(实例用户操作) 2 VG状态和LV状态查看2.1 查看…

leetCode 40.组合总和 II + 回溯算法 + 剪枝 + used数组 + 图解

给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用 一次 注意:解集不能包含重复的组合 示例 1: 输入: candidates [10,1,2,7,6,1,5], t…

基于51单片机的交通灯_可调时间_夜间+紧急模式

51单片机交通灯 1 讲解视频:2 功能要求3 仿真图:4 原理图PCB5 实物图6 程序设计:7 设计报告8 资料清单(提供资料清单所有文件):设计资料下载链接: 51单片机简易交通灯_可调时间_夜间紧急 仿真代…

LeetCode | 101. 对称二叉树

LeetCode | 101. 对称二叉树 OJ链接 在本函数里不好进行判断,我们另外定义一个函数来如果两个都相等为空,就返回true一个为空,一个不为空都不为空,就比较值然后递归1的左,2的右,1的右,2的左 bool _isSymm…

Ubuntu安装过程记录

软件准备 硬件 Acer电脑,AMD a6-440m芯片 64g优盘一个,实际就用了不到5g。 Ubuntu :官网 下载Ubuntu桌面系统 | Ubuntu 下载桌面版Ubuntu 22.04.3 LTS LTS属于稳定版 u盘系统盘制作软件 Rufus :Rufus - 轻松创建 USB 启动…

linux常用命令-grep命令与ps命令详解(超详细)

文章目录 前言一、grep命令介绍1. grep命令简介2. grep命令的基本语法3. 常用的grep命令选项 二、grep命令示例用法1. 在文件中搜索匹配模式的行2. 忽略大小写地搜索匹配模式的行3. 反转匹配,只打印不匹配模式的行4. 显示匹配行的行号5. 统计匹配的行数6. 打印包含匹…

创投课程研报专题课 | 如何写出高质量研报

协会邀请了来自GPTDAO的分析师——Will作为VC创投课程研报专题课的嘉宾,将于北京时间12月2日(周六)晚上21:00 PM-22:00 PM,与所有对Web3投资、创业心怀热忱的朋友一同探讨《如何写出高质量的研报》这个激动人心的话题。 浙江大学学生区块链协会&#xff…