历史上的今天
返回首页

历史上的今天

今天是:2025年03月18日(星期二)

正在发生

2019年03月18日 | STM32F4时钟配置

2019-03-18 来源:eefocus

看了下时钟树按照http://blog.csdn.net/louyangyang91/article/details/51374924这个博文配置了,结果发现UART波特率不对,但是MOC1\2都是正常输出(168M/5分频输出),蒙了很久才发现 USART_Init(USART1, &USART_InitStructure); 这个函数内部会调用RCC_GetClocksFreq(&RCC_ClocksStatus);这个函数来得到PCLK1\PCLK2等系统时钟,进入这个函数看其内部发现它调用了一个HSE_VALUE的宏定义,继续定位发现居然是

#if !defined  (HSE_VALUE) 

  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */

8M的频率。果断改成我使用的外部晶振12M,然后配置PLL系统时钟168M,再看UART波特率对了。问题解决、、、、

的void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks)

{

  uint32_t tmp = 0, presc = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;

 

  /* Get SYSCLK source -------------------------------------------------------*/

  tmp = RCC->CFGR & RCC_CFGR_SWS;

 

  switch (tmp)

  {

    case 0x00:  /* HSI used as system clock source */

      RCC_Clocks->SYSCLK_Frequency = HSI_VALUE;

      break;

    case 0x04:  /* HSE used as system clock  source */

      RCC_Clocks->SYSCLK_Frequency = HSE_VALUE;

      break;

    case 0x08:  /* PLL used as system clock  source */

 

      /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLLM) * PLLN

         SYSCLK = PLL_VCO / PLLP

         */    

      pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;

      pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;

      

      if (pllsource != 0)

      {

        /* HSE used as PLL clock source */

        pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);

      }

      else

      {

        /* HSI used as PLL clock source */

        pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);      

      }

 

      pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;

      RCC_Clocks->SYSCLK_Frequency = pllvco/pllp;

      break;

    default:

      RCC_Clocks->SYSCLK_Frequency = HSI_VALUE;

      break;

  }

  /* Compute HCLK, PCLK1 and PCLK2 clocks frequencies ------------------------*/

 

  /* Get HCLK prescaler */

  tmp = RCC->CFGR & RCC_CFGR_HPRE;

  tmp = tmp >> 4;

  presc = APBAHBPrescTable[tmp];

  /* HCLK clock frequency */

  RCC_Clocks->HCLK_Frequency = RCC_Clocks->SYSCLK_Frequency >> presc;

 

  /* Get PCLK1 prescaler */

  tmp = RCC->CFGR & RCC_CFGR_PPRE1;

  tmp = tmp >> 10;

  presc = APBAHBPrescTable[tmp];

  /* PCLK1 clock frequency */

  RCC_Clocks->PCLK1_Frequency = RCC_Clocks->HCLK_Frequency >> presc;

 

  /* Get PCLK2 prescaler */

  tmp = RCC->CFGR & RCC_CFGR_PPRE2;

  tmp = tmp >> 13;

  presc = APBAHBPrescTable[tmp];

  /* PCLK2 clock frequency */

  RCC_Clocks->PCLK2_Frequency = RCC_Clocks->HCLK_Frequency >> presc;

}

下面贴出时钟配置代码:


void SetSysClockProc(void)

{

ErrorStatus HSEStartUpStatus;

 

RCC_DeInit();                                


RCC_HSEConfig(RCC_HSE_ON);        

 

HSEStartUpStatus = RCC_WaitForHSEStartUp();        

 

if(HSEStartUpStatus==SUCCESS)                        

{    

RCC_HCLKConfig(RCC_SYSCLK_Div1);        

 

RCC_PCLK1Config(RCC_HCLK_Div4);                

 

RCC_PCLK2Config(RCC_HCLK_Div2);                


FLASH_SetLatency(FLASH_Latency_5);        

 

FLASH_PrefetchBufferCmd(ENABLE); 

 

//RCC_ADCCLKConfig(RCC_PCLK2_Div2);


RCC_PLLConfig(RCC_PLLSource_HSE,12,336,2,7);//168M

 

RCC_PLLCmd(ENABLE);

 

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)

{

}    

 

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); 

 

//  while(RCC_GetSYSCLKSource()!=0x08)

//    {

//    }

}   

 

}


推荐阅读

史海拾趣

General Instrument Optoelectronics公司的发展小趣事
确保电源线没有损坏或接触不良。
巨盛电子(Chesen)公司的发展小趣事

随着环保意识的提高,消费者对环保产品的需求也越来越高。巨盛电子(Chesen)积极响应环保号召,将环保理念融入产品设计和生产过程中。公司采用环保材料、优化生产工艺、加强废弃物处理等措施,减少了对环境的污染。同时,公司还积极开展环保宣传活动,提高了消费者对环保产品的认识和接受度。这些举措不仅塑造了巨盛电子的环保品牌形象,还为企业赢得了更多消费者的支持。

Eastman Kodak Company公司的发展小趣事

随着技术的不断进步,伊士曼柯达公司不断推出新的产品和服务,以满足市场的多样化需求。在20世纪初,柯达已成为全球最大的胶卷供应商,并占据了美国摄影市场的绝大部分份额。此外,公司还积极向国际市场扩张,通过设立分支机构和办事处,将产品销往全球各地。这一时期,柯达不仅凭借其优质的产品赢得了广泛的客户基础,还树立了良好的品牌形象。

芯力微(CHI Power)公司的发展小趣事

芯力微一直将产品质量视为公司的生命线。在产品研发和生产过程中,公司严格遵守国际标准,确保每一颗芯片都达到最高的品质要求。这种对品质的执着追求不仅赢得了客户的信赖,也为公司树立了良好的品牌形象。随着时间的推移,芯力微逐渐成为电子行业中备受尊敬的品牌之一。

Electromagnetic Industries Llp公司的发展小趣事

作为一家有社会责任感的企业,EMI公司不仅关注经济效益的增长,还积极履行社会责任。公司积极参与各种公益活动和社会救助行动,为灾区捐款捐物、支持教育事业等。同时,公司还注重环保和可持续发展,通过引进环保技术和设备、加强废弃物处理等措施降低生产过程中的环境污染。这些行动展现了EMI公司的良好企业形象和社会责任感。

EA Elektro-Automatik公司的发展小趣事

EA Elektro-Automatik深知持续创新是企业发展的重要动力。因此,公司始终将创新作为企业文化的核心价值观之一。公司鼓励员工积极提出创新想法和解决方案,并为他们提供充分的支持和资源。此外,EA Elektro-Automatik还积极参与各类科研项目和行业标准的制定工作,推动整个行业的创新和发展。这种企业文化不仅为公司带来了更多的机会和挑战,也为企业的长期发展奠定了坚实的基础。

以上是关于EA Elektro-Automatik公司在电子行业发展的5个相关故事。这些故事展示了公司从创立到成为全球知名电子测量品牌的发展历程和取得的成就。

问答坊 | AI 解惑

CodeVision AVR 1.25.8 pro

发个AVR的C编译器,第一次发,不知行不行…

查看全部问答>

请问如何开发一个计算机体系结构的实验箱

我们最近要做一个计算机系统结构的实验箱,我不知从何入手。 实验箱主要是这样的, 核心FPGA板 留给用户设计各种cpu , 比如 流水cpu  超标量cpu 等,也就是用来给学生自己开发cpu。 我要做的就是做一个控制部分的电路设计。可以 控制 ...…

查看全部问答>

[请问]怎样在EVC4.0SP4中引用miracl库函数?

我在工程的Header Files里添加了miracl.h和mirdef.h两个头文件,还添加了ms32.lib文件,但在编程中使用otnum()等等miracl库中的函数时仍提示错误。 Repw.obj : error LNK2019: unresolved external symbol \"int __cdecl otnum(struct bigtype *,v ...…

查看全部问答>

关于对嵌入式开发了解的问题

  小弟由于想转入到嵌入式开发的领域中来,所以需要一些最基本的了解,以便有一个更清晰的学习开端,请多多指教:      问题1:在网上查了下嵌入式开发的理解,但越看越晕,一会儿是嵌入式开发,一会儿是linux嵌入 ...…

查看全部问答>

VC开发驱动怎么设置环境啊。急。

想在VC里面写驱动 但是搭建环境完全不会  哪个好心人给我详细说明。。…

查看全部问答>

蓝牙DUN初始化问题

蓝牙新手,想请教下 void DunInit(Task theAppTask, dun_device_type type_of_device, uint16 RI, uint16 DTR, uint16 DCD, uint16 DSR, uint16 priority); 这个DUN初始化函数的参数该如何设定 附上dun.h中的函数说明: /*!     &n ...…

查看全部问答>

求专门为IXP425定制的linux kernel或者patch

求专门为IXP425定制的linux kernel或者patch,或者告诉我下载地址,谢谢了…

查看全部问答>

MSP430中断嵌套机制

(1)430默认的是关闭中断嵌套的,除非你在一个中断程序中再次开总中断EINT。(2)当进入中断程序时,只要不在中断中再次开中断,刚总中断是关闭的,此时来中断不管是比当前中断的优先级高还是低都不执行。(3)若在中断A中开了总中断,刚可以响应 ...…

查看全部问答>

EDA实验与实践 moto_test

module moto_test(clock,key,duty_cycle,pwm_en,pwm_in,motoa,motob,led); input clock;                            //系统时钟(48MHz) input[2:0] ...…

查看全部问答>