微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > STM32 SPI GPIO引脚配置的一个小问题

STM32 SPI GPIO引脚配置的一个小问题

时间:10-02 整理:3721RD 点击:
为什么在利用STM32 SPI固件库驱动串行SPI FLASH时,STM32开发板与FLASH芯片相连接的MOSI MISO引脚都配置成 复用推挽输出模式呢?FLASH芯片不也有数据通过MISO传到STM32吗,此时GPIO应该是输入模式啊?

MOSI设置成输出模式,MISO设置成输入模式

  1. //PB11/WP  PB12/SPI2NSS  PB13/SPI2CLK  PB14/SPI2MISO  PB15/SPI2MOSI
  2. void  SPIInit(void)
  3. {  
  4.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);
  5.   GPIO_InitTypeDef GPIO_InitStructure;
  6.   //PB14 (MISO)浮空输入
  7.   GPIO_InitStructure.GPIO_Pin=GPIO_Pin_14;
  8.   GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
  9.   GPIO_Init(GPIOB,&GPIO_InitStructure);
  10.   //PB15 MOSI PB13 SCK 复用推挽输出(外设总线用)
  11.   GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_15;
  12.   GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
  13.   GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  14.   GPIO_Init(GPIOB,&GPIO_InitStructure);
  15.   //PB12 NSS,PB11 WP写保护普通推挽输出  本实验用软件控制NSS(主从设备的选择控制端)
  16.   GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12 | GPIO_Pin_11;
  17.   GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  18.   GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  19.   GPIO_Init(GPIOB,&GPIO_InitStructure);
  20.   
  21.   CE_High();//PB12/NSS  失能

复制代码

如果看看GPIO配置为Alternate function时的框图,你就明白了。
当MISO的GPIO模式配置为复用推挽输出时,因为SPI模块的MISO信号在主模式时是输入而没有输出,因此下图中的Alternate Function Output信号线上没有信号,所以推挽输出的2个MOS管都是处于关闭状态,不会影响外部信号。
GPIO配置为复用推挽输出时,Alternate Function Input始终是有效的,所以SPI模块的MISO信号可以正确收到外来的信号。
这上面讲的很详细http://bbs.eeworld.com.cn/thread-253986-1-1.html

在复用模式下,gpio方向完全由内部控制,不需要程序干预

楼上的说的对,复用时GPIO由内部控制。由你设置的复用功能决定!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top