树莓派4B学习笔记 |
您所在的位置:网站首页 › uart最大波特率 › 树莓派4B学习笔记 |
文章目录
UART简介树莓派使用UART与串口屏通信串口屏简介硬件连接配置串口接口树莓派打开UART接口树莓派安装串口调试助手
编程实现wiringSerial.h Serial简介C语言实现树莓派UART与串口屏通信
总结树莓派4B入门学习笔记汇总
UART简介
UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用来主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,多用于上位机与下位机的通信。 在UART通信中,两个UART直接相互通信。 发送UART将控制设备(如CPU)的并行数据转换为串行形式,以串行方式将其发送到接收UART。只需要两条线即可在两个UART之间传输数据,数据从发送UART的Tx引脚流到接收UART的Rx引脚: 今天主要借助陶晶驰串口屏配合树莓派4B实现一个通信效果。 串口屏简介串口屏内置一块STM32,构建了相对独立的系统,有配套的软件能够进行图形化编程,极大地降低了界面设计的时间和难度,而且还有各种控件以便于灵活实现更多功能,可以通过串口完成对各类控件的操作,有很强的实用性。 将串口屏的TX、RX与树莓派的UART硬件接口连接,注意交叉。(没有屏幕的同学也可以使用USB转TTL连接树莓派,然后安装陶晶驰的开发环境,在线仿真也可。) 树莓派串口屏5VVCC板载编码8脚(TX)RX板载编码10脚(RX)TXGNDGND树莓派一共有两个串口如下图所示:(来自B站树小悉) 跟之前类似,打开Serial Port,关闭Serail Console,点击OK,会提示重启。 为了验证树莓派串口有没有真的工作,需要安装一个minicom的串口助手来验证一下。 安装步骤:打开终端输入:sudo apt-get install minicom回车等待下载和安装,安装过程中有提示,直接输入Y回车。 验证了串口功能后,我们开始利用串口编程,在编程之前,根据前面的经验,我还是需要先了解一下WiringPi的串口库给我们提供了哪些可以调用的函数。 之前一直没提这个库是怎么查询的,在这里说明一下: 安装后wiringpi的库后我们可以载可以在/usr/linclude找到wiringPi相关的头文件如下图所示: wiringPi.h 基本IO驱动和常用配置定义; wiringPiI2C.h I2C驱动的头文件; wiringPiSPI.h SPI驱动的头文件; wiringSerial.h Serial驱动的头文件; 双击wiringSerial.h Serial.h,我们可以看见有以下几个函数: 此处转载的此文。 打开Geany输入以下代码: // An highlighted block #include #include #include #include #include void delay_ms(int ms); int main() { int filedevid; int recbytenum; int i; char buf[1024]; memset(buf,0,1024); wiringPiSetup(); if((filedevid=serialOpen("/dev/ttyAMA0",115200)) 1)//如果接收到 { i=0; 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); } } } }上述代码效果如下: C语言代码如下: //树莓派通过串口屏输出两个通道正弦波形。 #include #include #include #include #include #define uchar unsigned char #define uint unsigned int int filedevid; int second,minute,hour,day,month,week,year,zwc,fwc,wdc,bal,txt,wendu; char endbuf[]={0xff,0xff,0xff}; char buf[64]; //唤醒屏幕准备通信 void UART_Send_start(void) { delay(10); serialPuts (filedevid,(char *)endbuf);//发送结束标志0xff,0xff,0xff包尾 delay(10); } int main() { uint ch0,ch1; signed int i,j; second=50;minute=48;hour=12;day=15;month=7;week=2;year=16;bal=0;txt=0;wendu=0; wiringPiSetup(); if((filedevid=serialOpen("/dev/ttyAMA0",9600)) |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |