大神们好,
最近在移植 spi 的程序,以前使用的 spi5,由与现在硬件是 f7,所以spi 是连接在 SPI2 上,端口为 PC2,PC3,PA9,其中PA9为时钟,
移植过来后,工作不正常或者不稳定,这个程序以前在其他的硬件平台上使用是挺好的,移植过来后只是 更改 IO 口,其他的基本没有修改过
现在f7的 spi2 的配置如下:
/* SPI2 init func
tion */
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 */
}
}
终于搞定了啊,
原来是我在 设置 mpu 时,吧保护区域设置成了 0x20000000 的地址造成,另外还有就是之前的那片 spi 的芯片也坏了,只能够读出id,但是不能够正常读写数据,时钟频率 2分频超频使用没有的,我的这个spi 的芯片频率可以到80MHz 左右,不过这个stm出的 spi 时钟频率限制也是很奇葩,他奶奶 的,要是能够再高些就好了啊
终于搞定了啊,
原来是我在 设置 mpu 时,吧保护区域设置成了 0x20000000 的地址造成,另外还有就是之前的那片 spi 的芯片也坏了,只能够读出id,但是不能够正常读写数据,时钟频率 2分频超频使用没有的,我的这个spi 的芯片频率可以到80MHz 左右,不过这个stm出的 spi 时钟频率限制也是很奇葩,他奶奶 的,要是能够再高些就好了啊
一周热门 更多>