其实单片机中的串口和中断问题就像设定使碗接到10滴水就溢出
其实单片机中的串口和中断问题就像设定使碗接到10滴水就溢出
///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像黑色字体加我地球呺也能领取哦。最近比较闲,带做毕设,带学生参加省级或以上比赛///在学习单片机的过程中,我们经常会发现中断、串口是学习的难点,对于初学者来说,这几部分的内容是很难理解的。但是我个人觉得这几部分内容是重点,如果在一个学期的课堂学习或者自学中没有理解这几部分内容,那就等于还没有掌握51单片机,那更谈不上单片机的开发了,我们都知道在成品的单片机项目中,有很多是以这几部分为理论基础的,万年历是以定时器为主的,报警器是以中断为主的,联机通讯是以串口为主的。
在这几部分内容中,计数器/定时器对于初学者说很容易搞混淆,下面我将对这方面的内容结合自己的学习经验来讲一下。
记数器和定时器是相同的,他们都是对单片机中产生的脉冲进行计数,只不过计数器是单片机外部触发的脉冲,定时器是单片机内部在晶振的触发下产生的脉冲。当他们的脉冲间隔相同的时候,计数器和定时器就是一个概念。
在定时器和计数器中都有一个溢出的概念,那什么是溢出了。我们可以从一个生活小常识得到答案,当一个碗放在水龙头下接水的时候,过了一会儿,碗的水满了,就发生溢出。同样的道理,假设水龙头的水是一滴滴的往碗里滴,那么总有一滴水是导致碗中的水溢出的。在碗中溢出的水就浪费了,但是在单片机的中溢出将导致一次中断。
在定时器计数器中,我们有个概念叫容量,就是最大计数量。
把水滴比喻成脉冲,那么导致碗中水溢出的最后一滴水就是定时计数器溢出的最后一个脉冲。
在各种单片机书本中,在介绍定时计数器时都讲到一个计数初值,那什么是计数初值呢?在这里我们还是假设水滴碗。假设第一百滴水能够使碗中的水溢出,我们就知道这个碗的容量是100。
举例:我如何才能使碗接到10滴水就溢出呢?我可以想象,如果拿一个空碗去接水,那么还是得要100滴水才能溢出,但是如果我们拿一个已经装有水的碗去接,那就不用100滴了。
类似这种引起硬件中断冲突的问题,通常是代码不良问题。中断处理占用时间太久,导致其他中断异常。比如,我见过的糟糕的代码,是在中断里用CPU延时的。
硬件中断要求快进快出,一般不要在中断中处理实际业务。
比方说,串口接收中断中,只处理将数据加入缓存,然后置标志位或发信号量方式通知主程序或任务进行数据解析。定时中断也是如此。除非进行I/O操作,都应采用通知方式处理业务。
少数情况下,业务时序要求特别高的,那也应该采用在硬中断中开启软中断方式,来处理业务。这样优先级会低于所有的硬中断,不会影响其他中断触发,又保证业务实时处理。
Stm32f407已经非常强悍了,不用怀疑处理器会有问题。我曾经的一个407应用,几乎开启了所有的外设,以太网,USB,串口,SPI,I2C,Camera,外挂液晶屏,还跑一个很耗处理器的算法,一点没问题。
1,波特率调低
2,定时器调长
3,中断里面少干一点活,需要干的活弄成队列缓冲好到主函数中去处理。
要坚信一点,无论优先级高低,所有代码都有被调用的机会。串口中断,定时器中断,CPU代码,都是被同时调度。
如果偏监控,最好不要用定时器。我用STC的8位机也遇到过类似问题,定时器运转的太快,导致外部中断响应的非常不流畅。这个应该是业务逻辑和程度架构问题,应该从程序框架从新设计……
其实单片机中的串口和中断问题就像设定使碗接到10滴水就溢出相关推荐
- STM32F103ZE单片机中FSMC Bank2~4中断(INT2~3和INTR引脚)的使用
在FSMC中,INT2~3和INTR引脚是三个外部中断,可高电平触发(EXTI没有的功能).上升沿或下降沿触发.中断引脚分别是PG6.PG7和PF10.不打开相应的FSMC Bank(FSMC_PCR ...
- 单片机中常用的串口通信协议帧
单片机中常用的串口通信协议帧 前言 一.单片机串口简介 二.常用的通信协议类型 1.没有格式 2.帧头帧尾+数据 3.帧头帧尾+数据+附加功能码 4.帧头帧尾+数据+附加功能码+目标地址 5.帧头帧尾 ...
- 89C51单片机中的中断系统
89C51单片机中的中断系统 对于在单片机中的学习,中断系统是一难点,如果中断系统没有理解透彻,51单片机的学习就算是失败的. 首先,举例说明下什么是中断. eg.当你在家正在吃着爆米花,看着电视,突 ...
- STM32单片机串口空闲中断+DMA接收不定长数据
在上一篇文章STM32单片机串口空闲中断接收不定长数据中介绍了利用串口空闲中断接收不定长数据,这种方式有一个问题就是串口每接收到一个字节就会进入一次中断,如果发送的数据比较频繁,那么串口中断就会不停打 ...
- 【串口发送中断】基于赛元单片机使用三合一串口的UART功能
文章目录 前言 中断的方式发送数据 代码示例 准备工作 宏定义及全局变量 初始化 中断服务函数 ==发送逻辑函数== 启动发送函数 总结 前言 关于赛元单片机触摸的那篇文章确实帮助到过一些网友,后来有 ...
- STM32单片机串口空闲中断接收不定长数据
在使用单片机的串口通信功能时,常用的接收数据方法是通过固定的字节数来判断一帧数是否发送完成,或者是通过固定的结束标志位来表示一帧数据发送完成.但是有时候会遇到发送的数据长度不固定,也没有固定的结束标志 ...
- c51语言中 如何定义一个中断服务子程序,51单片机中断服务子程序的设计
中断系统的运行必须与中断服务子程序配合才能正确使用.设计中断服务子程序需要首先明确以下几个问题. 中断服务子程序设计的任务 中断服务子程序设计的基本任务有下列4条: (1)设置中断允许控制寄存器IE, ...
- 51单片机中串口波特率的计算方法详解
首先,波特率并不是指每秒传送多少个字节,而是指每秒能够传送多少个二进制.举例:波特率为9600代表每秒能够传送9600个二进制,而一个字节=8个二进制. 那么,串口是按照什么时间标准来发送数据的? 其 ...
- 单片机非阻塞串口中断收发数据
下面的程序使用 CH32V103C8T6评估板测试没有问题,使用中断完成了串口的非阻塞式收发,编程思路参考了51单片机非阻塞串口中断收发数据 usart_buf.h /** usart_buf.h** ...
最新文章
- 零基础学Python:使用type、metaclass动态创建方法和属性的详细用法
- java 4字节字符_java 替换四个字节的字符 '\xF0\x9F\x98\x84\xF0\x9F)的解决方案
- XML 命名空间以及它们如何影响 XPath 和 XSLT (Extreme XML)
- Nginx monitor
- lsattr/chattr
- 多媒体计算机是多媒体教室的核心部件,浅析多媒体教室的设备配置
- 极限3秒钟,闪存能作什么?
- 解决Visio和office365安装兼容问题
- Oracle PeopleSoft 登录,peoplesoft不能登录DB解决方法
- 浩子CHS工作室成立
- 情商高的人所看透的四种人生真相
- ElasticSearch 高级查询语法
- 俄罗斯方块游戏开发 ——图形化编程java swing 项目
- 数据结构实验——哈夫曼编码
- 什么是JAVA中的强制类型转换
- DocuCentre SC2020 打印机连接
- mpu9250磁力计校准 mpl库数据校准
- 泛读论文:Person-reID 行人重识别合集
- Java:一般数据结构
- Qt6.6预览版在线安装(windows)