CH582 2线SPI主机通讯问题求助!
void SPI0_MasterDefInit(void)
{
    R8_SPI0_CLOCK_DIV = 64; // 主频时钟4分频
    R8_SPI0_CTRL_MOD = RB_SPI_ALL_CLEAR;
    R8_SPI0_CTRL_MOD = RB_SPI_SCK_OE | RB_SPI_MST_SCK_MOD;
    R8_SPI0_CTRL_CFG |= RB_SPI_AUTO_IF;     // 访问BUFFER/FIFO自动清除IF_BYTE_END标志
    R8_SPI0_CTRL_CFG &= ~RB_SPI_DMA_ENABLE; // 不启动DMA方式
}
void SPI0_Recv_nByte(uint8_t *pbuf, uint16_t len)
{
    uint16_t readlen;

    readlen = len;
    R32_PB_DIR &= ~GPIO_Pin_15;
    R8_SPI0_CTRL_MOD |= RB_SPI_FIFO_DIR; // 设置数据方向为输入
    R8_SPI0_CTRL_MOD &= ~RB_SPI_MISO_OE; //禁止MISO输出
    R16_SPI0_TOTAL_CNT = len;            // 设置需要接收的数据长度,FIFO方向为输入长度不为0则会启动传输 */
    R8_SPI0_INT_FLAG = RB_SPI_IF_CNT_END;
    while(readlen)
    {
        if(R8_SPI0_FIFO_COUNT)
        {
            *pbuf = R8_SPI0_FIFO;
            pbuf++;
            readlen--;
        }
    }
}
void SPI0_Send_nByte(uint8_t *pbuf, uint16_t len)
{
    uint16_t sendlen;

    sendlen = len;
    R32_PB_DIR |= GPIO_Pin_15;
    R8_SPI0_CTRL_MOD &= ~RB_SPI_FIFO_DIR; // 设置数据方向为输出
    R8_SPI0_CTRL_MOD |= RB_SPI_MISO_OE;
    R16_SPI0_TOTAL_CNT = sendlen;         // 设置要发送的数据长度
    R8_SPI0_INT_FLAG = RB_SPI_IF_CNT_END;
    while(sendlen)
    {
        if(R8_SPI0_FIFO_COUNT < SPI_FIFO_SIZE)
        {
            R8_SPI0_FIFO = *pbuf;
            pbuf++;
            sendlen--;
        }
    }
    while(R8_SPI0_FIFO_COUNT != 0); // 等待FIFO中的数据全部发送完成
}

以上三个函数是我跟库函数修改,请帮忙看看逻辑是否有问题,现在无法正常通讯。

结下贴,因为用的是MISO_引脚,所以需要引脚重映射一下。GPIOPinRemap(ENABLE, RB_PIN_SPI0);


只有登录才能回复,可以选择微信账号登录