初级会员

- 积分
- 151
- 金钱
- 151
- 注册时间
- 2014-1-8
- 在线时间
- 41 小时
|
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);
}
}
|
|