|
发表于 2021-9-18 09:52:51
|
显示全部楼层
1、手册明确说明不应用BUSY位来处理发送接收,BUSY位应该用来确定SPI是否全部发送完成。只有BUSY位=0才可以拉高片选CS或者关闭SPI,否则可能导致最后一个数据传输不完整。
2、你一直强调读取SR错误,在我看来寄存器是0x02但是读到是0x00这叫读取错误。你这里我认为你读到0X00的时候寄存器本身就是0x00。所以我认为读取没有错误。
3、关于读取错误的验证:你用之前不加NOP的代码连续发两三个数据,不要循环发,直接写。然后断点放到第二或者第三个数据的相同位置,看看读取SR是不是0x81或者0x01(RXNE=1)。如果是说明读取没问题。
4、不知道你有没有去研究SPI发送逻辑。BUSY位:当发送缓冲区和移位寄存器都没有数据的时候=0。
TXE 位:当发送缓冲区没有数据时候=1。
SPI发送过程(第一个数据,按照你判断BUSY位的操作):
>SPI开启 ------BUSY=0,TXE=0,RXNE=0。
>软件向发送缓冲区写入数据。 -----BUSY=0,TXE=1,RXNE=0。
>SPI硬件将缓冲区数据转入移位寄存器 ------BUSY=0,TXE=0,RXNE=0。
>SPI硬件开始将缓冲区数据发出 ------BUSY=1,TXE=1,RXNE=0。
>数据发送完成 ------BUSY=0,TXE=1,RXNE=1。
>第二个数据写入缓冲区
。。。。。。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|