新手上路
- 积分
- 33
- 金钱
- 33
- 注册时间
- 2014-4-16
- 在线时间
- 0 小时
|
楼主 |
发表于 2014-5-16 21:07:08
|
显示全部楼层
void SPI2_Init(void)
<br>{
<br> RCC->APB2ENR|=1<<3; //PORTB时钟使能
<br> RCC->APB1ENR|=1<<14; //SPI2时钟使能
<br> //这里只针对SPI口初始化
<br> GPIOB->CRH&=0X000FFFFF;
<br> GPIOB->CRH|=0XBBB00000; //PB13/14/15复用
<br> GPIOB->ODR|=0X7<<13; //PB13/14/15上拉
<br> SPI2->CR1|=0<<10; //全双工模式
<br> SPI2->CR1|=1<<9; //软件nss管理
<br> SPI2->CR1|=1<<8;
<br>
<br> SPI2->CR1|=1<<2; //SPI主机
<br> SPI2->CR1|=0<<11; //8bit数据格式
<br> SPI2->CR1|=1<<1; //空闲模式下SCK为1 CPOL=1
<br> SPI2->CR1|=1<<0; //数据采样从第二个时间边沿开始,CPHA=1
<br> //对SPI2属于APB1的外设.时钟频率最大为36M.
<br> SPI2->CR1|=3<<3; //Fsck=Fpclk1/256
<br> SPI2->CR1|=0<<7; //MSBfirst
<br> SPI2->CR1|=1<<6; //SPI设备使能
<br> SPI2_ReadWriteByte(0xff);//启动传输
<br>}
<br>//SPI2速度设置函数
<br>//SpeedSet:0~7
<br>//SPI速度=fAPB1/2^(SpeedSet+1)
<br>//APB1时钟一般为36Mhz
<br>void SPI2_SetSpeed(u8 SpeedSet)
<br>{
<br> SpeedSet&=0X07; //限制范围
<br> SPI2->CR1&=0XFFC7;
<br> SPI2->CR1|=SpeedSet<<3; //设置SPI2速度
<br> SPI2->CR1|=1<<6; //SPI设备使能
<br>}
<br>//SPI2 读写一个字节
<br>//TxData:要写入的字节
<br>//返回值:读取到的字节
<br>u8 SPI2_ReadWriteByte(u8 TxData)
<br>{
<br> u16 retry=0;
<br> while((SPI2->SR&1<<1)==0) //等待发送区空
<br> {
<br> retry++;
<br> if(retry>=0XFFFE)return 0; //超时退出
<br> }
<br> SPI2->DR=TxData; //发送一个byte
<br> retry=0;
<br> while((SPI2->SR&1<<0)==0) //等待接收完一个byte
<br> {
<br> retry++;
<br> if(retry>=0XFFFE)return 0; //超时退出
<br> }
<br> return SPI2->DR; //返回收到的数据
<br>}
<br>改了,直接源代码啊,没有动 |
|