搜索
查看: 1655|回复: 0

[分享] 【细说STM32】之五——说说串口

[复制链接]

该用户从未签到

193

主题

194

帖子

0

蝴蝶豆

金牌会员

最后登录
2021-3-12
发表于 2021-3-12 16:12:10 | 显示全部楼层 |阅读模式
【细说STM32】之五——说说串口

【前言】
首先,串口对每一个做硬件和嵌入式软件的人来说,就是一个必备的工具,调试一个带MCU或者CPU的系统。我们在调试的过程中,一般第一件事情:GPIO点灯。这个我们前期内容已经介绍过了。
在完成GPIO点灯之后,一般我们就希望能够实现串口打印的功能,便于我们将一些寄存器信息打印出来便于调试。

       由于我个人的特殊经历,对于我来说,串口这东西,仔细写起来,可以写一本书!应该不少于200页。
       2008年我刚进华为工作时,碰到了一个特殊的历史时期,嵌入式领域群雄逐鹿。

1、Intel、AMD高调宣称X86系统进入嵌入式领域,要占领PowerPC的市场。(后来Intel也做到了,通用服务器占领了几乎所有电信核心侧的设备——刀片服务器、机架服务器)。
2、当时,MIPS、ARM、PowerPC还难分伯仲,不过多核ARM不成熟,无法在电信领域广泛应用。MIPS由于其优异的性价比和搞性能展露头角,慢慢由于其较差的质量表现而偃旗息鼓。
3、PowerPC,随着来着其他处理器的压力,也开始推出多核处理器。

       我当时的工作是参与X86处理器作为嵌入式的电路开发。当时碰到一个问题:传统X86作为PC机已经演进得非常成熟的架构。PC的硬件结构与嵌入式SoC有很大的区别。

2.1.jpg

CPU下面是北桥负责高速外设、北桥的南面(下面)是南桥负责低速接口外设、然后还有一个SIO负责更低速的外设。
SIO全称叫Super  I/O。

超级输入输出芯片(SIO)一般位于主板左下方或者左上方。主要使用的芯片有Winbond、ITE,它为主板上的标准I/O接口提供控制处理功能。这里所说的“超级”是指它集成了PS/2键盘、PS/2鼠标、串口COM、并口LPT接口等处理功能,而这些接口都是计算机中的慢速I/O设备。它们全部位于主板后部右边。它的主要功能包括负责处理从键盘、鼠标、串行接口等设备传输来的串行数据,将它们转换成为并行数据,同时也负责并行接口、软驱接口数据的传输与处理。SuperIO是通过一个类似于精简的PCI总线,叫做LPC总线与南桥进行连接的。

2.2.png

如此复杂的硬件结构,也是因为Intel强大的发货量,形成自有体系和标准。

所以在传统的PC机的主板上带一个RS232串口的,都是通过SuperIO实现的。X86上也是通过固定的地址去访问
而我们熟悉的ARM、不管是Cortex-M、还是Cortex-A都是一颗MCU、CPU都带了串口——UART;
从iBox选择的STM32F103的MCU的结构框图上面,我们可以看到有一堆UART、USART。

2.3.jpg

然而,在我当时面对的嵌入式X86的系统的设计需求,不需要并口、PS2、硬件监控、FDC、

H/W Monitor:一个应用程序读出所有计算机访问硬件传感器的测量值。

FDC:提供了一个主处理器和软驱之间的接口(软驱——看懂的人暴露年龄了)

2.4.jpg

Parallel port:并行端口(SPP),双向并行端口(BPP),增强型并行端口(EPP),扩展功能并行端口(ECP)四种模式。通过DIR可以控制它的输入/输出模式
2.5.jpg
认识上图的人再次暴露年龄
KBC:电路提供的功能包括一个键盘和一个PS2鼠标。控制器从键盘和鼠标接受串行数据,检查校验后将这些数据输出到其输出缓冲区。从它的读写命令中可以了解一些基本设置。
2.6.png
UART:终于说到我们的本文的主角UART、即串口了。在老式的台式电脑或者笔记本上,其实都会有RS232电平标准的UART:

2.7.jpg

关于串口的各种电平标准,我们前期有发布过相关的内容:
UART、RS-232、RS-422、RS-485
SuperIO的UART输出的一般也是TTL电平,还需要接到RS232芯片,再接到DB9接口

2.8.jpg

X86系统的地址的寻址空间还有点复杂:除了内存空间(Memory)、还有IO空间。
IO空间是在X86开发时,串口这些低速的外设是用IO空间进行访问和读写的:
由UARTDevice Configuration Registers可知,UART1~UART4的基址分别是03F8H,02F8H,03E8H,02E8H。
GPIO:通用管脚
ACPI:ACPI是控制电脑电源的系统
这些对于传统的由PowerPC实现的电信嵌入式系统来说,除了串口,其他功能不是需要的;同时,原来的一些NorFlash、寄存器、传感器 数据,需要通过MPI接口进行访问,而这些都是SuperIO芯片不能实现的。
另外由于SuperIO的功能多,所以尺寸大,管脚也多。

2.9.jpg

所以在当时的设计需求里面,使用一个SuperIO并不合适。所以选择一个CPLD实现LPC接口控制UART接口。
由于我是从事过这么一个工作,所以对UART的工作过程特别熟悉。而且,我们一开始按照自己的想法,自定义了很多寄存器,并且地址是按照自己想法去设计的,结果:商业软件windows、商用linux无法直接识别到串口。后来又改回基址:03F8H,02F8H,03E8H,02E8H这几个地址。

我前言还没写完就累了。。。。
下次继续跟大家聊串口。

文章出处: 硬件十万个为什么

回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-25 09:55 , Processed in 1.163974 second(s), 32 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表