前言
关于赛元单片机触摸的那篇文章确实帮助到过一些网友,后来有网友私信说赛元单片机的三合一串口功能遇到了问题,考虑到我之前的项目中用到过这个串口,也调通了,便想写下这篇文章,目的是帮助遇到问题的网友,以及记录学习的过程。
所用单片机型号:SC92F8463B(同系列的都可以参考本篇文章),主频:12Mhz
之前用过STM32F103C8T6的单片机,在那次的使用经历中,第一次了解并学习到了串口的使用方法,当时的项目中,参考的是原子哥的示例代码进行串口的收发,后面测试的过程中,发现串口功能会影响到其它的功能。在老工程师的指导下,才了解到,原子哥的串口发送方式是不太适用于工作中的项目的,原因也很简单,以阻塞的方式发送数据帧,再说直白一点,通过while()查询标志位以此完成数据的发送。
因此,我便想先介绍一种不一样的数据发送方式!
中断的方式发送数据
使用串口时,经常会用到以中断的方式接受数据,但很少使用以中断的方式发送数据,网上相关的资料也很少。但是这是一种非常好的方式,特别是在实际的工作中,会更加深刻的体会到这一点。而且不论是51单片机还是基于ARM的单片机,我所使用过的单片机都能以中断的方式发送数据。
先来看看SC92F846XB的规格书
PS:这里我截的是UART0的相关寄存器,而不是三合一串口的,因为三合一串口没有解释的这么清楚,但是我在实际使用时,发现三合一串口和UART0一样,都没什么区别,一样有发送中断的功能,只是寄存器不一样而已。
先看第一幅图中红框里的内容:发送和接收完成时可产生中断RI/TI,该中断标志需要软件清除。
接收就不说了,用过串口的都清楚这个方式,主要说发送,我来大致描述一下以中断发送数据这个过程: