【MicroPython】串口的使用

dcexpert   2016-3-28 22:57 楼主
  • 基本用法

  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】教程

回复评论 (27)

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

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

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

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

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

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

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

呵呵,我只是好奇。现在心思在别的东西上,O(∩_∩)O哈哈~,您先开始哈哈。
点赞  2016-3-29 20:31
  1. >>> u1.readchar()
  2. -1

就是无数据吗?
点赞  2016-9-28 11:23
  1. >>> u1.write('123445566677888')
  2. 15
  3. >>> u1.readline()
  4. >>> print(u1.readall())
  5. None

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

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

第一句就是发数据啊
点赞  2016-9-28 18:48
引用: suoma 发表于 2016-9-28 18:48
第一句就是发数据啊

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

明白了,谢谢指导
点赞  2016-9-29 20:30
我用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这个传了命令后,收不到任何数据, 现在就是不知道到底是命令出了问题 还是串口位置弄错了。
点赞  2017-6-21 15:20
引用: shineboy524 发表于 2017-6-21 15:20
我用esp8266连接传感器,
[code]ser = UART(0,9600)
s = ser.write('\x42\x4d\x01\x0 ...

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

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

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

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

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

REPL下用CTRL-A可以进入纯数据模式,但是还是比较麻烦。
点赞  2017-6-22 14:09
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复