打印
[STM32F1]

SPI GPIO引脚配置

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

使用特权

评论回复
沙发
stly| | 2021-8-14 13:09 | 只看该作者
MOSI设置成输出模式,MISO设置成输入模式

使用特权

评论回复
板凳
pengf| | 2021-8-14 13:12 | 只看该作者

//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  失能

使用特权

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

使用特权

评论回复
5
juventus9554| | 2021-8-14 13:16 | 只看该作者
楼上正点,是不是楼主看的例子有问题。

使用特权

评论回复
6
kangzj|  楼主 | 2021-8-14 13:20 | 只看该作者
嗯,我再好好缕一缕吧,有了好消息及时通知大家

使用特权

评论回复
7
呐咯密密| | 2021-8-25 17:34 | 只看该作者
这里不用纠结这个,这是由于GPIO的特性导致的,即使你配置成输出,GPIO的数据寄存器也能储存数据,在输出模式下去读寄存器同样可以过得数据

使用特权

评论回复
8
foxsbig| | 2021-8-26 10:18 | 只看该作者
呐咯密密 发表于 2021-8-25 17:34
这里不用纠结这个,这是由于GPIO的特性导致的,即使你配置成输出,GPIO的数据寄存器也能储存数据,在输出模 ...

配置成输出,还可以作为输入用?

使用特权

评论回复
9
呐咯密密| | 2021-8-26 10:32 | 只看该作者
foxsbig 发表于 2021-8-26 10:18
配置成输出,还可以作为输入用?

如果只是数据读取是可以的,你可以观察一下GPIO的数据寄存器,即使你配置成输出,如果有数据进来,还是会被存到数据寄存器中,你去读这个寄存器是可以读到数据的。所以有的SPI把MOSI和MISO都配置成输出,不影响使用。

使用特权

评论回复
10
foxsbig| | 2021-8-26 10:36 | 只看该作者
呐咯密密 发表于 2021-8-26 10:32
如果只是数据读取是可以的,你可以观察一下GPIO的数据寄存器,即使你配置成输出,如果有数据进来,还是会 ...

这个确实没注意过,
回头试试
试试推挽输出,和漏极开路这两种情况,对我来说就差不多了

使用特权

评论回复
11
tpgf| | 2021-9-9 09:39 | 只看该作者
输入输出模式应该也是可以的吧

使用特权

评论回复
12
labasi| | 2021-9-9 09:41 | 只看该作者
这额说不好  是不是涉及到电平的问题啊

使用特权

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

本版积分规则

672

主题

7007

帖子

2

粉丝