OpenEdv-开源电子网

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

STM32 SPI从设备连续接收32位数据 求帮助!

[复制链接]

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2014-1-8
在线时间
41 小时
发表于 2014-10-11 13:41:00 | 显示全部楼层 |阅读模式
5金钱
stm32与外设AD7764通过spi通信,stm32作为从设备,AD7764作为主设备,提供SCK为20mhz,不知道怎么实现这功能,求帮忙!!
如下为SPI配置:
  void SPI1_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  SPI_InitTypeDef  SPI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC
|RCC_APB2Periph_GPIOD, ENABLE );//PORT?±?????? 
RCC_APB2PeriphClockCmd( RCC_APB2Periph_SPI1,  ENABLE );//SPI3?±??????
 
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  //PB3/5????????SCK,SDO
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);//??????GPIOB
  GPIO_ResetBits(GPIOA,GPIO_Pin_7);  //PB3/5????

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;  //
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  //PA15=FSO  NSS
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);//??????GPIOA
// GPIO_SetBits(GPIOA,GPIO_Pin_15);

GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//RESET,FSI???ì????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
  GPIO_SetBits(GPIOC,GPIO_Pin_10|GPIO_Pin_11);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  //PC12=OVE 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_ResetBits(GPIOC,GPIO_Pin_12);

GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//SYNC???ì????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
  GPIO_ResetBits(GPIOD,GPIO_Pin_2);

GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//SDI
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
  GPIO_SetBits(GPIOB,GPIO_Pin_4);

SPI_Cmd(SPI1, DISABLE);

SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_RxOnly;  //?è??SPI???ò?ò?????ò??????????:SPI?è???????????ò?????¤
SPI_InitStructure.SPI_Mode = SPI_Mode_Slave; //?è??SPI?¤×÷????:?è??????SPI
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; //?è??SPI???????ó??:SPI·???????16?????á??
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //?®???????±????????×???????????
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //?®???????±??????1????±????¨?????ò?????©????±????ù
SPI_InitStructure.SPI_NSS = SPI_NSS_Hard; //NSS???????????¨NSS?????©?????????¨????SSI???©???í:????NSS??????SSI??????
//SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; //?¨???¨?????¤·???????:?¨?????¤·???????256
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //???¨??????????MSB??????LSB??????:??????????MSB??????
SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC?????????à????
SPI_Init(SPI1, &SPI_InitStructure);  //?ù??SPI_InitStruct?????¨???????????????èSPIx?????÷
 
  NVIC_InitStructure.NVIC_IRQChannel = SPI1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
  NVIC_Init(&NVIC_InitStructure);

          
   //SPI_I2S_ITConfig(SPI3,SPI_I2S_IT_RXNE,ENABLE);
  //SPI_I2S_ITConfig(SPI3,SPI_I2S_IT_TXE,ENABLE);
SPI_Cmd(SPI1, ENABLE); //????SPI???è
SPI_I2S_ClearITPendingBit(SPI1, SPI_I2S_IT_RXNE);
//SPI3_ReadWriteByte(0xff);//????????  
 
  RSET = 0; 
delay_us(1);
RSET = 1;
delay_us(1);
//FSI =1;

SYNC = 0;
delay_us(1);
SYNC = 1;

}   
//SPI ?????è??????
//SpeedSet:
//SPI_BaudRatePrescaler_2   2·???   
//SPI_BaudRatePrescaler_8   8·???   
//SPI_BaudRatePrescaler_16  16·???  
//SPI_BaudRatePrescaler_256 256·??? 
  
void SPI1_SetSpeed(u8 SPI_BaudRatePrescaler)
{
  assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));
SPI1->CR1&=0XFFC7;
SPI1->CR1|=SPI_BaudRatePrescaler; //?è??SPI3???? 
SPI_Cmd(SPI1,ENABLE); 


如下为主程序:
 #include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "adc.h"
#include "spi.h"
#include "exti.h"
#include "dma.h"
 u32 Data[1000];
 int main(void)
 {
int i;
uint32_t SPI1_Buffer_Rx1;
u32 SPI1_Buffer_Rx2;  
u32 SPI1_Buffer_Rx3;

delay_init();
  EXTIX_Init();   
NVIC_Configuration(); //?è??NVIC????·?×é2:2??????????????2???ì????????
uart_init(9600); //?®??????????9600
SPI1_Init();

while(1)
{  
   while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);
    
 SPI1_Buffer_Rx2 = SPI_I2S_ReceiveData(SPI1);
 SPI1_Buffer_Rx2 <<= 16 ;
   SPI1_Buffer_Rx1 = SPI_I2S_ReceiveData(SPI1);
 SPI1_Buffer_Rx3= SPI1_Buffer_Rx2|SPI1_Buffer_Rx1;
 SPI_I2S_ClearFlag(SPI1,SPI_I2S_FLAG_RXNE);    
 printf("%x\r\n", SPI1_Buffer_Rx1);

 }
}

战舰版程序-AD7764-2014.9-1.rar

302.32 KB, 下载次数: 633

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

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2014-1-8
在线时间
41 小时
 楼主| 发表于 2014-10-11 13:43:41 | 显示全部楼层
printf("%x\r\n", SPI1_Buffer_Rx1)这个是RX3
回复

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2014-1-8
在线时间
41 小时
 楼主| 发表于 2014-10-11 13:50:52 | 显示全部楼层
复制代码都是乱码   我把工程文件放上来了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-10-11 21:44:19 | 显示全部楼层
帮顶.....
回复

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2014-1-8
在线时间
41 小时
 楼主| 发表于 2014-10-13 09:01:25 | 显示全部楼层
ding/////////
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-10-13 09:58:35 | 显示全部楼层
SCK过高了吧,不能超过18M
回复

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2014-1-8
在线时间
41 小时
 楼主| 发表于 2014-10-13 16:27:00 | 显示全部楼层
回复【6楼】ricefat:
---------------------------------
sck超频一点应该没问题吧?
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-10-13 16:43:42 | 显示全部楼层
回复【7楼】lzh10620:
---------------------------------
应该超不上去
回复

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2014-1-8
在线时间
41 小时
 楼主| 发表于 2014-10-16 10:22:01 | 显示全部楼层
回复【8楼】ricefat:
---------------------------------
把sck调到10mhz了   还是不行呢
回复

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2014-1-8
在线时间
41 小时
 楼主| 发表于 2014-10-16 13:14:19 | 显示全部楼层
是不是spi配置和主程序哪里不对啊  求顶
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2016-11-9
在线时间
0 小时
发表于 2016-11-9 10:25:15 | 显示全部楼层
这款单片机的SPI好像不支持32位数据,换单片机把!
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2020-1-3
在线时间
4 小时
发表于 2020-1-10 15:04:07 | 显示全部楼层
CPOL应该设置为LOW
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-19 22:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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