OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4218|回复: 0

好奇问一下网上SPI的收发程序有点不一样,怎回事呢?

[复制链接]

9

主题

56

帖子

0

精华

高级会员

Rank: 4

积分
640
金钱
640
注册时间
2018-8-9
在线时间
150 小时
发表于 2022-4-22 16:42:13 | 显示全部楼层 |阅读模式
本帖最后由 maidilong 于 2022-4-22 16:53 编辑

我经常看网上SPI的读写函数:

方式1:
u8 SPI2_ReadWriteByte(u8 TxData)
{               
        u8 retry=0;                                         
        while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) //检查指定的SPI标志位设置与否:发送缓存空标志位
                {
                retry++;
                if(retry>200)return 0;
                }                          
        SPI_I2S_SendData(SPI2, TxData); //通过外设SPIx发送一个数据
        retry=0;

        while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) //检查指定的SPI标志位设置与否:接受缓存非空标志位
                {
                retry++;
                if(retry>200)return 0;
                }                                                              
        return SPI_I2S_ReceiveData(SPI2); //返回通过SPIx最近接收的数据                                            
}


方式2:
u8 SPI2_ReadWriteByte(u8 TxData)
{                                                         
        while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) //检查指定的SPI标志位设置与否:发送缓存空标志位                  
        SPI_I2S_SendData(SPI2, TxData); //通过外设SPIx发送一个数据

        while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) //检查指定的SPI标志位设置与否:接受缓存非空标志位                                                              
        return SPI_I2S_ReceiveData(SPI2); //返回通过SPIx最近接收的数据                                            
}


这两种方式就是少了中间那个等待时间,时间结束就跳,网上也有很多人用方式二的,所以肯定也是能用的,但我用板子试了一下,方式1是可以用的,原子的例程就是方式1,方式2在我板子上是用不了,
是不是卡死在检查标志位里了吧??我仿真了一下,没有卡死,就是我的SPI驱动的OLED屏没有亮,这是怎么回事了,难度又是我的SPI速度太快了,把SPI的时钟降到16分频,OLED一样的没能显示,改回
方式1就没问题,SPI的时钟用多少分频都能正常显示。
我把方式1的retry改成 if(retry>1),也能正常工作。


请问我要怎弄才能正常使用用方式2呢?


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 11:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表