Bootstrap

STM32与K210串口通信

摘要: 本文章详细介绍了如何实现 STM32 与 K210 之间的串口通信。首先对 STM32 和 K210 进行了简要介绍,然后分别阐述了它们的串口配置方法,包括硬件连接和软件编程。通过示例代码,展示了数据发送和接收的过程,并对可能出现的问题进行了分析和解决。

一、引言

在嵌入式系统开发中,不同芯片之间的通信是常见的需求。串口通信作为一种简单、可靠的通信方式,被广泛应用于各种场景。STM32 和 K210 是两款常用的嵌入式芯片,实现它们之间的串口通信具有重要的实际意义。

二、STM32 和 K210 简介

(一)STM32
STM32 系列是意法半导体(STMicroelectronics)推出的一系列基于 ARM Cortex-M 内核的 32 位微控制器。具有高性能、低功耗、丰富的外设资源等特点,广泛应用于工业控制、消费电子、智能家居等领域。

(二)K210
K210 是一款国产的 RISC-V 架构芯片,具有强大的图像处理能力和人工智能计算能力,适用于智能视觉等应用场景。

三、硬件连接

要实现 STM32 与 K210 的串口通信,首先需要进行硬件连接。通常,我们使用 TX(发送)和 RX(接收)引脚来进行数据传输。

假设 STM32 的串口 1(USART1)与 K210 进行通信,STM32 的 PA9 引脚(USART1_TX)连接到 K210 的 RX 引脚,STM32 的 PA10 引脚(USART1_RX)连接到 K210 的 TX 引脚。

同时,需要确保共地连接,以保证信号的参考电平一致。

四、STM32 串口配置

(一)STM32 时钟配置
在 STM32 中,首先需要配置系统时钟,使能 USART1 时钟。

#include "stm32f10x.h"

void SystemClock_Config(void)
{
    // 配置系统时钟
    //...
}

void USART1_Clock_Enable(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
}

(二)STM32 串口初始化

void USART1_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;

    // 使能 GPIOA 时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    // 配置 PA9 和 PA10 为复用推挽输出和浮空输入
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    // 配置 USART1
    USART_InitStructure.USART_BaudRate = 115200;  // 波特率
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;  // 数据位 8 位
    USART_InitStructure.USART_StopBits = USART_StopBits_1;  // 停止位 1 位
    USART_InitStructure.USART_Parity = USART_Parity_No;  // 无奇偶校验
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;  // 无硬件流控制
    USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;  // 收发模式

    USART_Init(USART1, &USART_InitStructure);

    // 使能 USART1
    USART_Cmd(USART1, ENABLE);
}

(三)STM32 数据发送函数

void USART1_SendData(uint8_t *data, uint16_t len)
{
    while (len--)
    {
        while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);  // 等待发送缓冲区为空
        USART_SendData(USART1, *data++);
    }
}

(四)STM32 数据接收中断处理函数

void USART1_IRQHandler(void)
{
    if (USART_GetITStatus(USART1, USART_IT_RXNE)!= RESET)  // 接收中断
    {
        // 处理接收数据
        uint8_t data = USART_ReceiveData(USART1);
        //...
    }
}

五、K210 串口配置

(一)K210 相关库导入

import machine

(二)K210 串口初始化

uart = machine.UART(1, baudrate=115200)  # 初始化 UART1,波特率 115200

(三)K210 数据发送函数

def k210_send_data(data):
    uart.write(data)

(四)K210 数据接收函数

def k210_receive_data():
    if uart.any():
        return uart.read()
    else:
        return None

六、通信测试

(一)STM32 发送数据,K210 接收
在 STM32 中调用发送函数发送数据,在 K210 中不断查询是否有数据接收。

(二)K210 发送数据,STM32 接收
在 K210 中调用发送函数发送数据,在 STM32 的接收中断处理函数中处理接收的数据。

七、可能出现的问题及解决方法

(一)波特率不匹配
确保 STM32 和 K210 的波特率设置一致,否则会导致数据传输错误。

(二)硬件连接错误
仔细检查 TX 和 RX 引脚的连接是否正确,以及共地是否良好。

(三)数据丢失或错误
可能是由于缓冲区溢出或中断处理不当导致。合理设置缓冲区大小,优化中断处理逻辑。

八、总结

通过以上步骤,成功实现了 STM32 与 K210 之间的串口通信。在实际应用中,可以根据具体需求进行数据的传输和处理,为不同芯片之间的协同工作提供了有效的通信手段。

以上就是关于 STM32 与 K210 串口通信的详细介绍,希望对您有所帮助。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

;