STM32
直播中

世态薄凉

9年用户 1243经验值
私信 关注
[问答]

STM32F103ZET6除了通过SPI设置中的分频系数,还有其它办法来更改SCK吗?

【背景】
使用STM32F103ZET6的片子。
基于STM32F10x_StdPeriph_Lib_V3.5.0的标准库样例程序,目前已经可以使用SPI,和ti的ADS8688进行配合工作了,使用的SCK是9M。

但后续因为采用率的要求,需要将SCK提高到16M等(TI ADS8688的最高工作频率是17M)。

虽然可以通过修改SPI配置中的分频系数,来提高SCK到18M,但这样就超过ADS8688的最高工作频率了,会使得数据不对。

【问题】
(1) 请问除了通过SPI设置中的分频系数,还有其它办法来更改SCK吗?(如果能更改为16M甚好);
(2) 目前了解下来,通过SPI设置中的分频系数,只能得到少数几种可能的SCK。是否有其它思路和办法,可以获得更多种SCK频率?

谢谢


目前程序中时钟,和SPI的设置如下:(晶振8M)
---------------------------------------------------------------------------------------------------

void RCC_Configuration(void)
{        
  /* PCLK2 = HCLK/2 */
  RCC_PCLK2Config(RCC_HCLK_Div2);

  /* Enable SPI Master peripheral clocks --------------------------------------------------*/
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1, ENABLE);
}

/* SPI_MASTER configuration ------------------------------------------------*/
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;;
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_InitStructure.SPI_CRCPolynomial = 7;
  SPI_Init(SPI1,  SPI_InitStructure);   


回帖(2)

宣苗

2024-3-26 16:46:56
更换晶振,改变芯片的工作频率
举报

陈艳

2024-3-26 18:08:27
除了通过SPI设置中的分频系数来更改SCK之外,还可以考虑以下几种方法来实现更高的SCK频率:

1. 使用更高速度的外部晶体或时钟源:可以将系统时钟提高到更高的频率,使得SPI时钟频率也能相应提高。

2. 使用DMA传输:通过使用DMA传输,可以减少CPU的使用率,从而提高SPI的工作速度。

3. 使用更高性能的微控制器:如果需要更高的SPI速度,可以考虑使用性能更高的微控制器,如STM32F4系列,它们支持更高的SPI速度。

需要注意的是,当改变SPI速度时,要确保外部设备如ADS8688能够支持更高的时钟频率。如果ADS8688的最高工作频率是17M,那么超过该频率可能导致数据不正确。因此,在增加SPI速度时,应先了解外部设备的技术规格,以确保系统的正确工作。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分