您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> [求助]关于stm32和533的spi通信
本帖共有2100个阅读者
发表帖子 发表投票 回复主题
[求助]关于stm32和533的spi通信
eggplant(论坛新手)
eggplant
头衔:社区公民
帮派:无帮无派
帖数:23
金钱:329
积分:33
注册时间:2013/10/29
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[求助]关于stm32和533的spi通信
这是我的stm32的代码
void SPI2_conf(void)
{
  SPI_InitTypeDef  SPI_InitStructure;
  SPI_Cmd(SPI2, DISABLE);
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;      
//软件模式可以通过设置spi的cr1寄存器的ssi位来内部给予nss信号,详情请看下面的连接
//
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;//SPI_FirstBit_MSB;
  SPI_InitStructure.SPI_CRCPolynomial = 7;
  SPI_Init(SPI2, &SPI_InitStructure);
   /*Enable SPI1.NSS as a GPIO*/
  //SPI_SSOutputCmd(SPI2, ENABLE);//这条语句是使得spi的cr2寄存器ssoe位置1,软件模式无需使用
  SPI_Cmd(SPI2, ENABLE);
  //spi1_cs_low;
}
这是533的代码
void SPI_init(void)
{
    *pFIO_DIR &= ~(PF0);   /* 将PF0置为输入 */
     *pFIO_INEN |= (PF0);
//*pSPI_BAUD=2; //配置速率为1/4系统时钟  SPI速率 = SCLK/2*SPI_BAUD
*pSPI_FLG =0x8080;   //选择SPISEL2接口
*pSPI_CTL = 0x0830;
*pSPI_CTL = (*pSPI_CTL | SPE);
ssync();
  
}


int main()
{
int i;
Set_PLL(16,4);
Init_EBIU();
SPI_init();
   while(1)
   {
    while(*pSPI_STAT & RXS)//查看SPI传输状态是否有数据需要接收
     i = *pSPI_RDBR; //读取数据

   }
dsp的spiss接stm32的nss,通信不了,求大家帮帮忙

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/10/31 20:40:06
尊贵身份标志
夜色飘摇(论坛版主)
夜色飘摇
头衔:社区公民
帮派:无帮无派
帖数:350
金钱:1773
积分:332
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

我要成为勇敢的海上战士!
等级:论坛版主 参考IP地址:*.*.*.*
2013/11/1 12:28:38
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
你如果对STM32熟悉,就先固定好BF533的SPI代码,根据BF533的时序,你配置STM32的时序与其对接。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/11/1 14:59:16
eggplant(论坛新手)
eggplant
头衔:社区公民
帮派:无帮无派
帖数:23
金钱:329
积分:33
注册时间:2013/10/29
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
现在我不知道是哪里的错误,dsp的代码有问题吗

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/11/1 15:35:07
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
不知道你的DSP运行的是主还是从,如果是从机,就不需要配置SPISEL2,硬件上这个管脚是作为主机的选择端口,从机要连接SPISS管脚。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/11/1 16:14:02
eggplant(论坛新手)
eggplant
头衔:社区公民
帮派:无帮无派
帖数:23
金钱:329
积分:33
注册时间:2013/10/29
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
是从机,而且chol和cpha俩位的四种方式都试过了,都不成功,连接是飞线连接

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/11/1 19:39:48
eggplant(论坛新手)
eggplant
头衔:社区公民
帮派:无帮无派
帖数:23
金钱:329
积分:33
注册时间:2013/10/29
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
如果设置为主机,我在运行例程时的时钟和数据是对的,但是片选却对不上,例程代码:
#include <cdefBF533.h>

unsigned char buff_w[512];
unsigned char buff_r[512];

void Init_SDRAM(void)
{
*pEBIU_SDRRC = 0x00000817;
*pEBIU_SDBCTL = 0x00000013;
*pEBIU_SDGCTL = 0x0091998d;
ssync();
}

void Init_EBIU(void)
{
*pEBIU_AMBCTL0 = 0x7bb07bb0;
*pEBIU_AMBCTL1 = 0xffc07bb0;
*pEBIU_AMGCTL = 0x000f;
}

void Set_PLL(int pmsel,int pssel)
{
int new_PLL_CTL;
*pPLL_DIV = pssel;
asm("ssync;");
new_PLL_CTL = (pmsel & 0x3f) << 9;
*pSIC_IWR |= 0xffffffff;
if (new_PLL_CTL != *pPLL_CTL)
{
*pPLL_CTL = new_PLL_CTL;
asm("ssync;");
asm("idle;");
}
}


void SPI_init(void)
{
*pSPI_BAUD=2; //配置速率为1/4系统时钟  SPI速率 = SCLK/2*SPI_BAUD
*pSPI_FLG |=FLS2;   //选择SPISEL2接口
*pSPI_CTL = 0x1001|CPHA| CPOL; //配置模式为手动片选模式
*pSPI_CTL = (*pSPI_CTL | SPE); //使能SPI接口
}


int main()
{
int i;
Set_PLL(16,4);
Init_EBIU();

SPI_init();
*pSPI_FLG &= ~FLG2; //将SPISEL2拉到0
while(!(*pSPI_STAT & SPIF));  //查看SPI传输状态是否完成
*pSPI_TDBR = 0x55;      //将数据送入SPI传输数据寄存器
*pSPI_FLG |= FLG2;    //将SPISEL2拉到1,完成数据传输
*pSPI_FLG &= ~FLG2;
while(*pSPI_STAT & RXS)//查看SPI传输状态是否有数据需要接收
i = *pSPI_RDBR; //读取数据
*pSPI_FLG |= FLG2;
while(1);
}
如果在中间加入延时,或者改动则时序可能出错,是不是硬件的问题??


「该帖子被 eggplant 在 2013-11-01 22:23:01 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/11/1 22:22:21
尊贵身份标志
夜色飘摇(论坛版主)
夜色飘摇
头衔:社区公民
帮派:无帮无派
帖数:350
金钱:1773
积分:332
注册时间:2011/6/8
7信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

会不会是飞线太长了?http://www.openadsp.com/bbs/Topic.asp?id=1631&BoardID=3&TB=1

这个也是2个处理器之间的对接,飞线太长。


我要成为勇敢的海上战士!
等级:论坛版主 参考IP地址:*.*.*.*
2013/11/2 13:57:31
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
8信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
片选对不上什么意思

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/11/2 15:42:31
eggplant(论坛新手)
eggplant
头衔:社区公民
帮派:无帮无派
帖数:23
金钱:329
积分:33
注册时间:2013/10/29
9信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
就是在发送数据的时候,片选有一段是拉高的。

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/11/4 15:09:46
15
1
1/2
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.166290 Call, 1 Queries, Processed in 0.031250 second(s),