你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f7 spi2 ???

[复制链接]
hpdell 提问时间:2016-11-11 16:47 /
悬赏3ST金币未解决
大神们好,

最近在移植 spi 的程序,以前使用的 spi5,由与现在硬件是 f7,所以spi 是连接在 SPI2 上,端口为 PC2,PC3,PA9,其中PA9为时钟,

移植过来后,工作不正常或者不稳定,这个程序以前在其他的硬件平台上使用是挺好的,移植过来后只是 更改 IO 口,其他的基本没有修改过

现在f7的 spi2 的配置如下:

/* SPI2 init function */
void MX_SPI2_Init(void)
{

  hspi2.Instance = SPI2;
  hspi2.Init.Mode = SPI_MODE_MASTER;
  hspi2.Init.Direction = SPI_DIRECTION_2LINES;
  hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi2.Init.NSS = SPI_NSS_SOFT;
  hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
  hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi2.Init.CRCPolynomial = 7;
//  hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
//  hspi2.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
  if (HAL_SPI_Init(&hspi2) != HAL_OK)
  {
    Error_Handler();
  }
}

void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct;
  if(spiHandle->Instance==SPI2)
  {
  /* USER CODE BEGIN SPI2_MspInit 0 */

  /* USER CODE END SPI2_MspInit 0 */
    /* Peripheral clock enable */
    __HAL_RCC_SPI2_CLK_ENABLE();

    __GPIOC_CLK_ENABLE();
    __GPIOA_CLK_ENABLE();

    /**SPI2 GPIO Configuration   
    PC2     ------> SPI2_MISO
    PC3     ------> SPI2_MOSI
    PA9     ------> SPI2_SCK
    */
    GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_9;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /* USER CODE BEGIN SPI2_MspInit 1 */


  /* USER CODE END SPI2_MspInit 1 */
  }
}

收藏 2 评论15 发布时间:2016-11-11 16:47

举报

15个回答
hpdell 最优答案 回答时间:2016-11-11 22:41:40
安 发表于 2016-11-11 17:00
是不是频率太高了。如果是数据发生丢失,试着把SPI的频率降低一些。

终于搞定了啊,

原来是我在 设置 mpu 时,吧保护区域设置成了 0x20000000 的地址造成,另外还有就是之前的那片 spi 的芯片也坏了,只能够读出id,但是不能够正常读写数据,时钟频率 2分频超频使用没有的,我的这个spi 的芯片频率可以到80MHz 左右,不过这个stm出的 spi 时钟频率限制也是很奇葩,他奶奶 的,要是能够再高些就好了啊

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

废鱼 回答时间:2016-11-11 17:00:54
是不是频率太高了。如果是数据发生丢失,试着把SPI的频率降低一些。
mark0668 回答时间:2016-11-11 18:19:25
2分频太高了
mark0668 回答时间:2016-11-11 18:32:00
SPI2 最高频率25M 自己算你的是多少吧
hpdell 回答时间:2016-11-11 22:41:56

终于搞定了啊,

原来是我在 设置 mpu 时,吧保护区域设置成了 0x20000000 的地址造成,另外还有就是之前的那片 spi 的芯片也坏了,只能够读出id,但是不能够正常读写数据,时钟频率 2分频超频使用没有的,我的这个spi 的芯片频率可以到80MHz 左右,不过这个stm出的 spi 时钟频率限制也是很奇葩,他奶奶 的,要是能够再高些就好了啊
peter001 回答时间:2016-11-12 10:34:56
楼主这器件频率好高
assssdz 回答时间:2016-11-12 11:06:34
andrewz 回答时间:2016-11-12 11:18:16
外设SPI频率不能超标准啊~

st.png
hpdell 回答时间:2016-11-12 15:37:31
andrewz 发表于 2016-11-12 11:18
外设SPI频率不能超标准啊~

理论上不能够超的,但是目前超屏使用也没有任何问题的,

如果不超频的话,才十几M的速度,太慢了啊,
andrewz 回答时间:2016-11-12 23:01:28
hpdell 发表于 2016-11-12 15:37
理论上不能够超的,但是目前超屏使用也没有任何问题的,

如果不超频的话,才十几M的速度,太慢了啊, ...

...几十M还慢...
zbber 回答时间:2016-11-13 08:43:31
楼主这器件频率好高
高二毛 回答时间:2016-11-14 08:51:23
学习了。。。
assssdz 回答时间:2016-11-14 12:11:36
五哥1 回答时间:2016-11-14 16:15:10
我还在时钟频率里查了半天
12下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版