打印
[STM8]

stm8无法正确读取SPI数据

[复制链接]
479|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiahy|  楼主 | 2022-1-6 23:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
示波器上显示的数据正确

使用特权

评论回复
沙发
shimx| | 2022-1-6 23:03 | 只看该作者

楼主详细说说怎么回事啊,这么说太笼统了

使用特权

评论回复
板凳
jiahy|  楼主 | 2022-1-6 23:06 | 只看该作者

使用特权

评论回复
地板
jiahy|  楼主 | 2022-1-6 23:10 | 只看该作者
黄色的是MOSI引脚,蓝色的是MISO引脚。测试的时候SPI向从机写入5个字节数据,然后再读出这5个字节数据,通过示波器观察读写的数据均正确,但是通过代码接收的数据却全是0XFF。

使用特权

评论回复
5
zhanghqi| | 2022-1-6 23:12 | 只看该作者

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
6
jiahy|  楼主 | 2022-1-6 23:14 | 只看该作者
SPI配置如下:
  GPIO_Init(NRF_IRQ_PORT, NRF_IRQ_PIN, GPIO_Mode_In_PU_No_IT);

        GPIO_Init(NRF_CSN_PORT, NRF_CSN_PIN, GPIO_Mode_Out_PP_High_Fast);

        GPIO_Init(NRF_CE_PORT, NRF_CE_PIN, GPIO_Mode_Out_PP_High_Fast);

        GPIO_Init(NRF_SSK_PORT, NRF_SSK_PIN, GPIO_Mode_Out_PP_Low_Fast);

        GPIO_Init(NRF_MOSI_PORT, NRF_MOSI_PIN, GPIO_Mode_Out_PP_Low_Fast);

        GPIO_Init(NRF_MISO_PORT, NRF_MISO_PIN, GPIO_Mode_In_PU_No_IT);



    SPI_Init(SPI1,

           SPI_FirstBit_MSB,

           SPI_BaudRatePrescaler_4,

           SPI_Mode_Master,

           SPI_CPOL_Low,

           SPI_CPHA_1Edge,

           SPI_Direction_2Lines_FullDuplex,                     

           SPI_NSS_Soft,

           0x07);

                                                

    SPI1->DR = 0;

    SPI_Cmd(SPI1, ENABLE);

使用特权

评论回复
7
jiahy|  楼主 | 2022-1-6 23:16 | 只看该作者
尝试过修改数据捕获边缘、波特率均不行。

使用特权

评论回复
8
jiahy|  楼主 | 2022-1-6 23:20 | 只看该作者
读写数据代码如下:
static uint8_t SPI_ReadWriteByte(uint8_t byte)

{

    while (SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE) == RESET);     

    SPI_SendData(SPI1, byte);

        

    while (SPI_GetFlagStatus(SPI1, SPI_FLAG_RXNE) == RESET);

    return SPI_ReceiveData(SPI1);

}

使用特权

评论回复
9
huangchui| | 2022-1-6 23:23 | 只看该作者
MISO没有完全拉低

使用特权

评论回复
10
jiahy|  楼主 | 2022-1-6 23:26 | 只看该作者
大佬!一眼就看出问题。我只注意到有数据变化,没注意到MISO没有完全拉低。

使用特权

评论回复
11
jiahy|  楼主 | 2022-1-6 23:28 | 只看该作者
MISO配置为带上拉输入,MOSI配置为推免输出,两个引脚外部均接上拉电阻,请问这样搞可以吗?我也不知道为啥电平没有被完全拉低。

使用特权

评论回复
12
xxrs| | 2022-1-6 23:30 | 只看该作者
你写的过程是正确的,说明信号线没问题。但读的时候没有数据,需要看CS信号是不是正确,可能是你写和读的转换过程中,某些操作不能符合SPI要求

使用特权

评论回复
13
jiahy|  楼主 | 2022-1-6 23:32 | 只看该作者
找到原因了,MISO引脚和旁边的一个IRQ(输入)引脚短路了,导致MISO无法完全被拉低。谢谢大佬!

使用特权

评论回复
14
huangchui| | 2022-1-6 23:35 | 只看该作者
是通过什么看出来的 呢

使用特权

评论回复
15
chuxh| | 2022-1-6 23:36 | 只看该作者
没有拉低就是时序的问题?

使用特权

评论回复
16
stly| | 2022-1-6 23:40 | 只看该作者
大神啊大神

使用特权

评论回复
17
jiahy|  楼主 | 2022-1-6 23:42 | 只看该作者

其实还是不大明白,我再琢磨琢磨吧,多谢了哈先

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

862

主题

9861

帖子

4

粉丝