545|0

88

帖子

3

TA的资源

一粒金砂(高级)

楼主
 

[嘉楠 CanMV K230]测评 ④UART [复制链接]

 
本帖最后由 不爱胡萝卜的仓鼠 于 2024-10-3 15:17 编辑

        串口是开发板与外界通讯的很重要的一个外设,日志输出、与其他设备通讯交互都会用到,因此在点灯之后,我们就来看看串口的使用

 

一.K230 UART资源介绍及开发板串口引出情况

        根据官网的框图和datasheet介绍可以得知,K230有5个串口

  • UART

    • Support 5 UART interface

    • 9-bit serial data support

    • False start bit detection

    • Programmable fractional baud rate support

    • APB data bus widths of 32

    • Additional DMA interface signals for compatibility with DMA interface, DMA interface signal active low

    • Transmit and receive FIFO depths of 32, Supports 32x32-bit transmit first-in, first-out (FIFO) and 32x32-bit RX FIFO, Internal FIFO (RAM)

    • Busy functionality

    • Functionality based on the 16550 industry standard

      • Programmable character properties, such as:

        • Number of data bits per character (5-8)

        • Optional parity bit (with odd, even select or Stick Parity)

        • Number of stop bits (1, 1.5 or 2)

      • Line break generation and detection

      • DMA signaling with two programmable modes

      • Prioritized interrupt identification

    • Programmable FIFO enable/disable

    • Separate system resets for each clock domain to prevent metastability

        其中UART0被小核sh占用,UART3被大核sh占用。留给用户的为UART1,UART2,UART4

        这5个串口对应的引脚如下

       

        接下来我们看看开发板关于串口引出了哪些,开发板正面把串口0、1、3引出了,如下图所示

        背面把串口2引出了

        还有串口4没有被引出,串口4对应的引脚是48、49。我看了一下开发板的原理图,这两个引脚被0号摄像头占用了

 

二.日志输出

        串口一个很重要的功能就是日志输出,在K230调试过程中如果我输出日志怎么办?需要特别为了串口占用一个串口硬件吗?会不会有点浪费。设计师已经考虑到这个问题了,还记得在第一篇文章中提到的,开发板插上电脑就会出现一个盘符还有一个串口。对喽,这个串口就是一个虚拟串口,我们就可以通过它输出日志了。

        使用这个虚拟串口输出日志也非常简单只需要使用printf函数即可,测试代码如下

#输出文本
print("test")

#输出变量
name = "01Studio CanMV K230"
print(f"开发板名称: {name}")
year = 2024
month = 9
day = 30
print(f"日期: {year}-{month}-{day}")

        在IDE中就有这个虚拟串口的输出框,我们可以直接使用。结果如下

 

三.串口收发

        串口还有一个作用就是和其他开发板或者上位机通讯,这里我们就来实现一下串口数据的收发。我直接使用背面的串口2,与CH340接线如下

 

        这里我非常想吐槽一下,这个附赠的线的线序太坑爹了,红黑线的线序是反的,如果接线前不看线序,按照默认规则把黑色接到GND上就短路了!(拍完照片后,我就把线序调整了,后续如果有这根线的照片,那就是已经调整过线序的了)

 

        嘉楠官方关于UART的文档:https://developer.canaan-creative.com/k230_canmv/main/zh/api/machine/K230_CanMV_UART%E6%A8%A1%E5%9D%97API%E6%89%8B%E5%86%8C.html

 

        我们参考这个文档写一个测试代码。先测试串口数据的发送,然后一直接收数据,把收到的数据从日志串口和串口2发出去。代码如下

        这里需要注意一定要在开发板通电后调用一次fpioa.set_function函数,把引脚功能配置为串口,否则串口功能是不会生效的

from machine import UART
from machine import FPIOA
import time

fpioa = FPIOA()

#初始化串口2
fpioa.set_function(11,FPIOA.UART2_TXD)
fpioa.set_function(12,FPIOA.UART2_RXD)
my_uart = UART(UART.UART2, baudrate=115200, bits=UART.EIGHTBITS, parity=UART.PARITY_NONE, stop=UART.STOPBITS_ONE)

#发送数据测试
my_uart.write('UART2 send test\r\n')

#一直接收数据
while True:
    #读取一行,并以一个换行符结束。
    recv_data = my_uart.readline()
    #如果有读到数据
    if recv_data != b'':
        #把收到数据通过日志串口打印出来
        print(recv_data)
        #把收到的数据原样从串口2发出去
        my_uart.write(recv_data)
    time.sleep(0.1)

        结果如下

 

 

 

 

 

点赞 关注
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表