一、什么是串口?
简单的说就是一个通讯方式,MCU与MCU通过串口通信可以实现数据的传输,MCU跟电脑通过串口通信可以实现打印调试。
二、连接方式
TxD代表串口的输出口,RxD代表串口的接收口
当两个MCU通过串口相连时,芯片1的TxD输出,芯片2的RxD接收数据,故芯片1的TxD引脚接芯片2的RxD。同理,芯片1的RxD接芯片2的TxD。串口之间采用的是TTL通信,所以直接连上就好了。
当MUC串口跟电脑连接时,连接方式也是一样交叉连接,TxD连另外设备的RxD。但是一般电脑留出给用户的接口是封装了,采用的是RS232接口。而RS232一般为9针,且所采用的电平方式是RS232电平。两者需要通信就需要进行电平的转换。
芯片串口和rs232的电平标准是不一样的:
现在市面上有很常见的USB转串口的,自带TTL电平转换电路,所以一边只需插电脑,一边交叉连接RX,TX,接VCC和GND就好了。
三、串口的功能框图
上面的图,抽象成4个模块。
1.接口引脚(输入输出的接口);
2.串口通信时读写操作的寄存模块(数据流经(存储)的过程);
3.发送接收控制器的模块(根据定好的协议,波特率和寄存器状态来控制数据寄存器的操作);
4.波特率发生器模块(产生时钟,提供给控制器来控制发送和接收);
四个模块,各司其职。
接收数据,读数据大致过程:
数据从RX接口传过来,经过IrDA SIR编解码模块(串行红外协议,串口可以连接红外发生器,要使能红外模式才有用),当控制器使能接收,就开始去在RX线上搜索起始位。找到后把数据放进接收移位寄存器。接收完成后,将接收移位寄存器上的数据传送给接收数据寄存器,最后通过总线传给MCU。
(接收过程都在接收控制器掌握之中)
写数据,发送数据大致过程:
MCU通过总线下发指令写数据到发送数据寄存器,当写完后,将发送数寄存器上的值一位一位的传给发送移位寄存器 。当控制器使能发送后,把数据通过Tx发送出去。
(发送过程在发送控制器掌握之中)
四、通信的协议
现在已经知道数据是通过TX发送,通过RX接收,那么数据的格式又是怎样的呢?
(1)起始位:当未有数据传送时,会一直处于逻辑‘1’。当发送逻辑‘0’时代表开始传送数据;
(2)数据位:紧接着起始位的是数据位,在stm32上数据位的个数可以有8位或9位来构成字符,根据控制寄存器USART_CR1的bit12(M位)来选择。数据位通常采用ASCII码,从最低位开始传送,靠时钟定位。
(3)奇偶检验位:校验方法有奇校验(odd)、偶校验(even)、0 校验(space)、1 校验(mark)以及无校验(noparity)。
奇校验:要求有效数据和校验位中“1”的个数为奇数 ;
偶校验:与奇校验要求刚好相反,要求帧数据和校验位中“1”的个数为偶数 ;
0/1校验:不管有效数据中的内容是什么,校验位总为0或者1。
(4)停止位:它是一个数据结束的标志,其为一个高电平逻辑‘1’。而逻辑‘1’持续的时间不固定,可以是1位,1.5位。2位的高电平。可以选择停止位的时长,原因是为了有更好的容错性。每个设备都有各自的时钟,而时钟之间难免就会有差异不同步,而前面数据位都是固定时长的,停止位不只是代表传输的结束,也提供计算机校正时钟的机会。停止位的位数越多,对时钟同步的差异有更好的容错性,但不好的是整体传输的速度就会变慢了。
五、补充
1.知道了串口的原理,其实是可以用普通的IO口去模拟串口来实现通信的。相对于直接使用串口硬件电路,
好处是:节省成本(毕竟少了一个硬件电路);IO较多时可以使用IO模拟串口而不需要再加一个硬件电路来实现串口通信;
但缺点是:会占用CPU的资源。使用IO模拟串口时,CPU需要根据预设的时钟定时往IO口输出高低电平模拟串口发送的数据帧。而串口硬件电路只需CPU去寄存器读数据即可,而移位和数据传输操作可由硬件电路自动实现,更多释放CPU的性能;
参考链接:https://blog.csdn.net/qq_38410730/article/details/79887200
https://www.cnblogs.com/ChurF-Lin/p/10793111.html