初级会员

- 积分
- 128
- 金钱
- 128
- 注册时间
- 2012-12-14
- 在线时间
- 2 小时
|

楼主 |
发表于 2013-1-24 23:35:02
|
显示全部楼层
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "stm32f10x_spi.h"
//2012.12.5开始 12.10 stm32正常
void SPI2init()
{
RCC->APB2ENR|=0x00000028;//使能时钟GPIOB,D时钟
RCC->APB1ENR|=1<<14;//使能SPI2口时钟
GPIOB->CRH&=0x000FFFFF; //PB13,14,15初始给高电平
GPIOB->CRH|=0xBBB00000; //
GPIOB->ODR|=0x0000E000;//初始为高电平
GPIOB->CRH&=0x000FFFFF; //PB13,14,15复用 50HZ 推挽输出
GPIOB->CRH|=0xBBB00000;
SPI2->CR1=0x0000;//全部清零
SPI2->CR1|=0x033E;//选择STM32为主设备,256分频,从第1个跳变开始采样,SCK空闲时为高电平,nss软件管理,内部引脚置位 16bit读写
SPI2->CR1|=0x0040;//SPI使能
}
void SPI1init()
{
RCC->APB2ENR|=0x00001004;//使能SPI1时钟,GPIOA时钟
GPIOA->CRL&=0x000fffff;
GPIOA->CRL|=0xBBB000000;
SPI1->CR1=0x0000;//全部清零
SPI1->CR1|=1<<9;//nss软件管理
//SPI1->CR1|=1<<11;//16bit读写
//SPI1->CR1|=1;//捕获第二个
SPI1->CR1|=1<<6;//使能
}
u8 SPI2_ReadWriteByte(u8 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; //返回收到的数据
}
u8 SPI1_ReadWriteByte(u8 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)
{
u8 test=0;
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
SPI2init();
SPI1init();
while(1)
{
SPI2_ReadWriteByte(0x00ff);
test=SPI1_ReadWriteByte(0x0000);
delay_ms(10);
}
} |
|