Linux单片机串口通信总结
这是一个目录
- Linux与单片机串口通信
- 运行ROS串口发送节点后异常中断
- 栈溢出问题
- catkin_make报错:函数未定义的引用
- ERROR L107: ADDRESS SPACE OVERFLOW
- 串口实验总结
- 程序组织
- 串口调试
Linux与单片机串口通信
近期要做一个机械臂的小项目,作为ROS和MoveIt的实践平台,上位机和工控机之间暂定为串口通信。
上位机:Ubuntu18.04虚拟机
工控机:STC89C51,编程环境为keil5
由于选择了早已过时的C51作为下位机,互联网上并没有太多相关资料,因此串口通讯的程序由STM32的串口改写而来。
在改写的过程中出现许多莫名其妙的BUG,记录在此博客。
运行ROS串口发送节点后异常中断
具体原因为串口为开放权限,解决方案如图:
栈溢出问题
(未及时截图,找不到具体错误信息。但错误代码从中出现了Stack)
许多帖子出现栈溢出都是在TCP传输环节,即传输数据过大。但本次栈溢出问题原因是发送缓存数组在传输数据变更(加长)后定义未及时变更导致了在为缓存数组赋值时溢出。
catkin_make报错:函数未定义的引用
- 工作空间下同名功能包替换时最好删除build和devel两个文件夹中原有功能包编译结果;
- 在更改函数实现的同时函数调用及声明应同步更新;
ERROR L107: ADDRESS SPACE OVERFLOW
此运行错误为工控机在keil环境下报错,错误原因为单片机内存溢出(md,单片机的内存果然是和房价一样的存在)
具体出现该问题原因是串口调试调用了两次“printf”,一次占用2K内存,让本不富裕的C51雪上加霜。可使用串口用直接输出来代替printf输出运行信息来改进程序。另外目前工控机的程序还少,许多博客都有写到大型工程不可避免的出现内存溢出问题,可通过指定变量的内存空间来改进。
串口实验总结
程序组织
程序组织注意两点:时序和波特率
严格来说波特率也是时序的组成部分,即一个数据包中两位数据间发送间隔(个人理解)我所使用的STC89C52单片机的烧写软件提供波特率计算工具,可以直接受用。但有一点要注意:在设定波特率前要了解单片机的型号及始时钟信息有些单片机是到不了115200的,所以比较推荐的是9600的波特率。(你尽可以不信,但我已经为它浪费了几小时了)
时序主要指两个数据包之间的发送间隔,要综合考量数据收发和该段指令执行的时间来制定。具体到本项目即各轴输出PWM的执行时间。
另外还有多位16进制的数据打包发送和字符串发送的问题。前者采用数据头+数据长+数据内容+循环校验位+数据尾打包发送来解决;后者采用了C语言共用体的结构,具体可查其他博客。
程序重点部分分享如下:
串口接收中断:
void send_data() interrupt 4 //串口接收中断
{if(RI==1){//testRece4 = UART_ReceiveData();//usart_send(testRece4);usartReceiveOneData(&testRece1,&testRece2,&testRece3,&testRece4);usart_send(testRece4);}if(TI==1)//usart_send(testRece4);TI = 0;//通过软件的方式置零
}
串口发送字符串:
void USART_Send_String(unsigned char *p,unsigned short int sendSize)
{ static int length =0;while(length<sendSize){ while( *p!=0 );*p = SBUF;while(!TI);TI=0; p++;length++;}length =0;
}
(具体工程有些长,可私信分享交流,但PWM不行)
我是绝对不会说我最开始想用直流减速电机做机械臂的,绝对不会
串口调试
串口调试的过程主要是检验收发是否正常,故可采用发送刚接收到的字符的放法来调试。
Linux单片机串口通信总结相关推荐
- 基于PC与单片机串口通信的温度监控系统程序设计
基于PC与单片机串口通信的温度监控系统程序设计 1.系统介绍 1)本系统主要讲解基于PC与单片机串口通信的温度监控系统程序设计(如图1),上位机采用常用的PC机,下位机使用的是STC89C52单片机, ...
- 51单片机-串口通信
目录 1.什么是通信 1.1.通信的概念 1.2.传送方式 1.3.同步方式 1.4.传送方向 1.5.校验方式 2.单片机串口介绍 2.1.硬件电路 2.2.电平标准 2.3.常见接口 2.4.内部 ...
- 蓝桥杯单片机串口通信学习提升笔记
今日得以继续蓝桥杯国赛备赛之旅: 有道是 "不知何事萦怀抱,醒也无聊,醉也无聊,梦也何曾到谢桥." 那我们该如何 让这位诗人纳兰 "再听乐府曲 ,畅解相思苦"呢 ...
- 51单片机串口通信模板_深入理解51单片机串口通信及通信实例
串口通信的原理 串口通信(SerialCommunications)的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一 ...
- 普中单片机--串口通信(2)---通过串口助手发送数据点LED
普中单片机–串口通信(2) 通过串口助手发送数据 点亮LED 软件部分 #include <reg52.h> #define jingzhen 12000000UL /*使用12.0M晶体 ...
- 51单片机串口通信原理、相关寄存器配置与简单串口收发程序代码
目录 1. 串口通信原理 2. 51单片机串口通信 2.1 串口简要模式图 2.2 相关寄存器 (1)PCON.SCON.SBUF (2)IE.IPH.IP (3)配置T1定时器 2.3 波特率和系统 ...
- 51单片机串口通信模板_51单片机串口通信
51 单片机串口通信 51 单片机串口通信(转载) 2009-03-03 18:22 一.串口通信原理 串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到计 算机端,而且也能实现计算机对单 ...
- 51单片机~串口通信(讲解+代码)
51单片机~串口通信 (一)计算机串行通信原理: 综上:所以在设置的时候,经常将SCON设置为0X50==0101 0000 ,使用方式1. (二)工作: 中断控制 led灯,每发送一条指令灯亮或灭( ...
- stc12串口收发计算机,半双工串口通信实例36:STC12单片机和STC12单片机串口通信...
半双工串口通信实例36:STC12单片机和STC12单片机串口通信 一.串口通信实例目的: STC12单片机主站数字量输入DI01~DI08控制STC12单片机从站数字量输出DO01~DO08: ST ...
- Atmega16单片机串口通信
Atmega16单片机串口通信 Atmega16单片机串口通信 串口通信需要使用到的内部寄存器 程序代码 Atmega16单片机串口通信 本篇文章参考自叶大鹏老师于2008年4月5日完成的UART通信 ...
最新文章
- python变量初始化_tensorflow之变量初始化(tf.Variable)使用详解
- AJAX的安全性及AJAX安全隐患
- 680. 验证回文字符串 Ⅱ golang
- google嗅探(简洁实用版)
- 5配置单臂路由器 VLAN 间路由
- java 取名字_Java命名规范(新手宝典)
- TF内存卡(SDHC)的传输规范
- 群英齐聚铸辉煌!孔明在线企鹅社区成功启动!
- Q1财报大超预期,“大象”百度成功“转身”?
- ubuntu16.04安装tensorflow,pytorch,gluon等
- 会话及会话技术、Cookie对象、Session对象 详解
- oracle11如何生成aw r,(Oracle)自定义调用AWRamp;ADDM
- gpfdist故障诊断
- 淘宝(tmall)抓取店铺订单解密数据、打印电子面单、订单推送保存到erp软件中
- 1. 获取数据-requests.get()
- Error:(5, 26) java: 程序包javax.servlet.http不存在
- android 自带录音软件,系统自带录音弱爆!这款APP竟能让手机录立体声
- 免费好用的jpg转换成pdf转换器
- 计算机的桌面教案,《认识计算机桌面》教案(最新整理)
- Vagrant was unable to mount VirtualBox shared folders. This is usually because the filesystem vboxs
热门文章
- 西南石油大学计算机科学学院李欣,南充西南石油大学财经学院学霸寝室 6女生一年70张奖状...
- 彻底理解js的作用域链
- easyui 设置css样式,Easyui 条件设置行背景颜色_EasyUI 教程
- 【仿美团点餐App】—— 首页(一)
- 中兴zxr10路由器重启命令_ZXR10路由器基本操作和配置.doc
- random randint randn
- 腾讯短网址怎么在线生成
- tengxunyun init容器安装skywalking 挺NB的
- 白学立体视觉(2): 相机内外参数与坐标系
- 【linux技术】记一次虚拟机vmware里 Centos7开机故障:sd 0:0:0:0: [sda] Assuming drive cache: write through