打印
[CW32F030系列]

【CW32F030CxTx StartKit测评】 外部HSE使用

[复制链接]
1065|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tlled|  楼主 | 2022-7-2 09:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 tlled 于 2022-7-2 09:08 编辑

    下面通过例程来学习下时钟电路部分,使用外部16M晶振PLL输出48M内部时钟。

    一、手册资料

    1.1、有关RCC部分手册资料
    可以产生sysclk时钟有下面5种方式选择。
   

    1.2、使用HSE时钟PLL    产生48M时钟可以使用HSI和HSE时钟源,这里我选择使用外部的16M时钟源。
   

    二、测试代码

    参考固件库有关RCC的例程代码。

    2.1、测试HCLK时钟
void rcc_config(void)
{
        uint8_t res = 0U;
        RCC_AHBPeriphClk_Enable(RCC_AHB_PERIPH_FLASH, ENABLE);   //打开FLASH时钟
        RCC_HCLK_OUT();                                                         //通过PA04观察HCLK频率
        RCC_HSE_Enable( RCC_HSE_MODE_OSC, 16000000, RCC_HSE_DRIVER_NORMAL, RCC_HSE_FLT_CLOSE ); //开启外部高速时钟HSE,实际频率需要根据实际晶体频率进行填写
               
        RCC_PLL_Enable( RCC_PLLSOURCE_HSEOSC, 16000000, RCC_PLL_MUL_3 );     //开启PLL,PLL时钟来源为HSE
        FLASH_SetLatency(FLASH_Latency_2);    //频率大于24M需要配置FlashWait=2
        res = RCC_SysClk_Switch( RCC_SYSCLKSRC_PLL );                        //切换系统时钟到PLL
        if( res == 0x0U )                                                    //切换系统时钟成功
        {
                RCC_HSI_Disable();                                               //切换时钟到PLL后关闭源时钟HSI
        }
}

   使用PA04输出HCLK时钟,测试输出的时钟波形:
   

    2.2、LED灯输出测试

    通过IO口来验证HCLK的正确否。

    2.2.1、systick时钟配置
    从手册上看,sysclk是直接连接到HCLK时钟总线上
   

    2.2.2、systick配置代码

#include "delay.h"
#include "cw32f030.h"

static u8  fac_us=0;                                                                  
static u16 fac_ms=0;                                                       
       
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
{
  if (SysTick_CLKSource == SysTick_CLKSource_HCLK)
  {
    SysTick->CTRL |= SysTick_CLKSource_HCLK;
  }
  else
  {
    SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;
  }
}
   
void delay_init(void)
{
        uint32_t SystemCoreClock         = SYSCLK_FREQ_48MHz;
        //SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);       
        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
        fac_us=SystemCoreClock/1000000;                                  
        fac_ms=(u16)fac_us*1000;                                       
}                                                                    

void delay_us(u32 nus)
{               
        u32 temp;                     
        SysTick->LOAD=nus*fac_us;                                                            
        SysTick->VAL=0x00;                                               
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;          
        do
        {
                temp=SysTick->CTRL;
        }while((temp&0x01)&&!(temp&(1<<16)));                 
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;       
        SysTick->VAL =0X00;                                               
}

void delay_ms(u16 nms)
{                                     
        u32 temp;                  
        SysTick->LOAD=(u32)nms*fac_ms;                               
        SysTick->VAL =0x00;                                                       
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;         
        do
        {
                temp=SysTick->CTRL;
        }while((temp&0x01)&&!(temp&(1<<16)));                  
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;       
        SysTick->VAL =0X00;                                                             
}

    2.3、主测试程序

    2.3.1、测试硬件电路
    使用开发板上的LED1指示灯来输出。使用的端口是PB9
   
    2.3.2、测试住代码
    在主程序中使用100ms的systick延时,来翻转PB9输出状态
int32_t main(void)
{
                rcc_config();
                delay_init();       
    init_led();

    while (1)
    {
                                led1_tog();
                                delay_ms(100);
    }
}

    2.3.3、PB9输出波形   

    输出100ms正常,上面就是测试使用HSE产生48M过程。



使用特权

评论回复
沙发
七毛钱| | 2022-7-4 14:44 | 只看该作者
所以芯源的片子好上手不

使用特权

评论回复
板凳
tlled|  楼主 | 2022-7-4 15:16 | 只看该作者
七毛钱 发表于 2022-7-4 14:44
所以芯源的片子好上手不

看资料结合例程,还是好上手的

使用特权

评论回复
地板
jstgotodo| | 2022-7-9 12:10 | 只看该作者
还有48M内部时钟?

使用特权

评论回复
5
suzhanhua| | 2022-7-9 12:26 | 只看该作者
倍频可以到多少呢   

使用特权

评论回复
6
mmbs| | 2022-7-9 13:12 | 只看该作者
切换PLL以后,为什么会失效?  

使用特权

评论回复
7
pl202| | 2022-7-9 14:11 | 只看该作者
外部HSE不是官网的代码吗   

使用特权

评论回复
8
soodesyt| | 2022-9-10 20:23 | 只看该作者
倍频到多少呢?         

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

125

主题

691

帖子

6

粉丝