前言

uart 模块主要用于驱动开发板上的异步串口,可以自由对 uart 进行配置。k210 一共有3个 uart,每个 uart 可以进行自由的引脚映射。

一、MAIX BIT串口使用步骤

1.引脚映射

在使用 uart 前,我们需要使用 fm 来对芯片引脚进行映射和管理。如下所示,将 PIN10 设置为 uart2 的发送引脚,PIN11 设置为 uart2 的接收引脚

fm.register(board_info.PIN10,fm.fpioa.UART2_TX)
fm.register(board_info.PIN11,fm.fpioa.UART2_RX)

2.构造函数

uart = machine.UART(uart,baudrate,bits,parity,stop,timeout, read_buf_len)

通过指定的参数新建一个 UART 对象
参数说明:
uart: UART 号,使用指定的 UART,可以通过 machine.UART. 按tab键来补全
baudrate: UART 波特率
bits: UART 数据宽度,支持 5/6/7/8 (默认的 REPL 使用的串口(UARTHS)只支持 8 位模式), 默认 8
parity: 奇偶校验位,支持 None, machine.UART.PARITY_ODD, machine.UART.PARITY_EVEN (默认的 REPL 使用的串口(UARTHS)只支持 None), 默认 None
stop: 停止位, 支持 1, 1.5, 2, 默认 1
timeout: 串口接收超时时间
read_buf_len: 串口接收缓冲,串口通过中断来接收数据,如果缓冲满了,将自动停止数据接收

3.串口初始化

uart.init(baudrate,bits,parity,stop,timeout, read_buf_len)

同构造函数,但不需要第一个UART号,用于初始化 uart,一般在构造对象时已经初始化,这里用在重新初始化 uart

3.功能函数

1、

uart.read(num)

用于读取串口缓冲中的数据
参数说明:
num: 读取字节的数量,一般填入缓冲大小,如果缓冲中数据的数量没有 num 大,那么将只返回缓冲中剩余的数据

2、

uart.readline(num)

用于读取串口缓冲数据的一行
参数说明:
num: 读取行的数量

3、

uart.write(buf)

用于使用串口发送数据
参数说明:
buf: 需要发送到数据

4、

uart.deinit()

注销 UART 硬件,释放占用的资源

5、

在这里插入代码片

二、MAIX BIT串口收发

准备MAIX BIT开发板一块,USB转TTL板一块,杜邦线若干;实现MAIX BIT与XCOM之间的通讯,接线:ch340的TX接MAIX BIT的PIN16,ch340的RX接MAIX BIT的PIN15。注意两块板子连接串口时要连接到不同的串口上,比如一块连COM1,另一块就连COM2。

代码:

from fpioa_manager import fm
from machine import UART
from fpioa_manager import fmfm.register(15, fm.fpioa.UART1_TX, force=True)
fm.register(16, fm.fpioa.UART1_RX, force=True)uart_A = UART(UART.UART1, 115200, 8, 0, 0, timeout=1000, read_buf_len=4096)write_str = 'Get datas successful'
while True:   read_data = uart_A.read()if read_data:uart_A.write(write_str)read_str = read_data.decode('utf-8')print("string = ", read_str)

分析代码:
将PIN15、PIN16分别映射为TX,RX;
构建串口uart_A为UART1,波特率为115200,缓存数据长度为4096;
如果uart_A收到数据,则通过uart_A发送’Get datas successful’,并且打印出收到的数据;

MAIX BIT与XCOM通讯

三、MAIX BIT与STM32串口通讯

MAIX BIT与STM32一直是我最想实现的功能之一,奈何弄了几天一直有bug,最后通过串口助手发现了问题所在。这里我用的是stm32f103rct6。
MAIX BIT代码:

from fpioa_manager import fm
from machine import UART
from fpioa_manager import fm
import timefm.register(15, fm.fpioa.UART1_TX, force=True)
fm.register(16, fm.fpioa.UART1_RX, force=True)uart_A = UART(UART.UART1, 115200, 8, 0, 0, timeout=1000, read_buf_len=4096)open_str = '1'
close_str = '2'
for i in range(1):read_data = uart_A.read()uart_A.write(open_str)time.sleep(2)uart_A.write(close_str)

分析代码:通过串口A向stm32发送1,延时两秒后发送2

STM32代码段:
代码可以直接用正点原子的串口实验代码,波特率改成115200下载连接

链接:https://pan.baidu.com/s/1T7mbhRUU5Vv28uFRXC8yeg
提取码:2333

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"int main(void){ u8 t;u8 len;  u16 times=0; delay_init();             //延时函数初始化NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2uart_init(115200);     //串口初始化为115200LED_Init();           //初始化与LED连接的硬件接口while(1){if(USART_RX_BUF[0]==0x31){LED1=0;}else if(USART_RX_BUF[0]==0x32){LED1=1;}if(USART_RX_STA&0x8000){                     len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度//printf("\r\n您发送的消息为:\r\n");for(t=0;t<len;t++){USART1->DR=USART_RX_BUF[t];while((USART1->SR&0X40)==0);//等待发送结束}//printf("\r\n\r\n");//插入换行USART_RX_STA=0;}else{times++;if(times%5000==0){//printf("\r\nALIENTEK MiniSTM32开发板 串口实验\r\n");//printf("正点原子@ALIENTEK\r\n\r\n\r\n");}if(times%200==0)printf("请输入数据,以回车键结束\r\n");  if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.delay_ms(10);   }}
}

因为MAIX BIT发送的是ASCII码的形式,所以我们判断只需要判断是否是对于的ASCII码。
重点来了,你以为到这里就结束了吗,并没有
因为我们stm32的代码是直接使用的串口实验例程,并且只改了波特率,所以需要接收到0d0a后才会结束接收,在这里我们只需要改一下MAIX BIT发送的data就行了,将

open_str = '1'
close_str = '2'

改为

open_str = '1\r\n'
close_str = '2\r\n'

最终效果

MAIX BIT与STM32串口通讯

总结。

MAIX BIT再和STM32进行串口通讯时要注意几点:
1、MAIX BIT的波特率要和STM32的一样,不然会乱码甚至接收错误
2、MAIX BIT发送数据是以ASCII码的形式发送的
3、MAIX BIT发送的数据后需要加0d 0a
4、有待补充…

K210学习笔记(五)——MAIX BIT(K210)与STM32串口通讯相关推荐

  1. 【K210】K210学习笔记五——串口通信

    [K210]K210学习笔记五--串口通信 前言 K210如何进行串口通信 K210串口配置 K210串口发送相关定义 K210串口接收相关定义 K210串口发送接收测试 完整源码 前言 本人大四学生 ...

  2. 【K210】K210学习笔记七——使用K210拍摄照片并在MaixHub上进行训练

    [K210]K210学习笔记七--使用K210拍摄照片并在MaixHub上进行训练 前言 K210准备工作 K210如何拍摄照片 准备工作 拍摄相关代码定义 用K210拍摄到的照片在MaixHub平台 ...

  3. 【K210】K210学习笔记六——MaixHub在线模型训练识别数字

    [K210]K210学习笔记六--MaixHub在线模型训练识别数字 前言 K210准备工作 数据的获取 MaixHub如何在线训练模型 训练模型在K210上的测试 小结 前言 本人大四学生,电赛生涯 ...

  4. K210学习笔记(一) K210与STM32串口通信相关

    文章目录 前言 一.STM32 串口中断 接收K210板子发送的ASCII码整数 转换为 多位整形数据 二.MAIX BIT(K210)与STM32串口通讯 2.1 实现MAIX BIT与XCOM之间 ...

  5. 【K210学习笔记】#MaixPy#(3)人脸检测与人脸识别

    目录 一.人脸检测: 1.烧录模型: 2.示例测试: 二.人脸识别: 1.获取机器码: 2.获取人脸识别模型: 3.烧录专用固件: 4.烧录模型: 5.示例测试: 6.报错解决: 一.人脸检测: 1. ...

  6. K210学习笔记(十二)——MaixHub本地训练模型(Windows)

    文章目录 前言 一.环境配置 1.安装python3.8 2.安装pip 3.安装CUDA10.1 4.安装CUDNN 5.tensorflow安装 6.MaixHub本地训练代码下载 二.本地训练使 ...

  7. K210学习笔记(三) K210与STM32进行串口通信,K210发STM收

    文章目录 前言 一.以/r/n为结尾 二.K210端代码 三.STM32端 3.1 main函数 四.测试结果 4.1当收到1时 4.2当收到2时 4.3 测试视频 总结 前言 前面我们讲了STM32 ...

  8. K210学习笔记(十)——二维码识别

    前言 MAIX BIT(K210)和openmv在传统视觉处理这个方面代码是通用的,掌握K210的色块识别和二维码识别其实也掌握了openmv对应的用法. 一.二维码是什么? 二维码 (2-dimen ...

  9. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用

    本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...

最新文章

  1. npm: 权限阻止修复
  2. SpringBoot技术栈搭建个人博客【项目准备】
  3. oracle闪回保存多久,CSS_oracle 中关于flashback闪回的介绍, 1、必须设定undo保留时间足 - phpStudy...
  4. mysql gender_Mysql第一弹
  5. UI 07 _ 导航视图控制器 与 属性传值
  6. 如何在K8S上玩转TensorFlow ?
  7. 入行老师-郭靖(亦师亦友)同学
  8. volatile 用处
  9. illegalargumentexception是什么异常_实战 | 统一异常处理介绍及实战
  10. node mysql 搭建博客_node.js+Hexo+Git搭建个人博客
  11. 各种排序算法稳定性的探讨
  12. NIO中的ByteBuffer读取中文错误的解决方法:MalformedInputException
  13. SwitchHost使用教程
  14. Ghost Win10 企业版LTSC 2020.05(32位+64位)
  15. iOS APP下载安装时,如果出现此时无法下载安装APP的字样时,一些解决思路
  16. Squid缓存服务器原理与实战演练
  17. Git Bash 默认界面配色分析
  18. Scaled Agile Framework (SAFe) 和产品管理间到底有什么关系 ?
  19. 【逗老师带你考IE】如何快速通过HCIE考试
  20. 毕设论文word撰写:如何实现公式居中,编号右对齐?其实非常简单!

热门文章

  1. JAVA日记之mybatis-1 ----喝最烈的酒.
  2. 谷雪梅 Google中国
  3. Python之服务巡检
  4. redis雪崩、穿透、击穿、热点分别代表什么意思?
  5. 手工编程是指利用计算机完成,CAD CAM考试复习题答案(1)
  6. 《The Witness》:游戏中的建筑学(上)
  7. 美国校园最in俗语大全
  8. [源码解析] 深度学习分布式训练框架 horovod (11) --- on spark --- GLOO 方案
  9. 探索语言交互技术在政务数字化的应用
  10. ORA-01081: 无法启动已在运行的 ORACLE - 请首先关闭它