[STM32F1] STM32F103SPI工作频率的问题

[复制链接]
442|2
 楼主| 比神乐 发表于 2023-5-24 09:23 | 显示全部楼层 |阅读模式
我的开发板是8兆晶振
时钟配置如下:
  1. void RCC_Configuration(void)
  2. {
  3.   ErrorStatus HSEStartUpStatus;               //Íⲿ¸ßËÙʱÖÓ(HSE)µÄ¹¤×÷״̬±äÁ¿
  4.   
  5.   RCC_DeInit();                               //½«ËùÓÐÓëʱÖÓÏà¹ØµÄ¼Ä´æÆ÷ÉèÖÃΪĬÈÏÖµ
  6.   RCC_HSEConfig(RCC_HSE_ON);                  //Æô¶¯Íⲿ¸ßËÙʱÖÓHSE
  7.   HSEStartUpStatus = RCC_WaitForHSEStartUp(); //µÈ´ýÍⲿ¸ßËÙʱÖÓ(HSE)Îȶ¨

  8.   if(SUCCESS == HSEStartUpStatus)             //Èç¹ûÍⲿ¸ßËÙʱÖÓÒѾ­Îȶ¨
  9.   {
  10.     /* Enable Prefetch Buffer */
  11.     FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //FlashÉèÖÃ
  12.     /* Flash 2 wait state */
  13.     FLASH_SetLatency(FLASH_Latency_2);
  14.    
  15.   
  16.     RCC_HCLKConfig(RCC_SYSCLK_Div1); //ÉèÖÃAHBʱÖÓµÈÓÚϵͳʱÖÓ(1·ÖƵ)/72MHZ
  17.     RCC_PCLK2Config(RCC_HCLK_Div1);  //ÉèÖÃAPB2ʱÖÓºÍHCLKʱÖÓÏàµÈ/72MHz(×î´óΪ72MHz)
  18.     RCC_PCLK1Config(RCC_HCLK_Div2);  //ÉèÖÃAPB1ʱÖÓÊÇHCLKʱÖÓµÄ2·ÖƵ/36MHz(×î´óΪ36MHz)
  19.   
  20. #ifndef STM32F10X_CL                 //Èç¹ûʹÓõIJ»ÊÇSTM32F107x»òSTM32F105xϵÁÐMCU,PLLÒÔÏÂÅäÖà 
  21.     RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //PLLCLK = 8MHz * 9 = 72 MHz
  22. #else                                //Èç¹ûʹÓõÄÊÇSTM32F107x»òSTM32F105xϵÁÐMCU,PLLÒÔÏÂÅäÖÃ
  23.     /***** ÅäÖÃPLLx *****/
  24.     /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */
  25.     RCC_PREDIV2Config(RCC_PREDIV2_Div5);
  26.     RCC_PLL2Config(RCC_PLL2Mul_8);

  27.     RCC_PLL2Cmd(ENABLE); //ʹÄÜPLL2
  28.     while (RCC_GetFlagStatus(RCC_FLAG_PLL2RDY) == RESET);//µÈ´ýPLL2Îȶ¨

  29.     /* PLL configuration: PLLCLK = (PLL2 / 5) * 9 = 72 MHz */
  30.     RCC_PREDIV1Config(RCC_PREDIV1_Source_PLL2, RCC_PREDIV1_Div5);
  31.     RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_9);
  32. #endif

  33.     RCC_PLLCmd(ENABLE); //ʹÄÜPLL
  34.     while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //µÈ´ýPLLÎȶ¨

  35.     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);          //ÉèÖÃϵͳʱÖÓµÄʱÖÓԴΪPLL

  36.     while(RCC_GetSYSCLKSource() != 0x08);               //¼ì²éϵͳµÄʱÖÓÔ´ÊÇ·ñÊÇPLL
  37.     RCC_ClockSecuritySystemCmd(ENABLE);                 //ʹÄÜϵͳ°²È«Ê±ÖÓ

  38.         /* Enable peripheral clocks --------------------------------------------------*/
  39.           /* Enable I2C1 and I2C1 clock */
  40.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

  41.           /* Enable GPIOA GPIOB SPI1 and USART1 clocks */
  42.           RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB
  43.                                         | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD
  44.                                         | RCC_APB2Periph_AFIO, ENABLE);   
  45.   }
  46. }
这是不是表示72兆啊?
SPI初始化:
  1. /* ³õʼ»¯ÅäÖÃSTM32 SPI1 */
  2.         SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;        //SPIÉèÖÃΪ˫ÏßË«Ïòȫ˫¹¤
  3.         SPI_InitStructure.SPI_Mode=SPI_Mode_Master;                                                        //ÉèÖÃΪÖ÷SPI
  4.         SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;                                                //SPI·¢ËͽÓÊÕ8λ֡½á¹¹
  5.         SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;                                                        //ʱÖÓÐü¿ÕµÍ
  6.         SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;                                                        //Êý¾Ý²¶»ñÓÚµÚ1¸öʱÖÓÑØ
  7.         SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;                                                                //NSSÓÉÍⲿ¹Ü½Å¹ÜÀí
  8.         SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_2;        //²¨ÌØÂÊÔ¤·ÖƵֵΪ2
  9.         SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;                                        //Êý¾Ý´«Êä´ÓMSBλ¿ªÊ¼
  10.         SPI_InitStructure.SPI_CRCPolynomial=7;                                                                //CRC¶àÏîʽΪ7
  11.         SPI_Init(SPI1,&SPI_InitStructure);                                                                        //¸ù¾ÝSPI_InitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèSPI1¼Ä´æÆ÷

  12.         SPI_Cmd(SPI1,ENABLE);        //STM32ʹÄÜSPI1
波特率预分频值为2,是不是表示SPI工作在36MHz啊?谢谢
Jacquetry 发表于 2023-5-25 22:53 | 显示全部楼层
是的,spi1挂载在APB2总线上
 楼主| 比神乐 发表于 2023-5-26 08:51 | 显示全部楼层
Jacquetry 发表于 2023-5-25 22:53
是的,spi1挂载在APB2总线上

谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

470

主题

3537

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部