liehuf-notes liehuf-notes
首页
K230
Verilog
留言板
我的博客 (opens new window)
GitHub (opens new window)
首页
K230
Verilog
留言板
我的博客 (opens new window)
GitHub (opens new window)
  • 1.K230 简单介绍
  • 2.K230 micropython基础
  • 3.K230 FPIOA&GPIO - 一切的根源
  • 4.K230 PWM的玩法
  • 5.K230 UART-发送和接收
    • 1. UART通信基础
      • 1.1 什么是UART?
      • 1.2 UART工作原理
      • 1.3 K230 UART特性
    • 2. UART配置详解
      • 2.1 引脚复用配置
      • 2.2 UART参数配置
      • 2.3 高级配置选项
    • 3. 数据收发实战
      • 3.1 基础数据收发
      • 3.2 高级数据收发
      • 3.3 数据帧处理
    • 4. 实际应用场景
      • 4.1 与传感器通信
      • 4.2 多设备通信
      • 4.3 调试信息输出
    • 5. 性能优化
      • 5.1 缓冲区管理
      • 5.2 超时处理
    • 6. 常见问题与解决方案
      • 6.1 数据丢失问题
      • 6.2 通信不稳定
      • 6.3 数据错误
    • 7. 最佳实践
    • 8. 参考资料
    • 免责声明
  • 6.K230 RTC-时间都去哪了
  • 7.我用定时器定时画个圈圈祝福你
  • 8.修勾别复位,我来喂你
  • 9.哈基摄,给我拍
  • 10.摄像头的基本素养-画面
  • 11.摄像头的猫-在画面上画画
  • K230
猎户f
2025-06-17
目录

5.K230 UART-发送和接收

# K230 UART通信-发送和接收

UART通信原理图

# 1. UART通信基础

# 1.1 什么是UART?

UART(Universal Asynchronous Receiver-Transmitter)是一种串行通信协议,它允许两个设备之间进行异步通信。在K230开发板中,UART是最常用的通信接口之一,常用于:

  • 调试信息输出
  • 与其他设备通信
  • 传感器数据采集
  • 模块间数据传输

# 1.2 UART工作原理

UART通信采用异步方式,主要特点:

  • 不需要时钟信号同步
  • 使用起始位和停止位标识数据帧
  • 支持奇偶校验
  • 可配置的数据位长度

# 1.3 K230 UART特性

K230开发板提供多个UART接口:

  • UART0:默认调试串口
  • UART1:可配置为普通串口
  • UART2:可配置为普通串口
  • UART3:可配置为普通串口

每个UART接口都支持:

  • 最高1.5Mbps波特率
  • 5-8位数据位
  • 1-2位停止位
  • 可选的奇偶校验

# 2. UART配置详解

# 2.1 引脚复用配置

K230的UART引脚需要通过FPIOA进行配置,以下是常用配置:

from machine import FPIOA

fpioa = FPIOA()

# UART0配置(调试串口)
fpioa.set_function(4, FPIOA.UART0_TXD)
fpioa.set_function(5, FPIOA.UART0_RXD)

# UART2配置(示例)
fpioa.set_function(11, FPIOA.UART2_TXD)
fpioa.set_function(12, FPIOA.UART2_RXD)
1
2
3
4
5
6
7
8
9
10
11

# 2.2 UART参数配置

from machine import UART

# 基本配置
uart = UART(UART.UART2, 
            baudrate=115200,    # 波特率
            bits=UART.EIGHTBITS,    # 数据位
            parity=UART.PARITY_NONE,    # 校验位
            stop=UART.STOPBITS_ONE,    # 停止位
            timeout=1000)    # 超时时间(毫秒)
1
2
3
4
5
6
7
8
9

# 2.3 高级配置选项

# 设置接收缓冲区大小
uart.set_rx_buffer_size(1024)

# 设置发送缓冲区大小
uart.set_tx_buffer_size(1024)

# 启用流控制
uart.set_flow_control(UART.FLOW_CONTROL_RTS_CTS)
1
2
3
4
5
6
7
8

# 3. 数据收发实战

# 3.1 基础数据收发

# 发送字符串
uart.write("Hello World")

# 发送字节数据
uart.write(b'\x01\x02\x03')

# 读取数据
data = uart.read()
if data:
    print("Received:", data)
1
2
3
4
5
6
7
8
9
10

# 3.2 高级数据收发

# 读取指定长度数据
data = uart.read(10)  # 读取10个字节

# 读取直到特定字符
data = uart.read_until(b'\n')  # 读取直到换行符

# 检查是否有数据可读
if uart.any():
    data = uart.read()
1
2
3
4
5
6
7
8
9

# 3.3 数据帧处理

def send_frame(data):
    # 添加帧头
    frame = b'\xAA\x55' + data
    # 添加校验和
    checksum = sum(frame) & 0xFF
    frame += bytes([checksum])
    # 发送数据
    uart.write(frame)

def receive_frame():
    # 等待帧头
    while uart.read(2) != b'\xAA\x55':
        pass
    # 读取数据长度
    length = uart.read(1)[0]
    # 读取数据
    data = uart.read(length)
    # 读取校验和
    checksum = uart.read(1)[0]
    # 验证校验和
    if (sum(data) & 0xFF) == checksum:
        return data
    return None
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 4. 实际应用场景

# 4.1 与传感器通信

def read_sensor():
    # 发送读取命令
    uart.write(b'\x01\x03\x00\x00\x00\x01\x84\x0A')
    # 等待响应
    response = uart.read(7)
    if response and len(response) == 7:
        # 解析数据
        value = (response[3] << 8) | response[4]
        return value
    return None
1
2
3
4
5
6
7
8
9
10

# 4.2 多设备通信

class UARTDevice:
    def __init__(self, uart, address):
        self.uart = uart
        self.address = address
    
    def send_command(self, command, data=None):
        # 构建命令帧
        frame = bytes([self.address, command])
        if data:
            frame += data
        # 发送数据
        self.uart.write(frame)
        # 等待响应
        return self.uart.read()
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 4.3 调试信息输出

class DebugUART:
    def __init__(self, uart):
        self.uart = uart
    
    def log(self, level, message):
        timestamp = time.time()
        log_msg = f"[{timestamp:.3f}] {level}: {message}\n"
        self.uart.write(log_msg.encode())
1
2
3
4
5
6
7
8

# 5. 性能优化

# 5.1 缓冲区管理

# 设置合适的缓冲区大小
uart.set_rx_buffer_size(2048)  # 根据实际需求调整
uart.set_tx_buffer_size(2048)

# 定期清理缓冲区
def clear_buffers():
    uart.deinit()
    uart.init()
1
2
3
4
5
6
7
8

# 5.2 超时处理

def read_with_timeout(timeout_ms=1000):
    start_time = time.ticks_ms()
    while time.ticks_diff(time.ticks_ms(), start_time) < timeout_ms:
        if uart.any():
            return uart.read()
        time.sleep_ms(10)
    return None
1
2
3
4
5
6
7

# 6. 常见问题与解决方案

# 6.1 数据丢失问题

  • 原因:缓冲区溢出或波特率不匹配
  • 解决方案:
    • 增加缓冲区大小
    • 降低波特率
    • 实现流控制

# 6.2 通信不稳定

  • 原因:硬件连接或电平不匹配
  • 解决方案:
    • 检查接线
    • 添加上拉电阻
    • 使用电平转换器

# 6.3 数据错误

  • 原因:干扰或参数配置错误
  • 解决方案:
    • 添加校验机制
    • 检查通信参数
    • 增加重传机制

# 7. 最佳实践

  1. 通信参数配置

    • 使用标准波特率(9600、115200等)
    • 根据实际需求选择数据位和停止位
    • 必要时启用校验位
  2. 错误处理

    • 实现超时机制
    • 添加数据校验
    • 实现重传机制
  3. 性能优化

    • 合理设置缓冲区大小
    • 使用中断方式处理数据
    • 实现数据帧机制

# 8. 参考资料

  1. K230官方技术文档
  2. MicroPython UART模块文档
  3. 串口通信协议规范

# 免责声明

本文档及所有内容(包括文字、图片、代码等)均为作者基于嘉立创庐山派K230开发板公开资料和个人使用经验整理分享,仅供学习和技术交流之用。

所有涉及的品牌名称、商标、图片及相关资源均归嘉立创官方所有,未经授权不得用于商业宣传或其他用途。

作者与嘉立创官方无任何隶属或代理关系,内容不构成任何形式的官方承诺或保证。

用户在使用相关资源时,应遵守相应的开源协议和法律法规,确保合法合规。

如涉及版权问题,请联系作者或嘉立创官方处理。


帮助我们改善此页面 (opens new window)
上次更新: 2025/07/12, 16:01:22
4.K230 PWM的玩法
6.K230 RTC-时间都去哪了

← 4.K230 PWM的玩法 6.K230 RTC-时间都去哪了→

Theme by Vdoing | Copyright © 2025-2025 Eryajf | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式