marshallemon 发表于 2026-3-31 16:30:17

ercircle 发表于 2026-3-13 14:22
你的io看着没开快速翻转,别的差异和上面程序对比下,里面也有dma调用切换注释就行。
从机程序参考,从机大 ...

我尝试使用你发我的主机和从机的程序,分别写道两块核心板中,将两块板子的SS MISO MOSI SCK一一对应接在一起,现在遇到的问题是从机接收到的内容不是主机发送的内容,数据会一直变化,主从机都设置成48M晶振频率

marshallemon 发表于 2026-3-31 17:02:03

ercircle 发表于 2026-3-13 14:22
你的io看着没开快速翻转,别的差异和上面程序对比下,里面也有dma调用切换注释就行。
从机程序参考,从机大 ...

我把从机中断中回数据注释掉后,从机收到的数据才是正常的,这样成了主机发,从机收。但我需要的是全双工的,有没有DMA全双工,主从机通讯的例程?

marshallemon 发表于 2026-4-1 13:51:29

ercircle 发表于 2026-3-13 14:22
你的io看着没开快速翻转,别的差异和上面程序对比下,里面也有dma调用切换注释就行。
从机程序参考,从机大 ...

我测试了,DMA方式下,只要使用你给出的从机程序,从机接收到的数据就是错误的,将从机代码的SPI修改为如下,SPI接口的数据才是正确的,但这样SPI就成了半双工////////////////////////////////////////
// SPI1中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void SPI1_ISR(void) interrupt SPI1_VECTOR
{
    //<<AICUBE_USER_SPI1_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码

                u8 temp;
    if (SPI1_CheckFlag())                //判断SPI中断
    {
      SPI1_ClearFlag();                //清除SPI中断标志
                                temp = SPDAT;
//                                SPDAT = temp ;
                                rx_buffer = temp;
      fSPI1TransBusy = 0;            //清除SPI忙标志位
                                //printf("%02X\n",temp );
    }
    //<<AICUBE_USER_SPI1_ISR_CODE1_END>>
}
麻烦给出一个完整的DMA SPI 全双工的例程,谢谢

ercircle 发表于 2026-4-1 14:05:19

marshallemon 发表于 2026-4-1 13:51
我测试了,DMA方式下,只要使用你给出的从机程序,从机接收到的数据就是错误的,将从机代码的SPI修改为如 ...

我是测试pass的,降低主频试下

marshallemon 发表于 2026-4-1 14:14:17

ercircle 发表于 2026-4-1 14:05
我是测试pass的,降低主频试下

只降低主机主频就可以了吧?

ercircle 发表于 2026-4-1 14:15:26

marshallemon 发表于 2026-4-1 14:14
只降低主机主频就可以了吧?

降低spi master 的时钟频率



marshallemon 发表于 2026-4-1 14:26:29

ercircle 发表于 2026-4-1 14:15
降低spi master 的时钟频率
我就是直接使用的你发的例程,SPI的时钟频率应该是20M
我尝试将主机SPI的分频数设置到16分频,从机收到的数据还是错误的

ercircle 发表于 2026-4-1 15:00:49

marshallemon 发表于 2026-4-1 14:26
我就是直接使用的你发的例程,SPI的时钟频率应该是20M
我尝试将主机SPI的分频数设置到16分频,从机收到的 ...
这个附件不要修改直接测,48M下载。先上电从机,再上电主机。两个板子就近接地,不要通过串口工具绕一大圈共地。
还不行的话上传逻辑分析仪数据看看



marshallemon 发表于 2026-4-1 15:19:06

ercircle 发表于 2026-4-1 15:00
这个附件不要修改直接测,48M下载。
还不行的话上传逻辑分析仪数据看看



你测试用的MCU是3.3V供电还是5V供电,经测试发现MCU在3.3V供电下你给的程序才可以正常运行。另外问下,LINK1D的设置输出电压是每次都需要设置下吗?设置完不会保存吗?

ercircle 发表于 2026-4-1 15:23:24

marshallemon 发表于 2026-4-1 15:19
你测试用的MCU是3.3V供电还是5V供电,经测试发现MCU在3.3V供电下你给的程序才可以正常运行。另外问下,LI ...

1.5V 也能正常工作,而且比3.3V可以工作频率更高一些。

2.每次上电都要设置下
页: 1 [2] 3
查看完整版本: 发现一个SPI接口有趣的问题