注明出处:http://www.cnblogs.com/einstein-2014731/p/5551846.html
使用C语言控制树莓派3B的串口,实现使用串口收发数据的目的。之前以为这个串口是被默认配制成serial控制树莓派的模式,
其实安装最新的NOOBS后是默认的serial0,而我们用的是ttyAMA0,还有的说这个和Pi3的板载蓝牙冲突,两者不能同时使用,
对此目前还没试过两者全开的情况。如果两者不能同时使用岂不是很坑爹。
【1】 首先查看 /boot/overlays/ 目录下有没有 pi3-miniuart-bt-overlay.dtb 这个
文件,如果有,那么就是已经把硬件串口重新分配给了GPIO。
然后查看下 /boot/cmdline.txt这个文件,我的内容如下:
otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait |
可以看到console=serial0 用的是serial0 控制模式并非ttyAMA0。这里也不要改
【2】安装wiringPi ,前面已经提到过,安装之后查看GPIO的引脚分配。引脚图如下:
【3】按照图连线,TxD也就是8脚接在MAX232的RX上RxD接在TX上,将TTL电平转成RS232电平使电脑可以识别。
【4】eclipse中编写代码
#include <wiringSerial.h> int main(void) { int fd; if((fd = serialOpen ("/dev/ttyAMA0",9600))<0) { printf("serial err\n"); } while(1) { UartBuff[0]=serialGetchar(fd); if(UartBuff[0]==‘a‘) { serialPutchar(fd,UartBuff[0]); } sleep(0.5); } return EXIT_SUCCESS;
首先从串口接收数据,然后如果接收的是字符a,那么在把接收到的a发回去。
WiringPi关于串口函数如下,可以按照需求使用。
extern int serialOpen (const char *device, const int baud) ; extern void serialClose (const int fd) ; extern void serialFlush (const int fd) ; extern void serialPutchar (const int fd, const unsigned char c) ; extern void serialPuts (const int fd, const char *s) ; extern void serialPrintf (const int fd, const char *message, ...) ; extern int serialDataAvail (const int fd) ; extern int serialGetchar (const int fd) ;
时间: 2024-10-24 23:45:26