想测试一下两块板子传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);
}
} 原子哥,谢谢啦
|