改天把图和数据传上来了 再对着图分析 各个UART中的各个概念
文件弄回来了 原始的是CSV格式的 原文件 放在Dbank 数据银行上
这个是示波器一段的图 上面的数据(原文件)就是这段的
Y的坐标单位是 电压值 V
X的单位是 时间 S 都是几十uS的 从这个可以分析出来 是多大波特率的
UART的格式 可以通过程序设置 有些会在停止位之前有一个奇偶校验之类的 停止位也不一定只是一个单位大小 可以设置为1、1.5、2等
中间的数据位长度也可以设置位 6 7 8 位等
还有数据的传输顺序 我这个是LSB先出的 所以可以看出
第一个数据 01010101 反过来就是10101010 =0xAA
第二个10101010 反过来01010101 0x55
第三个11001011 反过来 11010011 0xD3
第三个 11010000 反过来 00001011 0x0B
对着示波器 分析一遍之后 没错就是这样的 就是传的这些 也就是 数据和实际传输的信号 很好的对应上了
这个信号 是TXD 与 GND 之间的电压信号 此时 RXD与GND之间 一直为高电平电压值
这就是 UART : Universal Asynchronous Receiver/Transmitter,通用异步接收/发送 异步 没有时钟 接受端得有相应的采样时钟 否则会乱的
对于波特率的问题 这份数据有记录时间(具体精确的时间要看数据表) 好像记得在通信里面有码元这个概念 这里就是1bit 波特率=1/(1bit的时长) 这份数据1bit的时长≈8.6*10^(-6)s 也就是8.6us 1/8.6us =116279.06976744Hz 也就是115200的波特率了 因为那个8.6us的时间是估计的 而常用的波特率有这么些:看图片吧
也就是1200 1800 2400 4800 7200 9600 14400 19200 38400 57600 115200 128000 还有一些
115200 原来以为速度还挺快的 用示波器看了之后 我再运行了一段代码 输出两个引脚信号 来看时间 发现当运行一段不短的代码之后串口才发完3、4个码元(不是byte哦) 天哪 算一算 如果发16byte的数据 总共16*10(1bit起始位+8bit数据位+1bit的结束位)=160个码元的时间 160*1/115200=0.0013888888888889 也就是1.38ms 有时候中断都不知道发生多少次了 肯定 这也是相对的
UART里面还有一个经常提到的 RS232 这是一种标准(协议 ) 就像说市电一样的 就知道是220V RS-232 就是把TTL(0~5V) 转换到10+V的电压 提要电压 可以增强抗干扰的能力 增加传输距离
一般用芯片来实现 MAX232 很典型 工作电压5V 输出有12V左右 和输出的负载有关吧 例如TTL的逻辑1 232对应的就是 负10几V 0对应的就是10+V 就是一个变换 变换后一般用9针的接口线 工程应用上就是这样的 用到3根线 2、3、5 收发地