打印

GD32H737 SPI datasize = 16 bit时无法收发

[复制链接]
2315|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Hi雪飘人间|  楼主 | 2024-8-12 15:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这段代码执行的是SPI收发功能,使用仿真器debug时会停在spi_i2s_data_receive处(等待接收标志位),但是如果把datasize改成8bit就能正常收发数据,请问是什么原因呢?
uint32_t Spi_Transfer16(SPI_BusDef *spi, uint16_t *TxBuf, uint16_t *RxBuf,uint16_t len)
{
    uint32_t ret= 0;
    Spi_Nss(spi->Nss, 0);
    spi_master_transfer_start(spi->Periph, SPI_TRANS_START);
    for(int i = 0; i<len; i++)
    {
        while (RESET == (SPI_STAT(spi->Periph) & SPI_FLAG_TP));
        spi_i2s_data_transmit(spi->Periph, TxBuf[i]);
        RxBuf[i] = spi_i2s_data_receive(spi->Periph);
    }
    while (RESET == spi_i2s_flag_get(spi->Periph, SPI_FLAG_TC));
    Spi_Nss(spi->Nss, 1);
    return ret;
}

使用特权

评论回复
沙发
qintian0303| | 2024-8-13 15:34 | 只看该作者
你这个是怎么测试的?自收自发吗?主要检查一下配置是不是16bit的

使用特权

评论回复
板凳
chenjun89| | 2024-8-14 08:17 | 只看该作者
对端设备是什么?怎么测试的?

使用特权

评论回复
地板
flycamelaaa| | 2024-8-14 16:03 | 只看该作者
SPI的初始化配置可能未正确设置datasize为16 bit

使用特权

评论回复
5
elephant00| | 2024-8-14 16:08 | 只看该作者
更新固件或驱动

使用特权

评论回复
6
powerantone| | 2024-8-14 17:56 | 只看该作者
时钟极性(CPOL)和时钟相位(CPHA)设置不正确,也可能导致数据收发异常。

使用特权

评论回复
7
stormwind123| | 2024-8-14 18:09 | 只看该作者
主从机配置不一致

使用特权

评论回复
8
probedog| | 2024-8-14 19:12 | 只看该作者
SPI接口的SCK、MISO、MOSI、NSS等引脚连接不正确或存在断路、短路问题。

使用特权

评论回复
9
classroom| | 2024-8-14 19:59 | 只看该作者
外部硬件(如传感器、存储器等)可能损坏或不支持16位数据通信。

使用特权

评论回复
10
两只袜子| | 2024-8-14 21:26 | 只看该作者
可能是固件或驱动问题

使用特权

评论回复
11
jcky001| | 2024-8-14 21:56 | 只看该作者
固件库或驱动程序可能存在bug

使用特权

评论回复
12
cr315| | 2024-8-14 22:27 | 只看该作者
SPI通信线路可能受到外部电磁干扰或噪声影响,导致数据收发失败。

使用特权

评论回复
13
duo点| | 2024-8-14 23:06 | 只看该作者
添加适当的滤波器和屏蔽措施试试

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝