[技术问答] 硬件SPI主从机通信问题

[复制链接]
 楼主| wsgsggs 发表于 2025-8-2 17:18 | 显示全部楼层 |阅读模式
求助大神,我用的M482做主机,nano100做从机。使用硬件spi通信,主机给从机发送5个字节,从机每次都只能收到最后一个字节,这个是为什么。从机是通过中断来接收消息的。
主机发送代码:
void SPI_Send_Array(uint8_t *data, uint32_t length)
{
    uint32_t i;  
    // 拉低片选信号,开始传输
                SPI_CS_Control(1);   
    // 循环发送数据
    for(i = 0; i < length; i++)
    {
        // 等待TX FIFO不满
        while(SPI_GET_TX_FIFO_FULL_FLAG(SPI0));        
        // 写入数据到TX FIFO
        SPI_WRITE_TX0(SPI0, data[i]);        
        // 等待传输完成
        while(SPI_IS_BUSY(SPI0));
    }   
    // 拉高片选信号,结束传输
                SPI_CS_Control(0);
}
从机中断接收:
void SPI0_IRQHandler(void)
{   
    static uint32_t rx_index = 0;   
    // Check RX FIFO interrupt flag
    if(SPI_GET_STATUS(SPI0) & SPI_STATUS_RXINT_STS_Msk)
    {
        // Read data from RX FIFO while it's not empty
        while(!SPI_GET_RX_FIFO_EMPTY_FLAG(SPI0) && rx_index < 5)
        {
            rx_data[rx_index] = SPI_READ_RX0(SPI0);
            rx_index++;
            // When all 5 bytes are received, process or reset
            if(rx_index == 5)
            {
                rx_index = 0;
            }
        }
    }   
                SPI_CLR_UNIT_TRANS_INT_FLAG(SPI0);
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

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