博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STM32 RCC实验 MCO脚输出时钟波形
阅读量:7101 次
发布时间:2019-06-28

本文共 2115 字,大约阅读时间需要 7 分钟。

为了能用示波器看到系统时钟,决定将系统时钟输出到MCO引脚上去。

弄了一晚上,看见波形了。
首先建立空的工程,将下面三行代码注释掉:
                ;IMPORT  SystemInit          ;删除SystemInit自己写RCC初始化函数
                ;LDR     R0, =SystemInit
                ;BLX     R0    
下面是设置函数,使用HSI作为系统时钟,不实用PLL,直接将HSI输出到MCO引脚:
void My_RccInitMCOHSI(void)
{
    uint8_t temp;
    My_Rcc_DeInit();
    RCC->CR |= 1<<0;  //复位HSION  开启内部时钟;其实内部时钟不用管的,开机自动使用内部时钟。
    while(!(RCC->CR>>1));    //检查HSI是否就绪
    RCC->CFGR &= (~0x03);     //清零CFGR的0、1位  HSI作为系统时钟   
    while(temp!=0x00)     //读取CFGR的2、3为,判断是否是HSI作为系统时钟设置
    {  
        temp=RCC->CFGR>>2;
        temp&=0x03;
    }  
    //此时HSI已经成为系统时钟
    //HSI时钟就绪后,直接输出到MCO(PA8)
    RCC->APB2ENR |= 1<<2;    //使能PA时钟
    RCC->APB2ENR|=1<<5;    //使能PORTD时钟   
    GPIOA->CRH&=0XFFFFFFF0;
    GPIOA->CRH|=0X0000000B;//PA8 推挽输出(MCO)
//    //设置MCO输出内部HSI时钟
    RCC->CFGR |= 5<<24;       //MCO输出HSI时钟
    //RCC->CFGR |= 4<<24;    MCO输出系统时钟SYSCLK
    //此时就可以在PA8即MCO引脚看见输出波形了   对比下,两者是一样的。
}
下边是示波器出来的图:

 

HSE直接作为SYSCLK。与HSI相似

设置方法如下,代码中有注释:
void My_RccInitMCOHSE(void)
{
uint8_t temp;
My_Rcc_DeInit();
RCC->CR |= 1<<16;  //开启HSEON  开启外部时钟。
while(!(RCC->CR>>17));    //等待HSE就绪

//选择HSE作为系统时钟

RCC->CFGR |= 0x01;

while(temp!=0x01)     //读取CFGR的2、3为,判断是否是HSE作为系统时钟设置

{  
  temp=RCC->CFGR>>2;
  temp&=0x03;
}  
//此时HSE已经成为系统时钟
//HSE时钟就绪后,直接输出到MCO(PA8)
RCC->APB2ENR |= 1<<2; //使能PA时钟
GPIOA->CRH&=0XFFFFFFF0;
GPIOA->CRH|=0X0000000B;//PA8 推挽输出(MCO)

//设置MCO输出内部HSE时钟

RCC->CFGR |= 0x06<<24;    //MCO输出HSE时钟
//RCC->CFGR |= 4<<24; MCO输出系统时钟SYSCLK
//此时就可以在PA8即MCO引脚看见输出波形了   对比下,两者是一样的。
}

PLL部分只放代码和图,刚才写了半天,提示2分钟只能提交5次信息,然后就没了。

郁闷的不想再写了
void My_RccInitMCOPLL(uint8_t PLL)
{
    uint8_t temp;
    My_Rcc_DeInit();
    RCC->CR |= 1<<16;  //开启HSEON  开启外部时钟。
    while(!(RCC->CR>>17));    //等待HSE就绪
    //选择HSE作为系统时钟
    //RCC->CFGR |= 0x01;
    //设置PLL倍频数
    PLL -= 2;       //根据PLL倍频系数与RCC->CFGR的18到21位得出(PLLMUL)
    RCC->CFGR |= PLL<<18;
    RCC->CFGR |= 1<<16;  //HSE作为PLL时钟源
    RCC->CR |= 1<<24;
    while(!(RCC->CR>>25));//等待PLL锁定
    //选择PLL输出作为系统时钟源   
    RCC->CFGR |= 0x02;      
    while(temp!=0x02)     //读取CFGR的2、3为,判断是否是HSE作为系统时钟设置
    {  
        temp=RCC->CFGR>>2;
        temp&=0x03;
    }  
    //此时HSE已经成为系统时钟
    //HSE时钟就绪后,直接输出到MCO(PA8)
    RCC->APB2ENR |= 1<<2;    //使能PA时钟
    GPIOA->CRH&=0XFFFFFFF0;
    GPIOA->CRH|=0X0000000B;//PA8 推挽输出(MCO)
    //设置MCO输出内部HSE时钟
    RCC->CFGR |= 0x07<<24;       //MCO输出HSE时钟
    //RCC->CFGR |= 4<<24; //    MCO输出系统时钟SYSCLK
    //此时就可以在PA8即MCO引脚看见输出波形了   对比下,两者是一样的。
}

 

 

 

 

 

 

Technorati 标签: , ,

转载地址:http://wtkhl.baihongyu.com/

你可能感兴趣的文章
dubbo源码解析(四十一)集群——Mock
查看>>
前端面试问题汇总
查看>>
4.java数组
查看>>
MySQL数据类型优化
查看>>
蚂蚁金服核心技术:百亿特征实时推荐算法揭秘 ...
查看>>
阿里云智能技术战略架构师陈绪:透视2019云计算酣战 ...
查看>>
深度学习要多深,才能读懂人话?|阿里小蜜前沿探索 ...
查看>>
好程序员分享如何看待CSS中BEM的命名方式?
查看>>
国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
查看>>
从零开始学习JAVA多线程(二)
查看>>
如何实现多云成本的管理
查看>>
香港特首参观杭州城市大脑,阿里云技术获赞
查看>>
切入物流分拣市场,3D机器视觉还有多长的路要走?
查看>>
Influxdb简单实用操作
查看>>
好程序员Web前端开发入门之网页制作三要素
查看>>
「镁客早报」紫光申请100亿纾困专项债券;比利时禁止Facebook追踪当地用户
查看>>
阿里云专有宿主机(商业化)发布
查看>>
k8s :构建系统
查看>>
Linux 卸载挂载的磁盘时提示正忙
查看>>
MySQL免编译安装及登录(5.6.36)
查看>>