新手入门 
 
	- 积分
 - 10
 
        - 金钱
 - 10 
 
       - 注册时间
 - 2024-12-9
 
      - 在线时间
 - 3 小时
 
 
 
 | 
 
 
 楼主 |
发表于 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 
} |   
 
 
 
 |