你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F103 SPI时钟初始化后与理论值不一致

[复制链接]
wh2104 提问时间:2016-8-6 19:24 /
本帖最后由 wh2104 于 2016-8-7 00:39 编辑

大家好,我是新手,最近在研究stm32f103c8t6的spi功能,我自己编程写了一段从rcc开始一直到spi初始化的程序。由于设备有限,我用示波器测量了spi sck管脚的输出波形,的确是时钟信号,但是频率和我rcc设置的有出入,底了很多,上网找了一下原因没有一个合适的。所以请问一下我的程序到底哪里出错了,谢谢。

  1. <div class="blockcode"><blockquote> RCC_DeInit();
  2.         RCC_HSEConfig(RCC_HSE_ON);
  3.         Errsts = RCC_WaitForHSEStartUp();

  4.         if (Errsts == SUCCESS)
  5.         {
  6.                 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  7.                 RCC_PLLConfig(RCC_PLLSource_HSE_Div2, RCC_PLLMul_9);
  8.                 RCC_PLLCmd(ENABLE);


  9.                 while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY == RESET))
  10.                 {
  11.                 }
  12.                 FLASH_SetLatency(FLASH_Latency_1);
  13.                 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  14.                 RCC_HCLKConfig(RCC_SYSCLK_Div1);
  15.                 RCC_PCLK1Config(RCC_HCLK_Div2);
  16.                 RCC_PCLK2Config(RCC_HCLK_Div1);
  17.                 while (RCC_GetSYSCLKSource() != 0x08)
  18.                 {
  19.                 }
  20.         }
复制代码

上面是rcc的初始设置,我用的hse作为芯片的时钟信号,根据上面的code可以算出apb2(pclk2)的时钟信号是36mhz,所以我的spi也应该是36mhz。

下面是我的spi初始化设置:
  1. <div class="blockcode"><blockquote>{
  2.         SPI_InitTypeDef SPI_InitStructure;
  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.        
  5.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  6.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  7.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
  8.                 
  9.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7;
  10.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  11.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  12.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  13.        
  14.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  15.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  16.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  17.         GPIO_Init(GPIOA, &GPIO_InitStructure);       
  18.        
  19.         GPIO_WriteBit(GPIOA, GPIO_Pin_4,Bit_SET);

  20.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  21.         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  22.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
  23.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
  24.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
  25.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  26.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
  27.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  28.         SPI_InitStructure.SPI_CRCPolynomial = 7;
  29.         SPI_Init(SPI1, &SPI_InitStructure);
  30.         /* Enable SPI2 */
  31.         SPI_Cmd(SPI1, ENABLE);
  32. }
复制代码

这里SPI_BaudRatePrescaler_4将spi 时钟信号分频了4,理论上spi现在应该是36mhz/4=9mhz。但是我用示波器观测sck管脚,只有200khz左右,而且我不断改变SPI_BaudRatePrescaler的值,发现结果也不是线性的,很奇怪。所以想问一下这个到底是什么原因。


提前谢谢大家。
收藏 评论1 发布时间:2016-8-6 19:24

举报

1个回答
宏沉一笑 回答时间:2016-8-6 23:14:03
支持一下!

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版