TA的每日心情 | 奋斗 2018-10-12 08:54 |
---|
签到天数: 1 天 连续签到: 1 天 [LV.1]初来乍到
|
使用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) ;
作者:沧海一粟 |
|