以下是微五科技CF5010RBT60开发板与庐山派开发板通过UART串口通信的详细步骤:
一、硬件连接
-
确定通信接口
- CF5010RBT60:使用USART1(兼容STM32F103RBT6的引脚定义),对应引脚为PA9(TX)和PA10(RX),位于开发板的排针J5(参考摘要7的引脚定义)。
- 庐山派K230:使用UART2,对应引脚为GPIO11(TX)和GPIO12(RX),位于开发板的GH1.25-4P带锁接口(参考摘要2、3)。
-
电平转换(关键步骤)
CF5010RBT60的USART1输出为3.3V电平,而庐山派K230的UART2默认支持5V电平。为避免损坏设备,需添加电平转换电路:
- 方案一:使用74HCT125四总线缓冲器(或类似芯片),将CF5010的TX(3.3V)转换为5V连接至庐山派的RX,同时将庐山派的TX(5V)通过74HCT125转换为3.3V连接至CF5010的RX(参考摘要24)。
- 方案二:使用N沟道MOS管(如2N7002)搭建简易电平转换电路,具体连接方式可参考摘要28。
-
物理连接
- CF5010的PA9(TX)→ 电平转换器输入 → 庐山派的GPIO11(RX)。
- 庐山派的GPIO12(TX)→ 电平转换器输入 → CF5010的PA10(RX)。
- 两者的GND引脚直接相连,确保共地。
二、CF5010RBT60软件配置(基于Eclipse IDE)
-
开发环境准备
- 安装微五科技提供的Eclipse集成开发环境及配套SDK(参考摘要7、17)。
- 导入USART1通信示例工程,或新建工程并配置USART1外设。
-
USART1初始化代码
参考STM32F103的USART配置逻辑(CF5010硬件兼容),代码示例如下:
#include "cf5010.h"
void USART1_Init(void) {
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
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);
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_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);
USART_Cmd(USART1, ENABLE);
}
void USART1_SendByte(uint8_t Byte) {
USART_SendData(USART1, Byte);
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}
void USART1_SendString(char* String) {
while (*String) {
USART1_SendByte(*String++);
}
}
-
主函数逻辑
在main()中调用初始化函数并测试通信:
int main(void) {
USART1_Init();
while (1) {
USART1_SendString("Hello from CF5010!\r\n");
delay_ms(1000);
}
}
三、庐山派K230软件配置(基于MicroPython)
-
开发环境准备
- 安装CanMV IDE并连接庐山派开发板(参考摘要4)。
- 确保庐山派已烧录最新的CanMV固件(支持UART2用户模式)。
-
UART2初始化代码
使用MicroPython的machine.UART模块,代码示例如下:
from machine import UART, FPIOA
fpioa = FPIOA()
fpioa.set_function(11, FPIOA.UART2_TXD)
fpioa.set_function(12, FPIOA.UART2_RXD)
uart = UART(UART.UART2, baudrate=115200, bits=8, parity=None, stop=1)
while True:
data = uart.read()
if data:
print("Received from CF5010:", data.decode())
uart.write("Message received by LuShan-Pi!\r\n")
四、测试与验证
-
硬件检查
- 确保电平转换电路连接正确,无短路或断路。
- 检查开发板供电是否正常(CF5010通过Type-C,庐山派可通过USB或外部电源)。
-
软件调试
- CF5010:编译并下载程序,观察串口输出是否正常(可通过板载USB转UART芯片连接电脑,使用串口助手监控)。
- 庐山派:在CanMV IDE的串行终端中观察是否接收到CF5010发送的消息,同时检查庐山派是否能正确回传数据。
-
异常处理
- 无数据接收:
- 检查波特率、数据位、停止位等参数是否一致。
- 使用逻辑分析仪或示波器检测TX/RX引脚波形,确认信号是否正常传输。
- 乱码:
- 检查电平转换电路是否正常工作,确保3.3V与5V信号转换正确。
- 确认代码中是否遗漏了字符串结束符(如
\r\n)。
五、扩展建议
-
通信协议优化
- 在应用层添加校验和(如CRC16)或数据帧头/尾,提高通信可靠性。
- 使用DMA传输大数据量,减少CPU占用(参考摘要13、14)。
-
其他通信接口
- 若需更高速度,可尝试SPI通信。CF5010的SPI1引脚为PA5(SCK)、PA6(MISO)、PA7(MOSI),庐山派可通过FPIOA配置对应引脚(参考摘要9)。
通过以上步骤,CF5010RBT60与庐山派可实现稳定的串口通信。关键在于电平转换的正确实现及双方参数的严格匹配。
|