打印
[STM32F4]

STM32F407与STM8S003的SPI通讯

[复制链接]
1764|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
@若水|  楼主 | 2017-3-3 11:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在做一个以STM32F407为主机与8个STM8S003进行一主多从的通讯板,目标是SPI总线能上5Mbit以上。

STM8S003的数据手册上写着,最高能达到8Mbit,这里先记下。

STM32F407一共用了两个SPI,分别是SPI1与SPI3,SPI1的时钟总线为APB2,即最大为84MHz,当然传输数据时,当然是达不到这个速率

的,而是37.5Mbit/S,为了能与STM8S003通讯,就得分频,84MHz/8MHz =10.5倍,所以只能16分频,即84MHz/16= 5.25MHz,即

5.25Mbit/S;
SPI3的时钟总线为APB1,即最大为42MHz,42MHz/5.25MHz=8分频


片选使用NSS硬件片选

STM32F407(主)               STM8S003(从)
SCK          ------->       SCK
MOSI         ------->       MOSI
MISO         ------->       MISO
普通IO       ------->       NSS

STM32F407的主时钟倍频到168MHz,STM8S003的时钟设置为16MHz,一次性传输256byte,轮循发送,每间隔10ms就发送一次

把程序下载后,测试,发现在频率为5.25MHz的情况下,收到数据经常发生溢出错误码,SR寄存器的OVR位被置1,查看STM8S003中断的

汇编代码,发现需要执行大约23个机器周期。中断代码如下:

INTERRUPT_HANDLER(SPI_IRQHandler, 10)
{
  if(SPI->SR & 0x01)
  {
    Data[RevCnt++] = SPI->DR;
    if(RevCnt >= 256) RevCnt = 0;
  }
}

所以想着将SPI的软件中断优先级设置为最高优先级,然后再降低SPI的时钟线,先设置为2.625Mbit/s。一试,居然就可以了,不再产

生OVR错误了。哈哈哈……
沙发
@若水|  楼主 | 2017-3-3 11:02 | 只看该作者
升级了,资深技术员,继续努力

使用特权

评论回复
板凳
feelhyq| | 2017-3-3 11:24 | 只看该作者
本帖最后由 feelhyq 于 2017-3-9 18:17 编辑

哎,竟然回答错了,好丢人

使用特权

评论回复
地板
STARM| | 2017-3-3 11:52 | 只看该作者
本帖最后由 STARM 于 2017-3-3 11:54 编辑

片选使用NSS硬件片选

STM32F407(主)           STM8S003(从)
SCK         ------->    SCK
MOSI        ------->    MOSI
MISO        ------->    MISO
普通IO      ------->    NSS

使用特权

评论回复
5
aozima| | 2017-3-3 12:30 | 只看该作者
本帖最后由 aozima 于 2017-3-3 12:32 编辑
feelhyq 发表于 2017-3-3 11:24
MOSI 应该和MISO连接, MISO和MOSI连接。 楼主硬件错了竟然能成功,牛X哄哄的

硬件SPI做从机时,方向会自动切换的,直接按名字对应起来就好。
不然硬件设计还容易搞错。

这点比UART好,UART再配合DB9,硬件设计出错的高发地。

使用特权

评论回复
6
mmuuss586| | 2017-3-3 12:58 | 只看该作者
谢谢分享;

使用特权

评论回复
7
@若水|  楼主 | 2017-3-3 13:29 | 只看该作者
feelhyq 发表于 2017-3-3 11:24
MOSI 应该和MISO连接, MISO和MOSI连接。 楼主硬件错了竟然能成功,牛X哄哄的

要多看手册啊,可能每个单片机都不一样吧

使用特权

评论回复
8
@若水|  楼主 | 2017-3-3 13:30 | 只看该作者
STARM 发表于 2017-3-3 11:52
片选使用NSS硬件片选

STM32F407(主)           STM8S003(从)

这个有什么问题吗?

使用特权

评论回复
9
@若水|  楼主 | 2017-3-3 13:31 | 只看该作者
aozima 发表于 2017-3-3 12:30
硬件SPI做从机时,方向会自动切换的,直接按名字对应起来就好。
不然硬件设计还容易搞错。

哈哈,我倒是将STM8S003的VCAP引脚与GND引脚搞反了,搞到一上电,单片机全坏了

使用特权

评论回复
10
@若水|  楼主 | 2017-3-3 13:32 | 只看该作者

不客气,分享万岁,原来是版主啊,有失远迎

使用特权

评论回复
11
@若水|  楼主 | 2017-3-3 13:32 | 只看该作者

不客气,分享万岁,原来是版主啊,有失远迎

使用特权

评论回复
12
@若水|  楼主 | 2017-3-3 16:22 | 只看该作者
贴子居然能排到前三,我的小心脏啊,哈哈哈……

使用特权

评论回复
13
wangliuliu566| | 2017-3-3 17:03 | 只看该作者
楼主,SPI从机高速率下用DMA接收应该没问题,可以试一下!

使用特权

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

本版积分规则

26

主题

2686

帖子

6

粉丝