OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6208|回复: 3

想实现两块板子的SPI通信

[复制链接]

10

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2012-12-27
在线时间
0 小时
发表于 2013-5-27 09:58:48 | 显示全部楼层 |阅读模式

想测试一下两块板子传3694个字的速度,不知程序错在什么地方,还请大神们指教
主设备
void SPI1init()
 {
  RCC->APB2ENR|=0x00001004;//使能时钟GPIOA,SPI1时钟
  GPIOA->CRL&=0x0000FFFF; //PA4/5/6/7初始给高电平 ,4做检测
  GPIOA->CRL|=0xBBBB0000; //
  GPIOA->ODR|=0x0000F000;//初始为高电平
 
  SPI1->CR1=0x0000;//全部清零
  SPI1->CR1|=0x0B06;//选择STM32为主设备,2分频(18M),从第1个跳变开始采样,SCK空闲时为高电平,nss软件管理,内部引脚置位 16bit读写
  SPI1->CR1|=0x0040;//SPI使能
 }

  u16 SPI1_ReadWriteByte(u16 TxData)
  {
  u8 retry=0;
  while((SPI2->SR&1<<1)==0)//等待发送区空
    {
     retry++;
     if(retry>200)return 0;
     }
   SPI2->DR=TxData; //发送一个byte
   retry=0;
    while((SPI2->SR&1<<0)==0) //等待接收完一个byte
    {
      retry++;
      if(retry>200)return 0;
     }
     return SPI2->DR; //返回收到的数据
    }
   
 int main(void)
  {
   u16 test=0;
   Stm32_Clock_Init(9);//系统时钟设置
   delay_init(72); //延时初始化
   SPI1init();
   while(1)
   {
    SPI1_ReadWriteByte(0x1234);
 test++;
 if(test%3694==0)
 Aout(4)=!PAout(4);
    }
  }


从设备
void SPI1init()
 {
  RCC->APB2ENR|=0x00001004;//使能时钟GPIOA,SPI1时钟
  GPIOA->CRL&=0x0000FFFF; //PA5/6/7初始给高电平 ,4做检测
  GPIOA->CRL|=0xBBBB0000; //
  GPIOA->ODR|=0x0000E000;//初始为高电平
 
  SPI1->CR1=0x0000;//全部清零
  SPI1->CR1|=0x0B04;//选择STM32为从设备,2分频(18M),从第1个跳变开始采样,SCK空闲时为高电平,nss软件管理,内部引脚置位 16bit读写
  SPI1->CR1|=1<<6;//使能
  }

       u16 SPI1_ReadWriteByte(u16 TxData)
    {
      u8 retry=0;
       while((SPI1->SR&1<<1)==0)//等待发送区空
        {
          retry++;
          if(retry>200)return 0;
         }
         SPI1->DR=TxData; //发送一个byte
         retry=0;
        while((SPI1->SR&1<<0)==0) //等待接收完一个byte
          {
           retry++;
           if(retry>200)return 0;
           }
          return SPI1->DR; //返回收到的数据
      }

    int main(void)
     {
    u16 SPI_BUFF[3694]={0};
       u16 i=0;
       Stm32_Clock_Init(9);//系统时钟设置
       delay_init(72); //延时初始化
       SPI1init();

       while(1)
       {
     for(i=0;i<3694;i++)
        SPI_BUFF=SPI1_ReadWriteByte(0x1234);  
        }
    }    原子哥,谢谢啦

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-27 10:33:41 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2012-12-27
在线时间
0 小时
 楼主| 发表于 2013-5-27 13:59:45 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
谢谢原子哥了,还有个问题,从设备时主设备怎么给时钟的,也就是板子上SCLK这个口接在哪呢,还是不用接?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-27 14:10:12 | 显示全部楼层
从设备不给时钟的,所有时钟都是来自主设备!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-19 08:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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