hpdell 发表于 2016-11-11 16:47:39

stm32f7 spi2 ???

大神们好,

最近在移植 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 */
}
}

hpdell 发表于 2016-11-11 22:41:40

安 发表于 2016-11-11 17:00
是不是频率太高了。如果是数据发生丢失,试着把SPI的频率降低一些。

终于搞定了啊,

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

发表于 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

mark0668 发表于 2016-11-11 18:19
2分频太高了

终于搞定了啊,

原来是我在 设置 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频率不能超标准啊~

hpdell 发表于 2016-11-12 15:37:31

andrewz 发表于 2016-11-12 11:18
外设SPI频率不能超标准啊~

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

如果不超频的话,才十几M的速度,太慢了啊,
页: [1] 2
查看完整版本: stm32f7 spi2 ???