You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32实现SPI收发数据转UART输出用于SI4362调试的需求

解决方案:将SPI收发字节转换为可读十六进制通过UART输出

要解决SPI收发数据的UART调试输出问题,核心是把二进制字节转换成人类可读的十六进制字符串。以下是具体实现方案:

核心转换函数

这个函数可以将任意长度的uint8_t数组转换为带格式的十六进制字符串,方便终端查看:

#include <stdio.h>
#include <stdint.h>
#include <string.h>

// 将uint8_t字节数组转换为十六进制字符串,格式为"0xXX 0xXX ..."
void bytes_to_hex_str(uint8_t *bytes, uint16_t len, char *str_buf, uint16_t buf_size) {
    // 参数合法性检查
    if (bytes == NULL || str_buf == NULL || len == 0 || buf_size < len * 5 + 2) {
        return;
    }

    char *buf_ptr = str_buf;
    for (uint16_t i = 0; i < len; i++) {
        // 每个字节格式化为"0xXX ",占5个字符
        buf_ptr += sprintf(buf_ptr, "0x%02X ", bytes[i]);
    }
    // 添加换行符,保证每次输出独立一行
    sprintf(buf_ptr, "\r\n");
}

适配你的SPI调试代码

基于你提供的代码,修改UART输出部分,替换直接发送字节的逻辑:

首先定义足够大的UART缓冲区:

#define UART_BUF_SIZE 128
char uart_buf[UART_BUF_SIZE];
uint8_t spi_buf[1];
uint16_t uart_buf_len;

然后修改主逻辑中的输出部分:

uart_buf_len = sprintf(uart_buf, "\r\nSPI Test\r\n");
HAL_UART_Transmit(&huart1, (uint8_t*)uart_buf, uart_buf_len, 100);

HAL_GPIO_WritePin(SDN_GPIO_Port, SDN_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(SS_GPIO_Port, SS_Pin, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1, RF_POWER_UP, 7, 50);

// 转换发送的SPI数据为十六进制字符串并输出
bytes_to_hex_str(RF_POWER_UP, 7, uart_buf, UART_BUF_SIZE);
uart_buf_len = strlen(uart_buf);
HAL_UART_Transmit(&huart1, (uint8_t*)uart_buf, uart_buf_len, 100);

do {
    HAL_SPI_Receive(&hspi1, spi_buf, 1, 100);
    // 转换接收的单个字节为十六进制字符串并输出
    bytes_to_hex_str(spi_buf, 1, uart_buf, UART_BUF_SIZE);
    uart_buf_len = strlen(uart_buf);
    HAL_UART_Transmit(&huart1, (uint8_t*)uart_buf, uart_buf_len, 100);
} while (*spi_buf != 0xFF);

HAL_GPIO_WritePin(SS_GPIO_Port, SS_Pin, GPIO_PIN_SET);

关键说明

  • 格式自定义:如果不需要0x前缀,可将sprintf格式改为"%02X ",减少输出长度。
  • 缓冲区大小:每个字节转换后占5个字符(含空格),加上换行符,计算缓冲区大小时要留足余量。
  • 时序验证:调试输出后,可对比SI4362 datasheet中的预期响应,确认SPI收发的数据是否符合协议要求,定位初始化失败的原因。

内容的提问来源于stack exchange,提问作者Ryan TC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 06:01:17