姓名:吕红霞;学号:20011210203;学院:通信工程学院
转自>
背景:新版的树莓派中,蓝牙占用了UART串口,要使用串口就要关闭蓝牙,然后恢复GIOP 14\15口给UART使用
蓝牙关闭方式:
输入命令 sudo systemctl disable hciuart 禁用蓝牙
打开配置文件 sudo nano /boot/configtxt
在最后加上 dtoverlay=pi3-disable-bt
然后reboot,ls -l /dev如果能看到
那就是配置成功了。
接线的话参考上一篇文章 Raspberry Pi2/3引脚介绍
认识UART接口
UART详解---
简单的讲:(UART与COM)
嵌入式里面说的串口,一般是指UART口, 但是我们经常搞不清楚它和COM口的区别, 以及RS232, TTL等关系, 实际上UART,COM指的物理接口形式(硬件), 而TTL、RS-232是指的电平标准(电信号)
UART有4个pin(VCC, GND, RX, TX), 用的TTL电平, 低电平为0(0V),高电平为1(33V或以上)。
COM口是我们台式机上面常用的口(下图),9个pin, 用的RS232电平, 它是负逻辑电平,它定义+5 +12V为低电平,而-12 -5V为高电平
详细的说:
UART的特征
一般uart控制器在嵌入式系统里面都做在cpu一起,像飞思卡尔的IMX6芯片就是这样,有多个uart控制器。
引脚介绍 (COM口比较多pin,但是常用的也是这几个):
VCC: 供电pin,一般是33v,在我们的板子上没有过电保护,这个pin一般不接更安全
GND: 接地pin,有的时候rx接受数据有问题,就要接上这个pin,一般也可不接
RX: 接收数据pin
TX: 发送数据pin,我之前碰到串口只能收数据,不能发数据问题,经baidu,原来是设置了流控制,取消就可以了,适用于putty,SecureCRT
总结
1、串口、COM口是指的物理接口形式(硬件)。而TTL、RS-232、RS-485是指的电平标准(电信号)。
2、接设备的时候,一般只接GND RX TX。不会接Vcc或者+33v的电源线,避免与目标设备上的供电冲突。
3、PL2303、CP2102芯片是 USB 转 TTL串口 的芯片,用USB来扩展串口(TTL电平)
4、MAX232芯片是 TTL电平与RS232电平的专用双向转换芯片,可以TTL转RS-232,也可以RS-232转TTL。
5、TTL标准是低电平为0,高电平为1(+5V电平)。RS-232标准是正电平为0,负电平为1(±15V电平)。
6、RS-485与RS-232类似,但是采用差分信号负逻辑。这里略过不讲。
百度上这个文章总结的不错:
串口、COM口、TTL、RS-232、RS-485区别详解
其他
奇校验 (odd parity):如果字符数据位中"1"的数目是偶数,校验位为"1",如果"1"的数目是奇数,校验位应为"0"。(校验位调整个数)
偶校验 (even parity):如果字符数据位中"1"的数目是偶数,则校验位应为"0",如果是奇数则为"1"。(校验位调整个数)
串口进行通信的方式有两种:同步通信方式和异步通信方式
SPI(Serial Peripheral Interface:串行外设接口);
I2C(INTER IC BUS:意为IC之间总线),一(host)对多,以字节为单位发送。
UART(Universal Asynchronous Receiver Transmitter:通用异步收发器), 一对一,以位为单位发送。
现像:开了接收中断,然后不断进入中断,而且P_UART_Command2寄存器读取值为0x00f1,而 P_UART_Data 值为0x0000。
分析:如果出现这样的情况,首先确定问题的所在,另外一端的UART发送是否存在问题,UART传输通道是否正常?等…… 如除SPCE061A外的器件、外围都正常,则检查一下MCU的IO口设置状态,一般会由于IOB7与IOB10设置有误才导至问题的出现的;
解决:所以剩下的工作就是好好检查一下程序里面除了初始化程序外,是不是还有地方修改了IO的属性了?
现像:开或者没有开串行口发送使能时,对IOB口(特别是IOB10)进行输出 *** 作时,在PC端的接收程序中(串口测试程序)都可以收到一些串口数据,且多为0x00。
分析:这些问题与MCU无关,因为232的电平转换芯片没有使能端,所以,对IOB10口进行输出 *** 作时,特别是有高低电平的交叉输出时,也会把信号送到232的电平转换芯片中去,这样就送到了PC端的串行口,所以有时就会在PC端那边的串行口会接收到数据;
解决:所以当在用户的系统中会存在使用了UART也使用到IOB10口用作他用时,可以建议用户选用带使能的232电平转换芯片,或者通讯时采用数据包格式,同时作数据包的软校验处理。
现像:打开UART IRQ中断后,程序会不断进入UART IRQ中断。
分析:……
解决:
关于UART的IRQ使用方式,有以下几点需要注意:
1,一般我会建议在用UART IRQ中断时,初始化P_UART_Command1时只打开接收中断,而不打开发送中断;从教程或者DataSheet中可以得知,发送中断是由TxRDY信号触发的,而TxRDY信号的意义为:该标志位被置为“1”,表示发送器的数据缓存器为空,已准备好可以发送写入P_UART_Data单元的数据。问题就在这个解释里了,很多人没有注意到这个问题;串行口只要在闲置时,P_UART_Data寄存器里面是空的,肯定是随时准备好可以发送数据了,这时候TxRDY标志位应该为1的,也就会随时触发Tx IRQ中断(Tx中断打开时);所以就会出现打开串行发送、接收中断后,程序会不断地进UART IRQ中断里面去的现像了。所以建议在初始化串行口时,只打开Rx中断,而不打开Tx中断,当发送数据(需要用到Tx中断的话)后,再打开Tx中断,等全部数据发送完后,再关掉Tx中断,就不会出现这样的问题了。另外,这样的情况其实并不算是问题,本身MCU要发送数据就是可控的嘛!只要程序设计时考虑多一点就可以避免这样的麻烦了。
2,另外一点也是很重要的,关于Rx中断,其实很多人在做实验的时候关没有注意到,在避免第一种情况后,还是会出现不断进入UART IRQ中断的现像;这跟UART的寄存器设置没有太多关系,试一下,当有这样的现像时,把UART的Tx、Rx的管脚连上(当然前提是保证IO的设置是没有问题的),应该不会再有不断进入UART IRQ中断的现像。这个例子说明,在用UART IRQ中断时,要保证UART的通道有正确的连接,即IOB7、IOB10脚连到了UART的通讯通道上了(双机通讯连接也行、MCU和PC通讯连接也行,只要保证UART通讯管脚有效地连接上了且连对了),就可以避免这样的问题。
3,一般对UART IRQ应用的设置,我会如此建议:先设置好IOB的相应的端口,IOB7输出、IOB10输入——》设置正确的串行波特率——》打开Rx中断,而不打开Tx中断(原因前面已有述)——》使能发送、接收管脚——》读一次P_UART_Data,以清除之前的UART状态及错误——》再下面是用户自的程序了……。当然在用户的UART联IRQ中断里面要记得进中断后清中断标志了(读写P_UART_Data寄存器即可清除)。
PS:
unsigned int b;
P_IOB_Attrib |= 0x0480;
P_IOB_Dir |= 0x0400;
P_IOB_Data = 0x0000;
P_UART_BaudScalarLow = 0x0000;
P_UART_BaudScalarHigh = 0x0005;
以上就是关于UART串口通讯协议全部的内容,包括:UART串口通讯协议、FPGA 怎么实现UART串口和IIC口或SPI 通讯可以大概说一下吗、树莓派3B使用串口UART等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)