[其他ST产品] STM32 RCC配置时钟 MCO输出实验

[复制链接]
2022|45
 楼主| 过期的塔头 发表于 2022-8-24 14:21 | 显示全部楼层 |阅读模式
引言:微控制器允许输出时钟信号到外部MCO管脚。配置选择外部HSE时钟输入12MHz,作为PLL时钟源,经过6倍倍频到72MHz后作为系统时钟(通常的配置是HSE=8MHz,PLL 的倍频因子为9,配置流程同理),通过MCO输出系统时钟SYSCLK,芯片:STM32F103VCT6。


 楼主| 过期的塔头 发表于 2022-8-24 14:23 | 显示全部楼层
1、时钟树中工作流程

295666305c3eb708ec.png
 楼主| 过期的塔头 发表于 2022-8-24 14:25 | 显示全部楼层
上图所示,时钟树中工作流程为1,2,3,4,5,6。

1:HSE OSC,外部HSE输入12MHz时钟信号;

2:PLLXTPRE,HSE分频器作为PLL输入,此处选择不分频;(可以选择不分频,或者2分频)

3:PLLSRC,HSE时钟作为PLL输入时钟;

4:PLLMUL,PLL倍频系数,此处设置为6,得到PLLCLK;

5: SW,系统时钟SYSCLK选择PPLLCLK;(如图,这里系统时钟有三种选择,HSI,HSE,PPLLCLK)

6:MCO,此处选择输出SYSCLK信号。(MCO可以输出四个时钟信号SYSCLK,HSI,HSE,除2的PLL时钟,需要配置相应的输出管脚及功能)
 楼主| 过期的塔头 发表于 2022-8-24 14:26 | 显示全部楼层
2、程序的实现(基于寄存器)

由上面步骤可知,需要用到以下寄存器红色框中的位。

(1)所用到的寄存器

时钟控制寄存器(RCC_CR)

930416305c49d99bf0.png
 楼主| 过期的塔头 发表于 2022-8-24 14:27 | 显示全部楼层
时钟配置寄存器(RCC_CFGR)
934636305c4d8d20aa.png
 楼主| 过期的塔头 发表于 2022-8-24 14:29 | 显示全部楼层
APB2外设时钟使能寄存器(RCC_APB2ENR)
494896305c545bad84.png
 楼主| 过期的塔头 发表于 2022-8-24 14:30 | 显示全部楼层
端口配置高寄存器(GPIOx_CRH)
195976305c57992d92.png
 楼主| 过期的塔头 发表于 2022-8-24 14:31 | 显示全部楼层
(2)代码实现
  1. #include "sys.h"
  2. #include "stm32f10x.h"
  3. #include "stm32f10x_gpio.h"
  4. #include "stm32f10x_rcc.h"

  5. void Stm32_Clock_Init()

  6.    {
  7.                 uint8_t temp=0;      /*  定义temp  */
  8.                 RCC_DeInit ();     /*  复位RCC  */
  9.                 RCC->CR|=1<<16;     /*  HSE使能  */
  10.                 while(!(RCC->CR>>17));     /*  判断HSE是否Ready  */
  11.                 RCC->CFGR|=1<<16;     /*  配置HSE时钟作为PLL时钟输入  */
  12.                 RCC->CFGR|=0x00100000;     /*  PLL 6倍输出  */
  13.                 RCC->CR|=1<<24;     /*  PLL使能  */
  14.                 while(!(RCC->CR>>25));     /*  判断PLL时钟是否Ready  */
  15.                 RCC->CFGR|=0x02;     /*  选择PLL为SYSCLK  */
  16.                 while(temp!=0x02)     /*  判断SYSCLK是否设置成功  */
  17.                 {
  18.                         temp=RCC->CFGR>>2;     
  19.                         temp&=0x03;
  20.                 }
  21.         }


  22. int main(void)
  23. {

  24.         Stm32_Clock_Init();
  25.                 RCC->APB2ENR|=1<<2;     /* IOPA使能   */
  26.                 GPIOA->CRH&=0xFFFFFFF0;     /*  PA8输出,CHR后四位清零  */
  27.                 GPIOA->CRH|=0x0000000B;     /*  推挽输出,最高50MHZ  */
  28.                 RCC->CFGR|=4<<24;     /*  SYSCLK输出  */
  29.                 //RCC->CFGR|=5<<24;     /*  HSI输出  */
  30.                 //RCC->CFGR|=6<<24;     /* HSE输出   */
  31.                 //RCC->CFGR|=7<<24;     /* PLL 2分频后输出 */


  32. }
 楼主| 过期的塔头 发表于 2022-8-24 14:32 | 显示全部楼层
(3)代码解释

RCC->CR|=1<<16;     

RCC_CR中第16位置1,HSE使能
397046305c5b47e44d.png
 楼主| 过期的塔头 发表于 2022-8-24 14:33 | 显示全部楼层
while(!(RCC->CR>>17));     

RCC_CR中第17位置1,判断HSE是否Ready
831846305c5f28fd58.png
 楼主| 过期的塔头 发表于 2022-8-24 16:07 | 显示全部楼层
RCC->CFGR|=1<<16;   

RCC_CFGR中第16位置1,配置HSE时钟作为PLL时钟输入
366596305c62c84df6.png
 楼主| 过期的塔头 发表于 2022-8-24 16:07 | 显示全部楼层
RCC->CFGR|=0x00100000;   

RCC_CFGR中第18-21位为0100,PLL 6倍频输出
87966305dc4f073a7.png
 楼主| 过期的塔头 发表于 2022-8-24 16:10 | 显示全部楼层
RCC->CR|=1<<24;   

RCC_CR中第24位置1,打开PLL
720646305dc6b4ba6d.png
 楼主| 过期的塔头 发表于 2022-8-24 16:11 | 显示全部楼层
while(!(RCC->CR>>25));   

RCC_CR中第25位置1,判断PLL时钟是否Ready
539346305dd1995e14.png
 楼主| 过期的塔头 发表于 2022-8-24 16:11 | 显示全部楼层
RCC->CFGR|=0x02;   

RCC_CFGR中第0-1位置为10, 选择PLL为系统时钟SYSCLK
816116305dd48a6178.png
 楼主| 过期的塔头 发表于 2022-8-24 16:12 | 显示全部楼层
while(temp!=0x02)     

{

temp=RCC->CFGR>>2;     

temp&=0x03;

}

判断SYSCLK是否设置成功,若位3:2为10,则PLL作为系统时钟就绪  
 楼主| 过期的塔头 发表于 2022-8-24 16:13 | 显示全部楼层
 楼主| 过期的塔头 发表于 2022-8-24 16:14 | 显示全部楼层
Stm32_Clock_Init();  

系统时钟初始化

RCC->APB2ENR|=1<<2;  

RCC_APB2ENR中第二位置1,IOPA使能,此时系统时钟为72MHz,选择APB2外设时钟使能寄存器,(APB1最高频率为36MHz),且由硬件原理图知MCO输出引脚为PA8,因此需要配置IOPA8;

 楼主| 过期的塔头 发表于 2022-8-24 16:15 | 显示全部楼层
536666305ddf63e40f.png
GPIOA->CRH&=0xFFFFFFF0;   

由于是PA8引脚输出,端口8属于高位,选择端口配置高寄存器,有前面的寄存器GPIOx_CRH知其 复位值并不为0,这里需要用到该寄存器的后四位(PA8引脚)进行输出管脚配置,因此需要将后四位先清零。
 楼主| 过期的塔头 发表于 2022-8-24 16:16 | 显示全部楼层
GPIOA->CRH|=0x0000000B;     

MCO属于输出模式,且配置为推挽输出,则GPIOA_CRH寄存器的后四位配置为1011,即十六进制的B。
145886305de2bcf5d4.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

85

主题

999

帖子

0

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