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

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
楼主这器件频率好高
asssdz-382474 回答时间: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的速度,太慢了啊,
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版