【RPi树莓派使用指南】树莓派串口通信介绍

  版权信息:
● 本博客使用CC 3.0协议,转载请保留该信息。
● 原文作者: 戴晓天 @ 云飞机器人实验室
● 原文地址: 【RPi树莓派使用指南】树莓派串口通信介绍

树莓派的外部接口中含一路UART串行接口,利用该接口可以实现树莓派与Arduino、GPRS模块、GPS等其他外部系统的对接。

由于这一路串口兼做Linux的控制台输出口,所以在使用前必须先将调试输出功能关闭,方法如下:

1. 去除Kernel的启动信息

/boot/cmdline.txt 中,去除 parameterconsole=ttyAMA0,115200,并保存;

2. 去除Kernel的调试信息

同样在 /boot/cmdline.txt 中,去除 kgdboc=ttyAMA0,115200,并保存;

3. 关闭登陆提示

在 /etc/inittab 中去除 T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100,保存。

经过以上三步,就可以正常使用串行口了 (对于树莓派3,因为原生串口与蓝牙模块共用一组UART,还需要禁用蓝牙)。

(*)注意,因为树莓派与Arduino的串口电平不一致,必须使用电平转换芯片,或串联电阻限流,否则有可能损坏树莓派IO口!

编程时可以使用C语言以文件形式操作串口,也可以利用python的 python-serial 库进行编程。

这里以C语言为例,贴出示例代码:

<br />
#include &lt;unistd.h&gt;<br />
#include &lt;sys/types.h&gt;<br />
#include &lt;sys/stat.h&gt;<br />
#include &lt;fcntl.h&gt;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;string.h&gt;</p>
<p>int main(int argc, char *argv[])  {<br />
	int fd, len;<br />
	fd = open(&quot;/dev/ttyAMA0&quot;, O_RDWR, S_IRUSR | S_IWUSR);<br />
	char temp;</p>
<p>	while(1)  {</p>
<p>		len = read(fd, &amp;temp, 1);</p>
<p>		if (len &gt; 0)  {<br />
			write(fd, &amp;temp, 1);<br />
			printf(&quot;%c&quot;, temp);<br />
		}<br />
		else  {<br />
			usleep(10);<br />
		}<br />
	}</p>
<p>	close(fd);</p>
<p>	return 0;</p>
<p>}<br />

该代码从串口中接收一个字符,接收成功后将该字符打印在控制台上并通过串口回发。

【修订历史】

v1.2   09/12/2014   调整了文字版式,增加了串口电平不一致的说明。
v1.1   09/11/2014   调整了代码的结构,增加了对代码的说明。

%d bloggers like this: