提交 35e266cb 编写于 作者: B blta 提交者: guo

[bsp/stm32] select the input clk of spi based on SPI instances

上级 ba1b8b4b
......@@ -149,12 +149,30 @@ static rt_err_t stm32_spi_init(struct stm32_spi *spi_drv, struct rt_spi_configur
uint32_t SPI_APB_CLOCK;
/* special series */
#if defined(SOC_SERIES_STM32F0) || defined(SOC_SERIES_STM32G0)
SPI_APB_CLOCK = HAL_RCC_GetPCLK1Freq();
#elif defined(SOC_SERIES_STM32H7)
SPI_APB_CLOCK = HAL_RCC_GetSysClockFreq();
/* normal series */
#else
SPI_APB_CLOCK = HAL_RCC_GetPCLK2Freq();
/* SPI2 and SPI3 on APB1 */
if(spi_drv->config->Instance == SPI2 || spi_drv->config->Instance == SPI3)
{
SPI_APB_CLOCK = HAL_RCC_GetPCLK1Freq();
}
/* SPI1, SPI4 and SPI5 on APB2 */
else if(spi_drv->config->Instance == SPI1 || spi_drv->config->Instance == SPI4 || spi_drv->config->Instance == SPI5)
{
SPI_APB_CLOCK = HAL_RCC_GetPCLK2Freq();
}
/* SPI6 get the input clk from APB4(such as on STM32H7). However, there is no HAL_RCC_GetPCLK4Freq api provided.
APB4 has same prescale factor as APB1 from HPRE Clock by default in CubeMx, so we assign APB1 to it.
if you change the default prescale factor of APB4, please modify SPI_APB_CLOCK accordingly.
*/
else
{
SPI_APB_CLOCK = HAL_RCC_GetPCLK1Freq();
}
#endif
if (cfg->max_hz >= SPI_APB_CLOCK / 2)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册