19004|27

1万

帖子

25

TA的资源

版主

楼主
 

【MicroPython】串口的使用 [复制链接]

 
 
  • 基本用法

  1. from pyb import UART

  2. u1 = UART(1, 9600)
  3. u1.writechar(65)
  4. u1.write('123')
  5. u1.readchar()
  6. u1.readall()
  7. u1.readline()
  8. u1.read(10)
  9. u1.readinto(buf)

  10. u1.any()
复制代码


  • 串口方法
    • uart.init(baudrate, bits=8, parity=None, stop=1, *, timeout=1000, flow=None, timeout_char=0, read_buf_len=64),初始化
      • baudrate:波特率
      • bits:数据位,7/8/9
      • parity:校验,None, 0 (even) or 1 (odd)
      • stop:停止位,1/2
      • flow:流控,可以是 None, UART.RTS, UART.CTS or UART.RTS | UART.CTS
      • timeout:读取打一个字节超时时间(ms)
      • timeout_char:两个字节之间超时时间
    • read_buf_len:读缓存长度
    • uart.deinit():关闭串口
    • uart.any():返回缓冲区数据个数,大于0代表有数据
    • uart.writechar(char):写入一个字节
    • uart.read([nbytes]):读取最多nbytes个字节。如果数据位是9bit,那么一个数据占用两个字节,并且nbytes必须是偶数
    • uart.readall():读取所有数据
    • uart.readchar():读取一个字节
    • uart.readinto(buf[, nbytes])
    • buf:数据缓冲区
    • nbytes:最大读取数量
    • uart.readline():读取一行
    • uart.write(buf):写入缓冲区。在9bits模式下,两个字节算一个数据
    • uart.sendbreak():往总线上发送停止状态,拉低总线13bit时间


  • 串口对应GPIO
UART(4) is on XA: (TX, RX) = (X1, X2)  = (PA0,  PA1)
UART(1) is on XB: (TX, RX) = (X9, X10) = (PB6,  PB7)
UART(6) is on YA: (TX, RX) = (Y1, Y2)  = (PC6,  PC7)
UART(3) is on YB: (TX, RX) = (Y9, Y10) = (PB10, PB11)
UART(2) is on:    (TX, RX) = (X3, X4)  = (PA2,  PA3)



【MicroPython】教程

最新回复

那上位机可以收到单片机发送的数据,但是单片机收不到上位机发送的数据,这是为什么呢?谢谢   详情 回复 发表于 2020-2-5 10:10
点赞 关注
 
 

回复
举报

4177

帖子

9

TA的资源

五彩晶圆(高级)

沙发
 
利用Python开发看起来这么简单?硬件使用的是啥啊?还是说这个是?O(∩_∩)O哈哈~

点评

使用STM32F405单片机,内部有固件,使用python编程,不用在过多的考虑底层了。  详情 回复 发表于 2016-3-29 00:12
 
 
 

回复

1万

帖子

25

TA的资源

版主

板凳
 
huaiqiao 发表于 2016-3-29 00:03
利用Python开发看起来这么简单?硬件使用的是啥啊?还是说这个是?O(∩_∩)O哈哈~

使用STM32F405单片机,内部有固件,使用python编程,不用在过多的考虑底层了。

点评

您用的Python的开发环境是?这个看起来简单,就是不知道到了复杂点的程序怎么样呢  详情 回复 发表于 2016-3-29 01:02
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

4
 
dcexpert 发表于 2016-3-29 00:12
使用STM32F405单片机,内部有固件,使用python编程,不用在过多的考虑底层了。

您用的Python的开发环境是?这个看起来简单,就是不知道到了复杂点的程序怎么样呢

点评

在单片机上,可以通过一个串口终端,将命令发下去。也可以用文本编辑器,将py文件写好,存到tf卡或者flash中,然后调用执行。 python是可以编写复杂程序的,现在网络程序很多就是python编写的,也可以编写桌面程  详情 回复 发表于 2016-3-29 09:20
 
 
 

回复

1万

帖子

25

TA的资源

版主

5
 
huaiqiao 发表于 2016-3-29 01:02
您用的Python的开发环境是?这个看起来简单,就是不知道到了复杂点的程序怎么样呢

在单片机上,可以通过一个串口终端,将命令发下去。也可以用文本编辑器,将py文件写好,存到tf卡或者flash中,然后调用执行。

python是可以编写复杂程序的,现在网络程序很多就是python编写的,也可以编写桌面程序。

点评

是的,我听说现在好多网页也改Python来写了。看样子不简单咯。O(∩_∩)O哈哈~  详情 回复 发表于 2016-3-29 19:28
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

6
 
dcexpert 发表于 2016-3-29 09:20
在单片机上,可以通过一个串口终端,将命令发下去。也可以用文本编辑器,将py文件写好,存到tf卡或者flas ...

是的,我听说现在好多网页也改Python来写了。看样子不简单咯。O(∩_∩)O哈哈~

点评

我也是才开始学,正好大家一起,多交流。  详情 回复 发表于 2016-3-29 20:25
 
 
 

回复

1万

帖子

25

TA的资源

版主

7
 
huaiqiao 发表于 2016-3-29 19:28
是的,我听说现在好多网页也改Python来写了。看样子不简单咯。O(∩_∩)O哈哈~

我也是才开始学,正好大家一起,多交流。

点评

呵呵,我只是好奇。现在心思在别的东西上,O(∩_∩)O哈哈~,您先开始哈哈。  详情 回复 发表于 2016-3-29 20:31
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

8
 
dcexpert 发表于 2016-3-29 20:25
我也是才开始学,正好大家一起,多交流。

呵呵,我只是好奇。现在心思在别的东西上,O(∩_∩)O哈哈~,您先开始哈哈。
 
 
 

回复

2721

帖子

0

TA的资源

纯净的硅(中级)

9
 
  1. >>> u1.readchar()
  2. -1
复制代码

就是无数据吗?
 
 
 

回复

2721

帖子

0

TA的资源

纯净的硅(中级)

10
 
  1. >>> u1.write('123445566677888')
  2. 15
  3. >>> u1.readline()
  4. >>> print(u1.readall())
  5. None
复制代码

为什么读没有返回?

点评

没有返回说明串口没有收到数据,你发点数据在试。  详情 回复 发表于 2016-9-28 12:16
 
 
 

回复

1万

帖子

25

TA的资源

版主

11
 
suoma 发表于 2016-9-28 11:27
为什么读没有返回?

没有返回说明串口没有收到数据,你发点数据在试。

点评

第一句就是发数据啊  详情 回复 发表于 2016-9-28 18:48
 
 
 

回复

2721

帖子

0

TA的资源

纯净的硅(中级)

12
 
dcexpert 发表于 2016-9-28 12:16
没有返回说明串口没有收到数据,你发点数据在试。

第一句就是发数据啊

点评

你是从串口往外发,不等于串口收到数据。当然你可以将TX和RX短连,否则需要从外部给串口发数据才行。  详情 回复 发表于 2016-9-28 21:41
 
 
 

回复

1万

帖子

25

TA的资源

版主

13
 
suoma 发表于 2016-9-28 18:48
第一句就是发数据啊

你是从串口往外发,不等于串口收到数据。当然你可以将TX和RX短连,否则需要从外部给串口发数据才行。

点评

明白了,谢谢指导  详情 回复 发表于 2016-9-29 20:30
 
 
 

回复

2721

帖子

0

TA的资源

纯净的硅(中级)

14
 
dcexpert 发表于 2016-9-28 21:41
你是从串口往外发,不等于串口收到数据。当然你可以将TX和RX短连,否则需要从外部给串口发数据才行。

明白了,谢谢指导
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

15
 
我用esp8266连接传感器,
  1. ser = UART(0,9600)
  2. s = ser.write('\x42\x4d\x01\x00\x00\x00\x90')
  3. count = ser.any()
  4. recv = ser.read()
  5. print(len(count),recv)
复制代码

为啥输出是0,None啊
8266tx端连的传感器Rx  传感器tx连上8266Rx
是串口没弄对吗,我的是8266 nodeMcu 模块刷了micropython固件 传感器用的DS-HCHO甲醛传感器
这个传感器我在树莓派上是调通了的 发送命令后,传感器接收到命令就会传送数据到引脚,直接read就能取数了,但是8266这个传了命令后,收不到任何数据, 现在就是不知道到底是命令出了问题 还是串口位置弄错了。

点评

8266的串口0被REPL占用,串口1只有TX  详情 回复 发表于 2017-6-21 15:23
 
 
 

回复

1万

帖子

25

TA的资源

版主

16
 
shineboy524 发表于 2017-6-21 15:20
我用esp8266连接传感器,
[code]ser = UART(0,9600)
s = ser.write('\x42\x4d\x01\x0 ...

8266的串口0被REPL占用,串口1只有TX
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

17
 
dcexpert 发表于 2017-6-21 15:23
8266的串口0被REPL占用,串口1只有TX

我用的webrepl连接的8266 也会被占用吗?
但是用串口1 只有tx 只能write 不能read,这样的话我收不到传感器的数据

点评

除非关闭REPL。webrepl在工作时,会同时往REPL上发送数据。  详情 回复 发表于 2017-6-21 16:28
 
 
 

回复

1万

帖子

25

TA的资源

版主

18
 
shineboy524 发表于 2017-6-21 15:40
我用的webrepl连接的8266 也会被占用吗?
但是用串口1 只有tx 只能write 不能read,这样的话我收不到传 ...

除非关闭REPL。webrepl在工作时,会同时往REPL上发送数据。
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

19
 
dcexpert 发表于 2017-6-21 16:28
除非关闭REPL。webrepl在工作时,会同时往REPL上发送数据。

有没有什么方法 在不占用串口的情况下 可以通过外部终端调试程序的

点评

可以考虑使用软件串口或者I2C和外部模块通信,暂时没有太好方法不占用串口。 REPL下用CTRL-A可以进入纯数据模式,但是还是比较麻烦。  详情 回复 发表于 2017-6-22 14:09
 
 
 

回复

1万

帖子

25

TA的资源

版主

20
 
shineboy524 发表于 2017-6-22 12:57
有没有什么方法 在不占用串口的情况下 可以通过外部终端调试程序的

可以考虑使用软件串口或者I2C和外部模块通信,暂时没有太好方法不占用串口。

REPL下用CTRL-A可以进入纯数据模式,但是还是比较麻烦。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表