做文学网站算不算开公司,easy ssl wordpress,wordpress 知言,湘潭网站建设优化技术一、串口说明
莓派3B上UART串口位于GPIO的8脚和10脚#xff0c;分别为GPIO8Tx#xff0c;GPIO10Rx。在连接外部接口时#xff0c;需要交换接口#xff0c;即GPIO8连接到外设的Rx#xff0c;GPIO10连接到外设的Tx。Rpi3的接口如下#xff1a; Rpi3B的GPIO8和GPIO10该串口…一、串口说明
莓派3B上UART串口位于GPIO的8脚和10脚分别为GPIO8TxGPIO10Rx。在连接外部接口时需要交换接口即GPIO8连接到外设的RxGPIO10连接到外设的Tx。Rpi3的接口如下 Rpi3B的GPIO8和GPIO10该串口不能直接用Rpi3B包含两组串口一组硬串口ttyAMA0和一组软串口ttyS0硬串口就是GPIO8和GPIO10系统默认分配给了蓝牙设备查询设备外设智能看到ttyS0。因此需要将硬串口释放出来。
二、ttyAMA0硬串口配置
查看串口配置情况 ls -l /dev
找到serial看它映射的是哪个设备。有可能是显示的一个有可能是两个。
1、关闭ttyAMA0服务
sudo systemctl stop serial-gettyttyAMA0.servicesudo systemctl disable serial-gettyttyAMA0.service
2、删除控制台串口输出
sudo vi /boot/cmdline.txt 删除语句 consoleserial0,115200变成如下
dwc_otg.lpm_enable0 consoletty1 root/dev/mmcblk0p2 rootfstypeext4 elevatordeadline fsck.repairyes rootwait
3、切换蓝牙为软串口释放硬件串口
sudo vi /boot/config.txt ,最后一行增加
dtoverlaypi3-miniuart-bt 4、重启Rpi3
sudo reboot
5、查看设备信息
ls -l /dev 三、使用wiringPi库开发串口
安装wiringPi库后可以在/usr/linclude找到wiringPi相关的头文件 要查找wiringPi库的包含头文件在哪里可以使用find命令查找
sudo find / -name wiring* 主要是四个头文件 wiringPi.h 基本IO驱动和常用配置定义wiringPiI2C.h I2C驱动的头文件wiringPiSPI.h SPI驱动的头文件;wiringSerial.h Serial驱动的头文件;串口驱动库主要提供以下接口 extern int serialOpen (const char *device, const int baud) ;//打开串口输入设备描述符和串口波特率返回串口的设备IDextern 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) ;//从设备ID读取一个字符新建一个文件myuart.c如下代码进行测试
#includewiringPi.h
#includewiringSerial.h
#includestdio.h
#includestring.h
#includetime.h
void delay_ms(int ms);
int main()
{int filedevid;int recbytenum;int i;char buf[1024];memset(buf,0,1024);wiringPiSetup();if((filedevidserialOpen(/dev/ttyAMA0,115200))0){printf(/dev/ttyAMA0 Open Faild\r\n);return -1;}else{printf(/dev/ttyAMA0 Open with 115200, success\r\n);while(1){recbytenum serialDataAvail(filedevid);if(recbytenum 0){i0;while(recbytenum--){buf[i] serialGetchar(filedevid);}printf(Rpi uart recv: %s\r\n,buf);serialPrintf(filedevid,Rpi uart send: %s\r\n,buf);memset(buf,0,1024);}}}
}
四、编译和测试
编译命令
gcc myuart.c -o runuart.o -l wiringPi
运行 五、分析和讨论
上面的方法主要记录了Rpi3的Uart基本操作但是存在以下问题
1、串口无法修改奇偶校验、数据位数
2、数据接收存在分包现象主要是由于wiringPi库只提供了serialDataAvail函数因此该串口驱动还需要进一步优化和改进。
可以参考下一篇博文树莓派UART串口编程--使用wiringPi库-C开发【2-修改驱动】