新手入门
- 积分
- 9
- 金钱
- 9
- 注册时间
- 2024-12-9
- 在线时间
- 2 小时
|
楼主 |
发表于 2024-12-22 16:43:54
|
显示全部楼层
显示不全
void SPI2_Init(void)
{
u16 tempreg=0;
RCC->AHB1ENR|=1<<1; //使能 PORTB 时钟
RCC->AHB1ENR|=1<<3; //使能 PORTD 时钟
RCC->APB1ENR|=1<<14; //SPI2 时钟使能
//GPIO_Set(GPIOB,PIN12|PIN13|PIN15,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PB13 15 输出
//GPIO_Set(GPIOD,PIN1|PIN15,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PD1 15 输出
GPIO_Set(GPIOB,PIN12,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PB12输出
GPIO_Set(GPIOB,PIN13|PIN15,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PB13 15 输出
GPIO_Set(GPIOD,PIN1|PIN15,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PD1 15 输出
GPIO_AF_Set(GPIOB,13,5); //PB13,AF5
GPIO_AF_Set(GPIOB,15,5); //PB15,AF5
//这里只针对 SPI 口初始化
RCC->APB1RSTR|=1<<14; //复位 SPI2
RCC->APB1RSTR&=~(1<<14);//停止复位 SPI2
tempreg&=~(1<<10); //全双工模式
tempreg&=~(1<<15); //单向双线通信数据模式
tempreg|=1<<9; //软件 nss 管理
tempreg|=1<<8;
tempreg|=1<<2; //SPI 主机
tempreg&=~(1<<11); //8 位数据格式
tempreg&=~(1<<1); //空闲模式下 SCK 为 0 CPOL=0
tempreg|=~(1<<0); //数据采样从第 1 个时间边沿开始,CPHA=0
//对 SPI2 属于 APB1 的外设.时钟频率最大为 42Mhz 频率.
tempreg&=~(1<<3); //Fsck=Fpclk1/4
tempreg&=~(1<<7); //MSB First
SPI2->CR1=tempreg; //设置 CR1
SPI2->I2SCFGR&=~(1<<11);//选择 SPI 模式
SPI2->CRCPR=7;
SPI2->CR1|=1<<6;
LCD_Writ_Bus(0x0000);//启动传输
PBout(12)=1;
PBout(13)=1;
PBout(15)=1;
PDout(1)=1;
PDout(15)=1;
}
void LCD_Writ_Bus(u8 dat)
{
while((SPI2->SR&1<<1)==0); //等待发送区空
SPI2->DR=dat; //发送一个 byte
} |
|