打印

关于SPI,看st的例程,IO都初始化为AF_PP?

[复制链接]
6142|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xzm0662|  楼主 | 2008-12-26 13:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么输入脚没初始化为Input?
沙发
香水城| | 2008-12-26 14:00 | 只看该作者

从哪里下载的例程?

使用特权

评论回复
板凳
xzm0662|  楼主 | 2008-12-26 14:05 | 只看该作者

st阿, um0427。我不明白,MISO输入脚为什么也AF_PP

um0427FWLibexamplesSPIM25P64_FLASHspi_flash.c

/*******************************************************************************
* Function Name  : SPI_FLASH_Init
* Description    : Initializes the peripherals used by the SPI FLASH driver.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void SPI_FLASH_Init(void)
{
  SPI_InitTypeDef  SPI_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;

  /* Enable SPI1 and GPIO clocks */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_GPIOA |
                         RCC_APB2Periph_GPIO_CS, ENABLE);

  /* Configure SPI1 pins: SCK, MISO and MOSI */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

使用特权

评论回复
地板
香水城| | 2008-12-26 14:28 | 只看该作者

很可能是写错了

使用特权

评论回复
5
PXJ_520| | 2008-12-26 16:26 | 只看该作者

我也觉得很奇怪,但是能用

我下的这个库也是这样的
不过,我在使用的时候没发现问题呀!~同样的可以读数据

使用特权

评论回复
6
xzm0662|  楼主 | 2008-12-26 16:50 | 只看该作者

难道是IO方向由SPI模块控制?手册上没看到阿

PXJ_520 你用的什么外设?有没有at45d存储器的驱动?谢谢!

使用特权

评论回复
7
香水城| | 2008-12-26 17:23 | 只看该作者

STM32的I/O端口配置为输出模式时,读取输入寄存器仍可得到端

请参考STM32技术参考手册中GPIO章节,I/O端口的输入功能是不能被关闭的;实际上I/O端口配置为开路输出时可以实现双向输入输出,就是应用了这个原理。

虽然是这样,对于楼主的这个SPI问题,不主张这样配置,因为这样做有可能对管脚造成损伤。

使用特权

评论回复
8
walnutcy| | 2008-12-27 22:51 | 只看该作者

配置为AF是为了使用模块功能吧??替换功能的意思

就是不当IO用的意思

使用特权

评论回复
9
simon21ic| | 2008-12-31 01:17 | 只看该作者

USART1的IO设置

--取自ST的FWLib的USART中的例程:
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

#ifdef USE_STM3210B_EVAL
  /* Enable the USART2 Pins Software Remapping */
  GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
#endif

  /* Configure USART1 Rx (PA.10) as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* Configure USART2 Rx as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_RxPin;
  GPIO_Init(GPIOx, &GPIO_InitStructure);
  
  /* Configure USART1 Tx (PA.09) as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* Configure USART2 Tx as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_TxPin;
  GPIO_Init(GPIOx, &GPIO_InitStructure);
}
其中,为什么PA.10是使用GPIO_Mode_IN_FLOATING而不是GPIO_Mode_AF_PP?

使用特权

评论回复
10
PXJ_520| | 2008-12-31 11:46 | 只看该作者

回xzm0662


我用SPI是和一个模块通讯,没用到存储器方面的!~

使用特权

评论回复
11
香水城| | 2008-12-31 12:49 | 只看该作者

关于STM32的I/O端口配置复用输入功能时的用法

请看下图,这是STM32 I/O端口的功能框图,你可以在STM32的技术参考手册里看到。

STM32中每个I/O端口都有8种配置模式:
1)输入浮空
2)输入上拉
3)输入下拉
4)模拟输入
5)开漏输出
6)推挽式输出
7)推挽式复用功能
8)开漏复用功能

但没有复用输入模式,如果要使用复用输入功能如何配置端口呢?

从图中可以看到复用输入通道是从施密特触发器的输出端引出,没有控制开关,因此要使用复用输入模式,端口可以根据需要配置为输入浮空、输入上拉或输入下拉的任意一种。


那么3楼的问题如何解释呢?同样从图中看到,当端口配置为任一输出模式时,输入通道始终是处于打开的状态,也就是说复用输入通道始终是可以使用的,所以3楼那样的配置仍然能够得到正确的结果。

但同时我们也看到,因为打开了输出通道(即2个MOS管不是同时处于关闭状态),端口管脚上会有驱动信号,会与外部器件产生冲突,所以最好不要这样使用;如果没有使用外部器件连接,或使用开路输出模式,则可以利用这个特性模拟双向的I/O操作,或软件的环回模拟。

使用特权

评论回复
12
bear1| | 2014-12-24 21:42 | 只看该作者
香水城 发表于 2008-12-31 12:49
请看下图,这是STM32 I/O端口的功能框图,你可以在STM32的技术参考手册里看到。STM32中每个I/O端口都 ...

MISO输入脚设置为 AF_PP,到底对不对??

使用特权

评论回复
13
gaobc| | 2014-12-25 14:45 | 只看该作者
本帖最后由 gaobc 于 2014-12-25 14:46 编辑

挖坟,这么明白的图,没说对不对,但是不要用,试过STM8低电平拉不下来

使用特权

评论回复
14
elecintop| | 2014-12-28 19:41 | 只看该作者
我也学习一下

使用特权

评论回复
15
白丁野老| | 2014-12-30 21:18 | 只看该作者
我也来学习一下

使用特权

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

本版积分规则

35

主题

163

帖子

0

粉丝