【GD32F103 SPI 2线仅接收模式】

一、背景

最近项目需要,一个DUT芯片需要使用2线的SPI接收协议。使用STM32F103C8芯片调好了代码,将代码移植到GD32上不能运行。
SPI配置:配置成16bit,2线仅接收模式

二、STM32

STM32配置成2线接收模式,使用SPI_Cmd开关函数,实现SPI_CLK的发送,从而实现数据传输。
void SPI_RD2Byte(uint16_t *RxDat)
{
DUT_CS_L;
DUT_RD_L;
SPI_Cmd(SPI1,ENABLE);
while((SPI1->SR & SPI_I2S_FLAG_RXNE) == RESET);
while((SPI1->SR & SPI_I2S_FLAG_BSY) == RESET); //ST MCU not need,GD32 must have
*RxDat = SPI1->DR;
SPI_Cmd(SPI1,DISABLE);
DUT_RD_H;
DUT_CS_H;
}
同样的代码,移植到GD32不能正常运行,经过一番折腾之后,顺利解决这个问题。

三、GD32

GD32配置成2线全双工模式,正常发送数据,没有对应的管脚,实现SPI_CLK的产生,从而实现数据传输。
void SPI_RD2Byte(uint16_t *RxDat)
{
DUT_CS_L;
DUT_RD_L;
*RxDat = SPI1->DR; //clear Receive Buffer
SPI1->DR = 0xFFFF; //send data without PIN,just send SCLK
while((SPI1->SR & SPI_I2S_FLAG_TXE) == RESET);
while((SPI1->SR & SPI_I2S_FLAG_RXNE) == RESET);
while((SPI1->SR & SPI_I2S_FLAG_BSY) == RESET);
*RxDat = SPI1->DR;
DUT_RD_H;
DUT_CS_H;
}

四、小结

对于SPI总线,2线仅接收模式的关键在于怎样正确产生SPI_CLK。不同的MCU实现方式可能因为IP不一样,从而实现方式不一样。但是完全可以配置成全双工正常模式,构造一个虚拟的发送,从而产生时钟,实现DUT芯片把数据吐出来的目的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值