打印
[应用相关]

STM32 SPI GPIO引脚配置问题

[复制链接]
1576|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Snow7|  楼主 | 2018-3-25 18:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么在利用STM32 SPI固件库驱动串行SPI FLASH时,STM32开发板与FLASH芯片相连接的MOSI MISO引脚都配置成 复用推挽输出模式呢?FLASH芯片不也有数据通过MISO传到STM32吗,此时GPIO应该是输入模式啊??
沙发
android2| | 2018-3-25 18:15 | 只看该作者
MOSI设置成输出模式,MISO设置成输入模式

使用特权

评论回复
板凳
拉克丝| | 2018-3-25 18:24 | 只看该作者
//PB11/WP  PB12/SPI2NSS  PB13/SPI2CLK  PB14/SPI2MISO  PB15/SPI2MOSI
void  SPIInit(void)
{  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);
  GPIO_InitTypeDef GPIO_InitStructure;
  //PB14 (MISO)浮空输入
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_14;
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOB,&GPIO_InitStructure);
  //PB15 MOSI PB13 SCK 复用推挽输出(外设总线用)
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_Init(GPIOB,&GPIO_InitStructure);
  //PB12 NSS,PB11 WP写保护普通推挽输出  本实验用软件控制NSS(主从设备的选择控制端)
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12 | GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_Init(GPIOB,&GPIO_InitStructure);
  
  CE_High();//PB12/NSS  失能

使用特权

评论回复
地板
lefeng| | 2018-3-25 18:33 | 只看该作者
如果看看GPIO配置为Alternate function时的框图,你就明白了。
当MISO的GPIO模式配置为复用推挽输出时,因为SPI模块的MISO信号在主模式时是输入而没有输出,因此下图中的Alternate Function Output信号线上没有信号,所以推挽输出的2个MOS管都是处于关闭状态,不会影响外部信号。
GPIO配置为复用推挽输出时,Alternate Function Input始终是有效的,所以SPI模块的MISO信号可以正确收到外来的信号。

使用特权

评论回复
5
heisexingqisi| | 2018-3-25 19:05 | 只看该作者
楼上正点,是不是楼主看的例子有问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

173

主题

926

帖子

3

粉丝