stm32f103c8t6의 새로운 기능입니다. 이제 SPI 함수를 배우려고하고 RCC에서 SPI 초기화까지 코드를 완성했습니다. 필자는 오실로스코프를 사용하여 테스트 장비 제한으로 인해 SPI1 SCK 신호를 측정했습니다. 실제로 그것은 클럭 신호이지만 내 RCC 구성보다 훨씬 낮습니다. 그 이유를 찾으려고했으나 여전히 실패했습니다. 누군가가 대답을 알고 있는지 물을 수 있습니다.stm32f103 SPI의 시계가 초기화 후 이론 계산과 다릅니다.
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
Errsts = RCC_WaitForHSEStartUp();
if (Errsts == SUCCESS)
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
RCC_PLLConfig(RCC_PLLSource_HSE_Div2, RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY == RESET))
{
}
FLASH_SetLatency(FLASH_Latency_1);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PCLK2Config(RCC_HCLK_Div1);
while (RCC_GetSYSCLKSource() != 0x08)
{
}
}
코드는 상기 제 RCC 대한 구성을 나타내고, I는 클럭으로 HSE를 사용하여 최종 주파수 8MHZ/2 * 9 = 36 Mhz 정도 일텐데이다. 는 기대 훨씬 낮은,
SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_WriteBit(GPIOA, GPIO_Pin_4,Bit_SET);
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
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);
/* Enable SPI2 */
SPI_Cmd(SPI1, ENABLE);
그래서 SPI_BaudRatePrescaler = 4 내 SPI 시계가 36 Mhz 정도 일텐데/4 = 9MHz에서 의미하지만, 실제로 오실로스코프가 동시에 빈번한는 200kHz 주위에 보여줍니다 아래는 내 SPI 및 GPIO 초기화입니다. 또한 다른 값으로 SPI_BaudRatePrescaler를 설정하려고했는데 결과가 선형이 아닌 것 같습니다.
그러므로 누군가가 대답을 알고 있는지 물어보고 싶습니다. 고마워요!