ercircle 发表于 2026-3-13 14:22
你的io看着没开快速翻转,别的差异和上面程序对比下,里面也有dma调用切换注释就行。
从机程序参考,从机大 ...
我尝试使用你发我的主机和从机的程序,分别写道两块核心板中,将两块板子的SS MISO MOSI SCK一一对应接在一起,现在遇到的问题是从机接收到的内容不是主机发送的内容,数据会一直变化,主从机都设置成48M晶振频率
ercircle 发表于 2026-3-13 14:22
你的io看着没开快速翻转,别的差异和上面程序对比下,里面也有dma调用切换注释就行。
从机程序参考,从机大 ...
我把从机中断中回数据注释掉后,从机收到的数据才是正常的,这样成了主机发,从机收。但我需要的是全双工的,有没有DMA全双工,主从机通讯的例程?
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 全双工的例程,谢谢
marshallemon 发表于 2026-4-1 13:51
我测试了,DMA方式下,只要使用你给出的从机程序,从机接收到的数据就是错误的,将从机代码的SPI修改为如 ...
我是测试pass的,降低主频试下
ercircle 发表于 2026-4-1 14:05
我是测试pass的,降低主频试下
只降低主机主频就可以了吧?
marshallemon 发表于 2026-4-1 14:14
只降低主机主频就可以了吧?
降低spi master 的时钟频率
ercircle 发表于 2026-4-1 14:15
降低spi master 的时钟频率
我就是直接使用的你发的例程,SPI的时钟频率应该是20M
我尝试将主机SPI的分频数设置到16分频,从机收到的数据还是错误的
marshallemon 发表于 2026-4-1 14:26
我就是直接使用的你发的例程,SPI的时钟频率应该是20M
我尝试将主机SPI的分频数设置到16分频,从机收到的 ...
这个附件不要修改直接测,48M下载。先上电从机,再上电主机。两个板子就近接地,不要通过串口工具绕一大圈共地。
还不行的话上传逻辑分析仪数据看看
ercircle 发表于 2026-4-1 15:00
这个附件不要修改直接测,48M下载。
还不行的话上传逻辑分析仪数据看看
你测试用的MCU是3.3V供电还是5V供电,经测试发现MCU在3.3V供电下你给的程序才可以正常运行。另外问下,LINK1D的设置输出电压是每次都需要设置下吗?设置完不会保存吗?
marshallemon 发表于 2026-4-1 15:19
你测试用的MCU是3.3V供电还是5V供电,经测试发现MCU在3.3V供电下你给的程序才可以正常运行。另外问下,LI ...
1.5V 也能正常工作,而且比3.3V可以工作频率更高一些。
2.每次上电都要设置下