19. ARM裸机开发(45道)***3***
3.I/O接口(17道)
3.1 GPIO口一般有哪三个寄存器?
以S3C2410为例,有控制寄存器、数据寄存器、上拉寄存器。
3.2 GPIO的输入输出模式有哪些?
答案:
(1)输入模式:浮空输入、带上拉输入、带下拉输入、模拟输入。
(2)输出模式:开漏输出、推挽输出、开漏复用输出、推挽复用输出。
解读:
浮空输入_IN_FLOATING | 浮空输入,可以做KEY识别。 |
带上拉输入_IPU | IO内部上拉电阻输入。 |
带下拉输入_IPD | IO内部下拉电阻输入。 |
模拟输入_AIN | 应用ADC模拟输入,或者低功耗下省电。 |
开漏输出_OUT_OD | IO输出0接GND,IO输出1则悬空,需要外接上拉电阻才能输出高电平。当输出为1时,IO口的状态由上拉电阻拉高,但同时IO口也可由外部电路拉低,可以通过输入数据寄存器读取电平变化,实现C51的IO双向功能。 |
推挽输出_OUT_PP | IO输出0接GND, IO输出1接VCC,读输入值是未知的。 |
复用功能的推挽输出_AF_PP | 片内外设功能(I2C的SCL,SDA)。 |
复用功能的开漏输出_AF_OD | 片内外设功能(TX1,MOSI,MISO.SCK.SS) |
总线接口 | 串/并 | 同步/异步 | 工作方式 | 速率 | 线路 | 距离 | 大小端 |
UART | 串行 | 异步 | 全双工 | 慢,最快只有1.5Mbps | 3线:RX、TX、GND | 远,RS-485可达1200m | 小端模式 |
USB | 串行 | 同步 | 半双工 | 快,USB3.0可达5Gbps | 4线:Vbus、GND、D+、D- | 近,不超过5m | 小端模式 |
SPI | 串行 | 同步 | 全双工 | 快,可达50Mbps | 3线或4线:SCLK、SIMO、SOMI、SS | 远,可达10m | 大端模式 |
IIC | 串行 | 同步 | 半双工 | 慢,最快只有3.4Mbps | 2线:SCL、SDA | 近,不超过30cm | 大端模式 |
(1)异步串行方式的特点:
①以字符为单位传送信息,相邻两个字符间的间隔是任意长;即字符内部各位同步,字符间异步;
②因为一个字符中的比特位长度有限,所以接收时钟和发送时钟只要相近就可以了。
(2)同步串行方式的特点:
①以数据块为单位传送信息,在一个数据块内,字符与字符之间无间隔;即字符内部各位同步,字符间也同步;
总线空闲状态 | SCL和SDA均为高电平,接上拉电阻。 |
启动信号(START) | 在SCL保持高电平期间,SDA由高电平被拉低。由主控器发出。 |
数据位传送(DATA) | 在SCL保持高电平期间,SDA上的电平保持稳定,低电平为数据0、高电平为数据1。用法:主控器和被控器都可发出。 |
应答信号(ACK) | 在SCL保持高电平期间,SDA保持低电平。IIC总线上所有数据都是以8位字节传送的,发送器每发送一个字节,就在第9个时钟脉冲期间释放SDA(高电平),由接收器反馈一个ACK。 |
非应答信号(NACK) | 在SCL保持高电平期间,SDA保持高电平。如果接收器是主控器,则它在收到最后一个字节后,发送一个NACK,通知被控器结束数据发送,并释放SDA(高电平),以便主控器发送一个STOP。 |
停止信号(STOP) | 在SCL保持高电平时间,SDA由低电平被释放(拉高)。由主控器发出。 |
3.6 SPI的四种操作时序分别是什么?
SPI的时钟极性CPOL和时钟相位CPHA可以分别为0或1,由此构成了四种组合:
3.7哪种总线方式是全双工类型?哪种总线方式的传输距离较短?
(1)UART、SPI是全双工类型。
(2)IIC、USB的传输距离较短。
(1)判断端口号:首先搜索计算机可用端口,然后逐个打开,分别定时1.5秒,有数据进来则认为是目标端口。
(2)波特率判断:将本机波特率分别设置为2400、4800、9600、19200、38600、57600、115200,每个波特率定时1.5秒,对收到的ASCII码进行分析,将小于等于127的认为是正常的字符,将大于127的认为是乱码,当正常字符数目大于等于10倍乱码数目则认为当前波特率为正确波特率,并终止往后搜索。另外,也可以通过示波器判断。
3.9串口如何发送浮点型数据?
可将多字节的浮点型数据分解成单字节逐个发送,接收后组合还原。
(1)使用共用体来分解
union { float f; unsigned long l; }data_TX; data_TX.f = 123.456;
(2)发送时发送4字节(小端模式,低位先发)
TX = (unsigned char)data_TX.l; // 低8位 TX = (unsigned char)(data_TX.l >> 8); TX = (unsigned char)(data_TX.l >> 16); TX = (unsigned char)(data_TX.l >> 24); // 高8位
(3)接收端也定义同样的结构体,并接收4字节数据
union { float f; unsigned long l; }data_RX; data_RX.l = RX; // 低8位 data_RX.l |= RX << 8; data_RX.l |= RX << 16; data_RX.l |= RX << 24; // 高8位
(4)最后data_RX.f == data_TX.f。
答案:
(1)UART是一种具有协议特征的收发器/接口/总线,也就是说它是一个按照特定协议来收发数据的硬件,它规定了数据按照什么格式和时序来传输。
(2)而TTL、RS-232、RS-485是三种不同的电气协议,是对电气特性的规定,作用于数据传输通路,但它并不包含对数据的处理方式。UART可以使用TTL电平,也可以使用RS-232、RS-485电平。
解读:三种电气协议的区别:
TTL(晶体管-晶体管逻辑电平) | 规定+5V(或>=2.4V)等于逻辑“1”,0V(或<=0.4V)等于逻辑“0”,噪声容限为0.4V。 |
RS-232 | 采用负逻辑传输,规定-5V ~ -15V等于逻辑“1”,+5V ~ + 15V为逻辑“0”,噪声容限为2V。 |
RS-485 | 采用差分传输,规定A线电平比B线电平高200mV以上时为逻辑“1”,A线电平比B线电平低200mV以上时为逻辑“0”。 |
(1)区别:
①抗干扰性:RS-485接口的抗干扰性比RS-232接口强,因为RS-485采用差分传输。
②传输距离:RS-485接口(1200m)的传输距离比RS-232接口(50m)远。
③通信能力:RS485接口在总线上允许连接多达128个收发器,而RS-232接口只允许一对一通信。
④传输速率:RS-485接口的最高传输速率为10Mbps,而RS-232接口为20Kbps。
⑤信号线:RS-485接口组成半双工网络需要两根信号线,组成全双工网络需要四根信号线;RS-232接口一般使用RXD、TXD、GND三根线组成全双工网络。
⑥电气电平值:RS-485接口规定A线电平比B线电平高200mV以上时为逻辑“1”,A线电平比B线电平低200mV以上时为逻辑“0”。RS-232接口规定-5V ~ -15V等于逻辑“1”,+5V ~ + 15V为逻辑“0”,噪声容限为2V。
(2)联系:
①都可通过DB-9连接器连接。
②均可采用屏蔽双绞线传输。
③都是串行通信。
④通信方式都是全双工(一般RS-485是半双工)。
(1)在数据位的两端添加了起始位、奇偶校验位、停止位等用于数据的同步和纠错。
(2)在接收端用16倍波特率对数据进行采样,取中间的采样值,很大程度上确保了采样数据的正确性。
3.13保证数据无串扰,参数设置正确,但是串口A传输float类型给串口B,总是出现错误,请问可能是什么原因?
可能是发送端和接收端的大小端不一致。
(1)MSB(Most Significant Bit):最高有效位,是指二进制中最高值的比特。
(2)LSB(Least Significant Bit):最低有效位,是指二进制中最低值的比特。
(1)异步通信(UART)和同步通信(SPI、IIC、USB等)。
(2)串行速度慢但占用资源少、线间干扰小;并行速度快但占用资源多、线间干扰相对大。
3.17 CAN总线接口相对于RS-232接口、RS-485接口的优点是什么?
(1)CAN总线接口相对于RS-232接口的优点是抗干扰能力强、传输距离远。它采用差分传输,内置CRC校验,传输可靠性强。
(2)CAN总线接口相对于RS-485接口的优点是能构成多主系统,同一时刻可以有两个或两个以上的设备处于发送状态,适用于实时性要求高的工控领域。
#offer比较##拼多多##滴滴#