[STM8] STM8S的SPI有个严重问题,谁有好办法解决?

[复制链接]
10472|8
 楼主| elecd 发表于 2012-5-13 13:11 | 显示全部楼层 |阅读模式
   用STM8S的SPI功能,做了个从设备,没用到NSS管脚,采用的是软件管理。现在就出现了问题,当主MCU上电慢于STM8S芯片,在主MCU初始化前,CLK脚出现一个脉冲,然后就导致了STM8S的SPI以后的每一个接收数据均是错误的,因为SPI的数据是按照8个时钟计算。上电给了一个干扰脉冲后,就导致了8位脉冲的错误。
   后来就人为让STM8S上电等待延时,等主MCU初始化完成后,再进入SPI状态,虽然这样可以解决表面问题,但如果在强干扰的情况下面,CLK引脚,出现一个干扰,岂不是也会导致STM8的SPI接收不正常么?
   后来尝试读各种出错状态标志位,都不能解决这个问题。关闭SPI功能再开,居然也不能清除掉SPI错误的时钟计数。也是不能解决问题。然后只有采用主MCU一旦于STM8S通讯不上,那么就不停的发送0XFF,让STM8S无论收到多少个干扰脉冲,在多次SPI时钟侦后,总会正确接收到0XFF这个数据,一旦收到0XFF,就让STM8S强制看门狗溢出复位,重启。但这么做真的不是什么好的办法。
   谁有没有好的办法,来解决这个问题?
yinyehua 发表于 2012-5-13 14:20 | 显示全部楼层
从设备,没用到NSS管脚?这个没有做过。但我们做主设备时对从设备的读写操作时,都必须控制从设备的片选引脚!
 楼主| elecd 发表于 2012-5-13 17:07 | 显示全部楼层
为的是节省IO来用.才用软件管理NSS的。按常理来讲,STM8S的移位寄存器在关闭SPI功能的时候,应该清零才对的。这芯片,居然依旧保持这移位寄存器的值。就导致了一旦一个时钟干扰,就会出现,后面所有接收到的字节全部错乱。这一点真的很恶心。或者他应该高一个时间限制来保护SPI的传送,一旦一帧数据的时钟不足8位,在保护时间间隔后,自动清除SPI的移位寄存器指针。重新捕捉新的一帧数据。
 楼主| elecd 发表于 2012-5-14 17:48 | 显示全部楼层
ST的老大呢?给点建议吧。
seawwh 发表于 2012-5-14 18:06 | 显示全部楼层
通过CLK_PCKENR1寄存器将SPI的时钟关闭再打开看看如何。
香水城 发表于 2012-5-14 18:14 | 显示全部楼层
请尝试在关闭SPI功能的时候同时关闭SPI的时钟:
STM8S_Peripheral_clock.GIF
王紫豪 发表于 2012-5-15 00:30 | 显示全部楼层
或者他应该高一个时间限制来保护SPI的传送,一旦一帧数据的时钟不足8位,在保护时间间隔后,自动清除SPI的移位寄存器指针。重新捕捉新的一帧数据。

---------------
这样设计  骂得更多
yudengyun 发表于 2012-5-18 17:47 | 显示全部楼层
有知道一种方法,关闭SPI同时关闭时钟:)
shizaigaole 发表于 2012-5-18 23:11 | 显示全部楼层
主机发送心跳信号,
从机在一个窗口周期内,连续三次收不到心跳信号,
停止喂狗,从机复位。

这个方法我已经用了N此了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

40

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部