打印
[STM8]

STM8 SPI 接收数据错误

[复制链接]
874|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kangzj|  楼主 | 2017-2-25 21:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一般什么原因
沙发
zwll| | 2017-2-25 21:05 | 只看该作者
楼主详细说说怎么回事啊,这么说太笼统了

使用特权

评论回复
板凳
kangzj|  楼主 | 2017-2-25 21:06 | 只看该作者
发送正常,可以抓到SCK、SDO的波形正确,也能读取TXE是正确。

使用特权

评论回复
地板
kangzj|  楼主 | 2017-2-25 21:07 | 只看该作者
接收的时候,无论SDI脚是高电平还是低电平,SPI_ReceiveData返回的值都无变化。

使用特权

评论回复
5
supernan| | 2017-2-25 21:08 | 只看该作者
STVD的环境也无法监测到DR寄存器的值?

使用特权

评论回复
6
liuzaiy| | 2017-2-25 21:09 | 只看该作者
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
7
pangb| | 2017-2-25 21:10 | 只看该作者
初始化部分:
        CLK_PeripheralClockConfig(CLK_Peripheral_SPI1, ENABLE);

        GPIO_Init(GPIOB, GPIO_Pin_4, GPIO_Mode_Out_PP_High_Slow);        //NSS
        GPIO_Init(GPIOB, GPIO_Pin_5, GPIO_Mode_Out_PP_High_Slow);        //SCK
        GPIO_Init(GPIOB, GPIO_Pin_6, GPIO_Mode_Out_PP_High_Slow);        //SDO
        GPIO_Init(GPIOB, GPIO_Pin_7, GPIO_Mode_In_PU_No_IT);        //SDI

        SPI_Init(SPI1, SPI_FirstBit_MSB, SPI_BaudRatePrescaler_16, SPI_Mode_Master,
                        SPI_CPOL_High, SPI_CPHA_2Edge, SPI_Direction_2Lines_FullDuplex,
                        SPI_NSS_Soft, 0x07);
        SPI_Cmd(SPI1, ENABLE);
复制代码


主函数测试部分:
GPIO_WriteBit(GPIOC, GPIO_Pin_5, 0);
                while(!SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE));
                SPI_SendData(SPI1, 0x80);
                for(u16Temp = 0; u16Temp < 100; u16Temp++)
                {
                        ;
                }

                while(!SPI_GetFlagStatus(SPI1, SPI_FLAG_RXNE));
                u8RecData = SPI_ReceiveData(SPI1);
复制代码


在接收部分完成的时候打的断点,无论怎么做,都无法改变u8RecData的值

使用特权

评论回复
8
kangzj|  楼主 | 2017-2-25 21:11 | 只看该作者
发现了一个问题,不过还是没能解决。

我发送完数据后,SCK就没有信号了,这是个头疼的问题。

使用特权

评论回复
9
morrisk| | 2017-2-25 21:12 | 只看该作者
看别人的例子,有说从SDO发送个0,这时就有SCK信号,可以读到SDI的数据

使用特权

评论回复
10
kangzj|  楼主 | 2017-2-25 21:13 | 只看该作者
试过了,还是不能读到。。

使用特权

评论回复
11
chuxh| | 2017-2-25 21:17 | 只看该作者
这,SPI的接收给卡住了?

使用特权

评论回复
12
llljh| | 2017-2-25 21:19 | 只看该作者
SPI的SDI引脚没有其他外设,只是用VCC、GND做连接来测试

使用特权

评论回复
13
pengf| | 2017-2-25 21:20 | 只看该作者
典型对SPI工作原理不明白。在发送完读命令后,需要继续发送时钟才能读数据,当然得继续发送数据,只不过这个数据一般不被从机识别,实际上SPI就是发送和接收同时进行的

使用特权

评论回复
14
kangzj|  楼主 | 2017-2-25 21:21 | 只看该作者
我这是从其他平台移植过来的,本来SCK在SPI读的时候就可以产生的。

STM8的我还是刚接触,没理解过来。

使用特权

评论回复
15
houcs| | 2017-2-25 21:22 | 只看该作者
你那都算好的  我才郁闷 用了2片STM8S903K3做2.4G通讯 用的硬件SPI 同样的程序 下载到2个片子里 其中一个工作正常,另一个直接SPI都没输出  用调试仿真 发现SPI的寄存器值都是错的 同样的程序另一个仿真就是对的 初始化中的程序 SPI_CR1 |= 0x40;  正常的芯片SPI就开启了  有问题的那个芯片 仿真得到的值SPI_CR1=0x20  真实无语了 其他IO口控制都还是好的就SPI不行 不知道是硬件本身问题还是有BUG。。。

使用特权

评论回复
16
pangb| | 2017-2-25 21:24 | 只看该作者
我遇到个神奇的情况,在1000块板子里,950块左右spi工作都是正常的,有50块左右spi模块不工作。  其他接口都工作正常。把全片擦除后重烧写程序就正常了。。很是奇怪

使用特权

评论回复
17
kangzj|  楼主 | 2017-2-25 21:26 | 只看该作者
搞定了,呵呵,犯了低级错误……结贴啦,多谢各位

使用特权

评论回复
18
jingjiafei| | 2017-5-19 17:33 | 只看该作者
kangzj 发表于 2017-2-25 21:26
搞定了,呵呵,犯了低级错误……结贴啦,多谢各位

怎么解决的,我也遇到相同问题,谢谢

使用特权

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

本版积分规则

672

主题

7007

帖子

2

粉丝