赞
踩
我这里采用的是树莓派官网烧录工具,烧录的是官方最新镜像
打开设置
打算直接用SSH登录,先配置好登录连接的用户名和密码,以及要连接的WiFi名字和密码
设置好后,插上sd卡,点击烧录,然后等待烧录完毕即可
远程登录连接上后,在终端输入以下命令
sudo raspi-config
选择Interface Options后回车,选择Serial Port后回车
完成串口使能
查看串口映射
ls -l /dev/serial*
serial0(GPIO串口)默认使用的是ttyS0(mini串口);
serial1(蓝牙)使用的是ttyAMA0(硬件串口)
如果想使用稳定可靠的硬件串口,就要将树莓派的硬件串口与mini串口默认映射对换。而这个需求官方也考虑到了,在系统中放了一个实现这个功能的文件—stretch版本系统中的文件为/boot/overlays/pi3-miniuart-bt.dtbo
进行默认映射对换
sudo nano /boot/config.txt
在改文件末尾加上
dtoverlay=pi3-miniuart-bt
force_turbo=1
然后ctrl+s进行写入保存,不修改文件名称,直接回车即可完成写入,最后ctrl+x退出该文件
在终端输入
sudo nano /boot/cmdline.txt
把里面的内容替换成
dwc_otg.lpm_enable=0 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
然后ctrl+s进行写入保存,不修改文件名称,直接回车即可完成写入,最后ctrl+x退出该文件
然后重启
sudo reboot
重启后,
查看修改后的串口映射
ls -l /dev/serial*
防止后续因串口权限,先设置一手权限
sudo chmod 777 /dev/ttyAMA0
先进行串口接线
gpio readall //可查看TX RX
此时,可以先编写一个简单的python程序来测试一下(demo1.py),放在了test文件夹下
import serial#导入pyserial模块
import time
ser = serial.Serial('/dev/ttyAMA0',115200)#创建serial对象 并且指定波特率为115200(与调试助手一致)
ser.isOpen()#返回Ture则代表串口已打开
while True:
ser.write('Hello CSDN !!'.encode('utf-8'))#向串口发送字符串并指定编码为utf-8
time.sleep(2)
编写好后
python3 demo1.py #运行
测试成功
此时,进行测试我们的wiringPi库,编写uart1.c
#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
#include <wiringSerial.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string.h>
int main()
{
char buf[64] = {0};
int n_read;
wiringPiSetup();
int fd =serialOpen("/dev/ttyAMA0",115200); //打开串口
if(fd == -1){ //如果打开串口失败则退出程序
printf("serialOpen failed!\n");
return 0;
}
if(fork() == 0){
while(1){
memset(buf,0,sizeof(buf));
n_read = read(fd,buf,sizeof(buf)); //子进程一直等待数据接收
if(n_read > 0){
printf("data %dB:%s\n",n_read,buf);
}else{
perror("read failed"); //读取失败,打印错误信息
delay(1000);
}
}
}else{
while(1){
serialPrintf(fd,"hello world!!\n"); //父进程每隔三秒发送一次hello world!!
delay(3000);
}
}
return 0;
}
链接wiringPi库进行编译
gcc uart1.c -lwiringPi
测试成功
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。