最近在做stm32驱动CI24R1这块射频芯片,该芯片DATA引脚复用了MISO/MOSI/IRQ功能,故选用spi半双工主机模式 cube配置如下:
此时发现对从机进行读操作时,读出的值总是上一个操作的值,而且读多字节的数据时,总是和上一个读操作的数据发生错位,正确数据为 “0xFF,0xFF,0x11,0x22,0x33,0x44,0x55,0xAA”,结果如下:
state为从机状态变量,以此来判定是否接收完成。但总是被前一句的数据占位。定位到spi的DR寄存器,在操作完之后没有清除。同时也发现只有全双工时,hal库才会加上清除标志位操作
按照这个逻辑,那就在接收和发送函数上手动加上就应该可以了,
再次测试,成功了
stm32F103驱动CI24R1射频芯片完整代码链接(包括接受发送端两个工程):