金牌会员
 
- 积分
- 1830
- 金钱
- 1830
- 注册时间
- 2013-7-29
- 在线时间
- 276 小时
|
void SPI1_Init(void)
{
RCC->APB2ENR|=1<<2; //PORTA时钟使能
RCC->APB2ENR|=1<<12; //SPI1时钟使能
RCC->APB2ENR|=1<<0 ; //复用功能时钟使能
//这里只针对SPI口初始化
GPIOA->CRL&=0X0F00FFFF;
GPIOA->CRL|=0XB0B30000; //PA5.6.7复用
GPIOA->ODR|=0XF0; //PA5.6.7下拉
SPI1->CR1|=0<<10;//全双工模式
SPI1->CR1|=1<<9; //软件nss管理
SPI1->CR1|=1<<8;
SPI1->CR1|=1<<2; //SPI主机
SPI1->CR1|=0<<11; //8bit数据格式
SPI2->CR1|=0<<1; //空闲模式下SCK为1 CPOL=1
SPI2->CR1|=0<<0; //数据采样从第二个时间边沿开始,CPHA=1
SPI1->CR1|=7<<3; //Fsck=Fcpu/256
SPI1->CR1|=0<<7; //MSBfirst
SPI1->CR1|=1<<6; //SPI设备使能
}
void SPI1_ReadWriteByte(u8 TxData)
{
while((SPI1->SR&(1<<1))==0);
SPI1->DR=TxData; //发送一个byte
while((SPI1->SR&(1<<0))==0);
}
void HC595_Send_Multi_Byte(u8 data[],u8 lenth)
{
u8 i;
for(i=0;i<lenth;i++)
{
SPI1_ReadWriteByte(data[i]);
}
SPI1_CS_select();
delay_us(5);
SPI1_CS_unselect();
delay_us(5);
}
|
|