关于SPI,spiinit函数的一个小问题

2019-07-20 23:25发布

void SPI1_Init(void)
{
    u16 tempreg=0;
    RCC->AHB1ENR|=1<<0; //使能 PORTA 时钟
    RCC->APB2ENR|=1<<12; //SPI1 时钟使能
    GPIO_Set(GPIOB,7<<3,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PB3~5 复用功能输出

    GPIO_AF_Set(GPIOB,3,5); //PB3,AF5
    GPIO_AF_Set(GPIOB,4,5); //PB4,AF5
    GPIO_AF_Set(GPIOB,5,5); //PB5,AF5
    //这里只针对 SPI 口初始化
    RCC->APB2RSTR|=1<<12; //复位 SPI1
    RCC->APB2RSTR&=~(1<<12);//停止复位 SPI1
    tempreg|=0<<10; //全双工模式
    tempreg|=1<<9; //软件 nss 管理
    tempreg|=1<<8;
    tempreg|=1<<2; //SPI 主机
    tempreg|=0<<11; //8 位数据格式
    tempreg|=1<<1; //空闲模式下 SCK 为 1 CPOL=1
    tempreg|=1<<0; //数据采样从第 2 个时间边沿开始,CPHA=1
    //对 SPI1 属于 APB2 的外设.时钟频率最大为 84Mhz 频率.
    tempreg|=7<<3; //Fsck=Fpclk1/256
    tempreg|=0<<7; //MSB First
    tempreg|=1<<6; //SPI 启动
    SPI1->CR1=tempreg; //设置 CR1
    SPI1->I2SCFGR&=~(1<<11);//选择 SPI 模式
    SPI1_ReadWriteByte(0xff);//启动传输
}


这是原子哥原来的一个SPIINIT的函数,没改过,请问这里最多就用到了GPIOB和GPIOG,请问为什么要初始化GPIOA呢?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。