当前位置:首页 » 《关注互联网》 » 正文

树莓派学习笔记(五)串口通信_SkyGloaming的博客

29 人参与  2022年01月26日 16:32  分类 : 《关注互联网》  评论

点击全文阅读


观看学习上官可编程陈立臣老师的树莓派视频,
在其过程中所记录的学习笔记

一、串口通信概念

  • 1、串口通信用于多机通信
  • 2、串口通信属于全双工通信,即双方可以同时进行交流
                                  半双工通信,一次只允许一方进行通信
  • 3、树莓派进行串口通信一般要连接两根线TXD和RXD,
           连接时要相反连接(即树莓派的TXD要与通信方的RXD相连,RXD与TXD相连)
  • 4、进行串口通信时,数据格式(数据位、停止位、奇偶校验位)和波特率,通信双方要保持一致

二、串口通信编程

  • 树莓派的串口是/dev/ttyAmA0(Linux一切皆文件)

1、配置串口

  • 修改/boot/cmdline.txt文件,将“console=ttyAMA0,115200”删除,
    该语句作用为树莓派启动时用串口来打印调试信息,使用串口通信则需删除
  • sudo reboot重启

2、连线

树莓派与USB转TTL相连
     TXD —— RXD
     RXD —— TXD
        0 V —— GND

3、调用函数

#include <wiringPi.h>
	int wiringPiSetup (void) 返回执行状态,0表示成功,-1表示失败
	void delay (unsigned int howLong) 暂停指定的毫秒数
	void delayMicroseconds (unsigned int howLong) 暂停指定的微妙数

 

#include <wiringSerial.h>
	int serialOpen (char *device, int baud)	打开并初始化串口
	void  serialPutchar (int fd, unsigned char c)  发送一个字节的数据到串口
	void  serialPuts (int fd, char *s)  发送一个字符串到串口
	
	int   serialDataAvail (int fd)  获取串口缓存中可用的字节数
	int serialGetchar (int fd)  从串口读取一个字节数据返回,读取前使用serialDataAvail判断

4、示例代码1(向串口发送数据)

#include <wiringSerial.h>
#include <wiringPi.h>
#include <stdio.h>
int main(){
        int fd;

        if(wiringPiSetup()==-1){
                printf("初始化失败\n");
                return -1;
        }

        fd = serialOpen("/dev/ttyAMA0",9600);

        while(1){
        //      serialPutchar(fd,'c');
                serialPuts(fd,"hello world\r\n");	//   /r/n表示回车并换行
                delayMicroseconds(1000000);//delay(1000);
        }
        return 0;
}

5、示例代码2(读取串口数据,终端输出相应语句)

#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>

int main(){
        int fd;
        int cmd;
        if(wiringPiSetup()==-1){
                printf("初始化失败\n");
                return -1;
        }
        fd = serialOpen("/dev/ttyAMA0",9600);
        while(1){
                while(serialDataAvail(fd)!=-1){
                        cmd = serialGetchar(fd);
                        //printf("data: %d\n",cmd);
                        //printf("data: %c\n",cmd);

                        if(cmd=='2'){
                                serialPuts(fd,"data is 2\r\n");
                        }
                        if(cmd=='3'){
                                serialPuts(fd,"data is 3\r\n");
                        }
                        if(cmd=='4'){
                                serialPuts(fd,"data is 4\r\n");
                        }
                }
        }
        return 0;
}

创作不易,动动小手点赞收藏


点击全文阅读


本文链接:http://zhangshiyu.com/post/33963.html

串口  通信  数据  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1