STM32 PB3 PB4 PB5作为普通IO,用作SPI使用

#define W25X_SPI_XXX            SPI1
#define W25X_SPI_GPIO            GPIOB
#define W25X_SPI_SCK_CLK    RCC_APB2Periph_SPI1
#define W25X_SPI_CS_Pin        GPIO_Pin_15//GPIOA
#define W25X_SPI_CLK_Pin    GPIO_Pin_3//GPIOB
#define W25X_SPI_MISO_Pin    GPIO_Pin_4//GPIOB
#define W25X_SPI_MOSI_Pin    GPIO_Pin_5//GPIOB

 

    GPIO_InitTypeDef GPIO_InitStruct;
    SPI_InitTypeDef  SPI_InitStructure;

    RCC_APB2PeriphClockCmd(W25X_SPI_SCK_CLK | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);//释放JTAG引脚
    GPIO_PinRemapConfig(GPIO_Remap_SPI1 , ENABLE);//释放JTAG引脚

    
    GPIO_InitStruct.GPIO_Pin     = W25X_SPI_CLK_Pin | W25X_SPI_MOSI_Pin;
    GPIO_InitStruct.GPIO_Mode     = GPIO_Mode_AF_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(W25X_SPI_GPIO,&GPIO_InitStruct);

    GPIO_InitStruct.GPIO_Pin    =    W25X_SPI_MISO_Pin;
    GPIO_InitStruct.GPIO_Mode    =    GPIO_Mode_AF_PP;
    GPIO_Init(W25X_SPI_GPIO,&GPIO_InitStruct);

//    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);
    GPIO_InitStruct.GPIO_Pin        = W25X_SPI_CS_Pin;
    GPIO_InitStruct.GPIO_Mode        = GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Speed    =    GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStruct);

  W25X_SPI_CS_High;    //片选置高电平 
  //打开SP1时钟
 // RCC_APB2PeriphClockCmd(W25X_SPI_SCK_CLK,ENABLE);    
    
  //关闭SPI1 
  SPI_Cmd(W25X_SPI_XXX, DISABLE);     
  //设置SPI2
  SPI_InitStructure.SPI_Direction                    = SPI_Direction_2Lines_FullDuplex;    //全双工收发     
  SPI_InitStructure.SPI_Mode                            = SPI_Mode_Master;                                                //设为主机 
  SPI_InitStructure.SPI_DataSize                    = SPI_DataSize_8b;                                        //8位帧结构 
  SPI_InitStructure.SPI_CPOL                            = SPI_CPOL_High;                                                    //空闲时时钟为低 
  SPI_InitStructure.SPI_CPHA                            = SPI_CPHA_2Edge;                                                 //第1个时钟沿捕获数据
  SPI_InitStructure.SPI_NSS                                = SPI_NSS_Soft;                                                     //CS由SSI位控制(自控)
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; //波特率为4分频
  SPI_InitStructure.SPI_FirstBit                    = SPI_FirstBit_MSB;                                     //高位先传送
  SPI_InitStructure.SPI_CRCPolynomial            = 7;                                                         //CRC校验多项式为7
  SPI_Init(W25X_SPI_XXX,&SPI_InitStructure);                                                                 //初始化SPI1
  //启动SPI2 
  SPI_Cmd(W25X_SPI_XXX,ENABLE); 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值