找回密码
 立即注册
查看: 1046|回复: 16

STC8H1K08做SPI从机,时钟频率问题

[复制链接]

该用户从未签到

1

主题

10

回帖

55

积分

注册会员

积分
55
发表于 2023-10-24 16:29:34 | 显示全部楼层 |阅读模式
有一个技术问题想要咨询一下:
①我用STC8H1K08,IRC时钟主频在35MHz,系统时钟也在35MHz,用作SPI的从机接收,SPI时钟设置为4分频,也就是35M/4=8.75MHz的SPI频率。
②我用STM32芯片为SPI主机发送数据,SPI时钟主频在90MHz。

现象:
使用中断,
单个数据接收正常;
多个数据接收时,只有最后一个数据正常,除非把SPI主机频率降到128分频,也就是90M/128 = 700KHz左右。


问题是:
为什么多个数据不正常呢,按道理SPI接收数据,时钟频率不大于最大时钟即可。
即:SPI从机设置为8.75MHz,那么主机频率只要在8M以下,数据接收没有问题。请各位大佬解答一下,学习学习,谢谢!


回复 送花

使用道具 举报

该用户从未签到

552

主题

9496

回帖

1万

积分

管理员

积分
14067
发表于 2023-10-24 18:10:30 | 显示全部楼层
SPI 的时钟 《 1/4 STC8H1K08的时钟
还有 SPI的口外部加10K 上拉到 低电压的那一方,I/O设置成开漏

截图202310241833036509.jpg
串的电阻没必要,上电都是高阻了,后续又是设置成开漏

截图202310241830197902.jpg

截图202310241830505550.jpg



回复 支持 反对 送花

使用道具 举报

该用户从未签到

1

主题

10

回帖

55

积分

注册会员

积分
55
 楼主| 发表于 2023-10-24 19:03:00 | 显示全部楼层
神农鼎 发表于 2023-10-24 18:10
SPI 的时钟 《 1/4 STC8H1K08的时钟
还有 SPI的口外部加10K 上拉到 低电压的那一方,I/O设置成开漏

版主,我测试了您说的方法,原配置IO为双向上拉口,改成开漏OD,在SPI的各个引脚加上拉,也还是不行,主机频率一上升数据就不对了。
目前700KHz左右传输是全部数据正常的,高于700KHz,也就是1.4M,只有最后一个数据是正常的。
版主知道是什么原因吗?

硬件配置:CPOL、CPLA都对上的了,SPI的引脚和配置都正常。STM32和STC芯片之间是有74HC245隔离的,电压都对的上。
回复 支持 反对 送花

使用道具 举报

该用户从未签到

552

主题

9496

回帖

1万

积分

管理员

积分
14067
发表于 2023-10-24 20:32:48 | 显示全部楼层
将现在真的实际电路的原理图的PDF发上来,大家好帮忙分析
回复 支持 反对 送花

使用道具 举报

该用户从未签到

1

主题

10

回帖

55

积分

注册会员

积分
55
 楼主| 发表于 2023-10-25 08:44:58 | 显示全部楼层
STM32直连74HC245出来,连到STC8H1K08的SPI,做单主单从数据传输,传输40个字节数据,用中断方式,单个字节传输没有频率限制;传输两个字节以上,出现只有最后一个字节正常,除非主机频率在700KHz。
1.png
2.png
回复 支持 反对 送花

使用道具 举报

该用户从未签到

1

主题

10

回帖

55

积分

注册会员

积分
55
 楼主| 发表于 2023-10-25 08:51:55 | 显示全部楼层
程序使用例程的库函数,检查寄存器应该是没问题的,IO设置原为双向口,现在改成开漏,用中断传输。
1.png
2.png
3.png
回复 支持 反对 送花

使用道具 举报

该用户从未签到

552

主题

9496

回帖

1万

积分

管理员

积分
14067
发表于 2023-10-25 10:52:06 | 显示全部楼层
/*
STM32直连74HC245出来,连到STC8H1K08的SPI,
做单主单从数据传输,传输40个字节数据,
用中断方式,单个字节传输没有频率限制;
传输两个字节以上,出现只有最后一个字节正常,
除非主机频率在700KHz。
*/
===建议你先改成 STC8H和第三方MCU直接连接



回复 支持 反对 送花

使用道具 举报

该用户从未签到

1

主题

10

回帖

55

积分

注册会员

积分
55
 楼主| 发表于 2023-10-25 14:13:21 | 显示全部楼层
问题可能找到了,但是有个疑问想咨询一下。

问题可能在SS引脚上,我的STM32控制SS脚是通过IO控制的,DMA方式发送数据,所以40个字节数据时,SS一直为低,导致接收的顺序有错。可能是这个原因

疑问,我看手册上有SSIG控制位,配合MSTR控制位,可以实现单主单从的方式,我自己试没有成功,想要问一下,这种情况下,怎么配置SPI从机,可以把STC一直当从机使用,不关注SS脚。

点评

你的问题应该不是SS脚的问题,应该是主机速度过快,没给从机时间处理。但SPI最好标准用法,用上SS脚。  详情 回复 发表于 2023-10-25 14:55
回复 支持 反对 送花

使用道具 举报

该用户从未签到

552

主题

9496

回帖

1万

积分

管理员

积分
14067
发表于 2023-10-25 14:18:48 | 显示全部楼层
截图202310251418444509.jpg
回复 支持 反对 送花

使用道具 举报

该用户从未签到

1

主题

10

回帖

55

积分

注册会员

积分
55
 楼主| 发表于 2023-10-25 14:20:00 | 显示全部楼层
我做以下测试:
①使用双STC的单主单从spi传输数据,发送6MHz---接收6MHz是能够传输数据的,使用中断发送接收,正常;
②使用双STC的单主单从spi传输数据,发送3MHz---接收6MHz是能够传输数据的,使用中断发送接收,正常;

查看波形,和STM32传输的数据波形差别,可能就是在SS脚上的区别,还有频率,STM32的频率也在6M以下,但是传输不成功。
回复 支持 反对 送花

使用道具 举报

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2024-5-18 19:47 , Processed in 0.072235 second(s), 69 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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