Linux与单片机串口通信

2023-05-16

这里可见就算是用python来进行USB串口通信也是用wirte去写一个文件。再次体现linux一切皆文件。

摘自:http://www.51hei.com/bbs/dpj-31349-1.html

Linux与单片机串口通信

[复制链接]
  

hutians 发表于 2015-2-10 14:48 | 显示全部楼层

        Windows下PC与单片机进行串口通信时,几乎什么都是现成的:串口调试助手、usb转串口驱动,而且有着丰富的资料供自己参考(这是玩linux时没法比的≥﹏≤)。也许是书上讲的知识太浅,三天时间,基本上能通过串口,从PC端控制单片机了。在书上看到了个单片机使用DS18B20测量温度,并通过串口将数据传送给PC端的例子,单片机的程序好写,但PC端的软件对我来说就有些难了。书中的例子使用的是VB,并且把代码附在了上面。据说VB不是很难,半个月就能学个差不多。如果学习VB的话,依照书中的代码,大概一周就可一写出PC端的接收软件。可我好像有了一种怪癖,当用windows做某件事的时候,会不由自主地考虑可不可以用ubunt linux完成。尽管之前用ubuntu学习单片机时走了不少弯路进而回到windows,但我仍不死心,现在又开始用ubuntu折腾了……下面说正事。
      笔记本上没有RS232接口,只能使用usb接口了。开发板使用的是PL2303HX芯片,正好,ubuntu内核中已经编译了PL2303的驱动。插上开发板,运行命令:lsusb,会罗列出所有的usb设备,其中,Bus 004 Device 005: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port便是开发板。
搜索来搜索去,暂时也只能用配置medom的串口通信工具minicom来进行摸索:sudo apt-get install minicom
接下来设置minicom:
在命令提示符下输入sudo minicom -s进入设置状态,在菜单中选择Serial port setup,设置Serial Device为/dev/ttyUSB0,Bps/Par/Bits为9600(同单片机上使用的) 8O1(波特率选为115200 8O1,数据位8,奇校验,停止位1)),Hardware Flow Control 为 No。之后选择Save setup as df1保存为默认设置,然后选择Exit退出设置,minicom将根据以上设置进行初始化,给开发板加电。
我在开发板上写入的程序是单片机接收来自PC端的16进制的数据,然后通过在P0口的LED显示出来。但好像数据一发送,开发板就开始自我发挥了……百度(感谢万能的百度)后,神奇地发现minicom是不能发送十六进制数据的,而且,貌似只能一个一个的发送数据。所以实际上,发送数据时我也不知道8只LED会是什么状态……基本上宣告失败。不过,好在是LED亮了,尽管乱七八糟的,但至少说明想法是可行的。无需磨叽,立马换工具。
      这次,貌似之前只因简洁而学习的python可以发挥作用了。python早已安装。下面就是安装串口通信模块了。从这儿下载pyserial模块,解压后运行命令:sudo python setup.py install进行安装。
从示例中,大概学到了这些东西:
1、打开连接开发板的串口(ttyUSB0),并设置波特率为9600,延时为1(好像在windows上没有设置过延时……):
      ser = serial.Serial('/dev/ttyUSB0',9600,timeout=1)
     (当然,串口是普通用户无法读写的,需要root权限:所以,写这一行代码之前,先运行命令:sudo chmod 777 /dev/ttyUSB0,否则会提示:serial.serialutil.SerialException: could not open port /dev/ttyUSB0: [Errno 13] Permission denied: '/dev/ttyUSB0'错误信息)
2、打开串口:
      ser.open()
      (可以用ser.isOpen()函数检测一下,如若开启,返回True)
3、向串口发送数据:
      ser.write("hello")(发送字符串‘hello’)
4、关闭串口:
      ser.close()
(由于在单片机上的程序中设置了蛋疼的奇校验,而暂未弄清楚如何在python中设置奇偶校验方式,单片机有没有接收到数据,暂时不得而知。)
今天先到这里,改天接着折腾。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux与单片机串口通信 的相关文章

  • Linux shell 根据第二列对文件进行排序?

    我有一个这样的文件 FirstName FamilyName Address PhoneNumber 如何按 FamilyName 排序 如果这是 UNIX sort k 2 file txt 您可以使用多个 k用于对多列进行排序的标志 例
  • 如果文件没有行尾字符,则 wc -l 不计算文件的最后一个

    我需要计算 unix 文件的所有行数 该文件有 3 行 但是wc l仅给出 2 个计数 我知道它不计算最后一行 因为它没有行尾字符 任何人都可以告诉我如何计算这一行吗 grep c返回匹配行的数量 只需使用一个空字符串 作为您的匹配表达式
  • 找出Linux上一个进程使用了​​多少内存页

    我需要找出进程分配了多少内存页 每个页面是 4096 进程内存使用情况我在查找正确值时遇到一些问题 当我查看 gome system monitor 时 内存映射下有几个值可供选择 Thanks 这样做的目的是将内存使用量除以页数并验证页大
  • 如何从脚本编辑 /etc/sudoers?

    我需要编辑 etc sudoers从脚本中添加 删除白名单中的内容 假设我有一个可以处理普通文件的命令 我如何将其应用到 etc sudoers 我可以复制并修改它 然后有visudo用修改后的副本替换原始版本 通过提供我自己的脚本 EDI
  • PIL 的 Image.show() 带来*两个*不同的查看器

    在 python shell 中处理图像时 我使用 image show 其中 image 是 Image 的实例 很久以前什么也没发生 但在定义了一个名为 xv 的 Mirage 符号链接后 我很高兴 最近几天 show 将显示 Imag
  • 我想在 Red Hat Linux 服务器中执行 .ps1 powershell 脚本

    我有一个在窗口中执行的 ps1 powershell 脚本 但我的整个数据都在 Linux 服务器中 有什么可能的方法可以让我在红帽服务器中执行 powershell 脚本 powershell脚本是 Clear Host path D D
  • 如何将一个文本文件拆分为多个 *.txt 文件?

    我有一个文本文件file txt 12 MB 包含 something1 something2 something3 something4 有没有办法分开file txt分成 12 个 txt 文件 比方说file2 txt file3 t
  • Linux中如何避免sleep调用因信号而中断?

    我在 Linux 中使用实时信号来通知串行端口中新数据的到达 不幸的是 这会导致睡眠呼叫在有信号时被中断 有人知道避免这种行为的方法吗 我尝试使用常规信号 SIGUSR1 但我不断得到相同的行为 来自 nanosleep 联机帮助页 nan
  • Linux 内核使用的设备树文件 (dtb) 可视化工具? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以图形化表示Linux内核中使用的硬件设备树的工具 我正在尝试了解特定 Arm 芯片组
  • 在本地主机上使用相同的 IP 和端口创建套接字

    我在 Linux 上看到奇怪的行为 我看到远程端和本地端都显示相同的 IP 和端口组合 以下是 netstat 输出 netstat anp 网络统计grep 6102 tcp 0 0 139 185 44 123 61020 0 0 0
  • 如何在C(Linux utf8终端)中打印“盒子抽屉”Unicode字符?

    我正在尝试显示 方框图范围 2500 257F 中的 Unicode 字符 它应该是标准 utf8 Unicode 标准 版本 6 2 我根本做不到 我首先尝试使用旧的 ASCII 字符 但 Linux 终端以 utf8 显示 并且没有显示
  • Vagrant 遇到问题 - “404 - 未找到”

    我正在尝试使用 Vagrant 制作一个 LAMP 盒子 有人告诉我它使用起来非常简单 我对网络和虚拟机完全陌生 对 Linux Ubuntu 的经验也很少 我目前已尝试按照官方文档页面上的教程进行操作 http docs vagrantu
  • 为什么此 NASM 代码会打印我的环境变量?

    本学期我刚刚完成计算机体系结构课程 除其他外 我们一直在涉足 MIPS 汇编并在 MARS 模拟器中运行它 今天 出于好奇 我开始在我的 Ubuntu 机器上摆弄 NASM 基本上只是将教程中的内容拼凑起来 并感受一下 NASM 与 MIP
  • Crontab 每 5 分钟一次 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我如何告诉 crontab 每 5 分钟运行一次 但从每小时的第二分钟开始 换句话说 我想在以下时间执行我的脚本minute 5 2 例如 我的脚本应
  • LINUX:如何锁定内存中进程的页面

    我有一个 LINUX 服务器 运行一个具有大量内存占用的进程 某种数据库引擎 该进程分配的内存太大 需要将其中一部分换出 换出 我想做的是将所有其他进程 或正在运行的进程的子集 的内存页面锁定在内存中 以便只有数据库进程的页面被换出 例如
  • Ubuntu Python shebang 线不工作

    无法让 shebang 线在 Ubuntu 中为 python 脚本工作 我每次只收到命令未找到错误 test py usr bin env python print Ran which python usr bin python 在 sh
  • 如何在不使用 IDE 的情况下在 Linux 上运行 Java 项目

    我是 Java 新手 基本上 我开发了一个java项目 其中包含Eclipse中的多个Java包 该项目在我安装了 redhat Linux 的桌面上运行正常 然而 我需要在一个更强大的没有安装X11的Linux服务器 redhat ent
  • 如何才能将 TCP 连接返回到同一端口?

    机器是 RHEL 5 3 内核 2 6 18 有时我在 netstat 中注意到我的应用程序有连接 建立了 TCP 连接本地地址 and 国外地址是一样的 其他人也报告了同样的问题 症状与链接中描述的相同 客户端连接到本地运行的服务器的端口
  • 在 docker 中重定向命令输出

    我想为我的服务器做一些简单的日志记录 它是一个在 Docker 容器中运行的小型 Flask 应用程序 这是 Dockerfile Dockerfile FROM dreen flask MAINTAINER dreen WORKDIR s
  • 仅使用containerd(不使用Docker)修剪容器镜像

    如果我刚刚containerd安装在 Linux 系统上 即 Docker 是not安装 如何删除未使用的容器映像以节省磁盘空间 Docker 就是这么方便docker system prune https docs docker com

随机推荐