[其他ST产品] SPI HAL库。每次传输1个字节不对,一次传输多个字节正常。

[复制链接]
 楼主| 小库里 发表于 2025-6-28 21:56 | 显示全部楼层 |阅读模式
pi, spi, HA, TE, ip
本帖最后由 小库里 于 2025-6-28 22:11 编辑

将一个项目移植到cubeIDE上的freertos。用一个wizNET的W5500作为网络接口,与芯片通信有问题。如果一次就把数据发送到芯片上,能正常工作。
WIZCHIP_CRITICAL_ENTER();
WIZCHIP.CS._ return();
addrsel| =(_W5500_SPI_WRITE_)|#25105;(SPI_VDM_OP);
int [4];
addr[0] =((AddrSel & 0x00FF0000)>> 16);
addr[1] =((AddrSel & 0x0000FF00)>> 8);
addr[2] =((AddrSel & 0x00000FF)>> 0);
int [3];
//wizchip_spi_write_bunch(addr,4); -->
uint32_t res = HAL_SPI_Transmit(wiz->spi,addr,4,wiz->spi_timeout);

WIZCHIP.CS._ return();
WIZCHIP_CRITICAL_EXIT();
但是如果我像这样以8位1字节发送,就工作不正常。
  WIZCHIP_CRITICAL_ENTER();
   WIZCHIP.CS._select();
   AddrSel |= (_W5500_SPI_WRITE_ | _W5500_SPI_VDM_OP_);
   wizchip_spi_write_byte((AddrSel & 0x00FF0000) >> 16);
   wizchip_spi_write_byte((AddrSel & 0x0000FF00) >>  8);
   wizchip_spi_write_byte((AddrSel & 0x000000FF) >> 0);
   wizchip_spi_write_byte(wb);
   //Looks like this
//   void wizchip_spi_write_byte(uint8_t wb)
//   {
//    wiz5500 *wiz = ð
//
//    uint32_t res = HAL_SPI_Transmit(wiz->spi, (uint8_t)wb, 1, wiz->spi_timeout);
//   }
   WIZCHIP.CS._deselect();
   WIZCHIP_CRITICAL_EXIT();
错误提示Update 1 -> you can’t send a ‘0’ with halspi has this in it
if ((pData == NULL) || (Size == 0U))
{
   errorcode = HAL_ERROR;
   goto error;
}

xiaoqizi 发表于 2025-8-2 19:42 | 显示全部楼层
HAL库内部逻辑存在缺陷,未处理该标志位的清理工作
木木guainv 发表于 2025-8-2 21:55 | 显示全部楼层
当使用DMA批量传输时,硬件自动管理FIFO和标志位,无需软件干预
Jiangxiaopi 发表于 2025-8-3 08:42 | 显示全部楼层
若未严格按“写入数据→等待TXTF置位→清除标志”的顺序操作,可能导致数据截断或错位
荣陶陶 发表于 2025-8-3 11:13 | 显示全部楼层
SPI数据寄存器可能在初始化后残留旧数据
Zhiniaocun 发表于 2025-8-3 13:39 | 显示全部楼层
若采用软件模式管理片选,且未在恰当的时机切换电平状态,可能造成从机误判帧起始位置,进而引发数据偏移或截断
Zuocidian 发表于 2025-8-3 15:52 | 显示全部楼层
将接收FIFO阈值从默认值改为[size=0.875]SPI_FIFO_THRESHOLD_01DATA,防止数据滞留于缓冲区
Puchou 发表于 2025-8-3 18:31 | 显示全部楼层
确认主从设备的波特率设置一致,尤其当使用较高频率时,过快的速率可能导致采样点偏离中心,造成亚稳态错误
Xiashiqi 发表于 2025-8-3 20:45 | 显示全部楼层
通过示波器观察CLK波形质量,确保边沿陡峭且无抖动
小海师 发表于 2025-8-3 23:03 | 显示全部楼层
确认主从设备的波特率设置一致,尤其当使用较高频率时,过快的速率可能导致采样点偏离中心,造成亚稳态错误
Haizangwang 发表于 2025-8-4 09:25 | 显示全部楼层
相较于软件控制的NSS,硬件自动片选可避免因代码执行延迟导致的时序违例,显著提升多字节与单字节混合传输的稳定性
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

38

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部