[MCU] 【CW32L052测评】 sysclk延时测试

TL-LED   2023-7-18 23:10 楼主

这篇来学习下CW32L052芯片是sysclk时钟的配置和使用。

 

一、时钟框图

 

芯片能工作的最大时钟是48MHz,这里使用内部48MHz的HSI时钟来配置sysclk。

001.png

 

二、程序部分

 

2.1、时钟配置

时钟这部分配置有点奇怪,直接配置使能48MHz的HSI,程序不启动,时钟切换到HSE或LSI,再且回到HSI,可以正常启动运行。

void rcc_config(void)
{
	uint8_t res = 0U;
	RCC_AHBPeriphClk_Enable(RCC_AHB_PERIPH_FLASH, ENABLE);
	RCC_LSI_Enable( );                                                   //开启外部高速时钟LSI
	res = RCC_SysClk_Switch( RCC_SYSCLKSRC_LSI );                        //切换系统时钟到LSI
	if( res == 0x00 )                                                    //系统时钟切换成功
	{
			RCC_HSI_Disable();                                               //切换时钟到PLL后关闭源时钟HSI
			FirmwareDelay( 400 );   //about 100mS
	}
	
	RCC_HSI_Enable( RCC_HSIOSC_DIV1 );                                   //开启内部高速时钟HSI = HSIOSC / 2
	FLASH_SetLatency(FLASH_Latency_3); 
	res = RCC_SysClk_Switch( RCC_SYSCLKSRC_HSI );                        //切换系统时钟到HSI
	if( res == 0x00 )                                                    //系统时钟切换成功
	{
			RCC_LSI_Disable();                                               //切换时钟到HSI后关闭LSI时钟
			FirmwareDelay( 275000 );  //about 100mS
	}
	
	RCC_HCLKPRS_Config(RCC_HCLK_DIV1);
	
	RCC_HCLK_OUT();                           //通过PA04观察HCLK频率
}

 

2.2、主程序

 

配置sysclk的时钟为48M

InitTick( 48000000 );                  //初始化SysTick

 

int32_t main(void)
{
		GPIO_InitTypeDef GPIO_InitStruct = {0};
		rcc_config();
		init_uart();
	
    InitTick( 48000000 );                  //初始化SysTick

    __RCC_GPIOC_CLK_ENABLE();

    GPIO_InitStruct.IT = GPIO_IT_NONE;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pins = LED_GPIO_PINS;

    GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);

    while (1)
    {
        GPIO_TogglePin(LED_GPIO_PORT, LED_GPIO_PINS);
       // Delay(0xFFFF);
				SysTickDelay(100);
    }
}

 

三、程序运行

 

示波器测试LED2端口PC10,波形如下

004.png

延时100ms,测试延时时间是102ms,使用内部时钟有一定的偏差。

回复评论 (6)

sysclk延时是编程的基本功,好好测试,主要还是配置

点赞  2023-7-19 23:05
引用: 火辣西米秀 发表于 2023-7-19 23:05 sysclk延时是编程的基本功,好好测试,主要还是配置

是呀,操作系统的心跳

点赞  2023-7-20 06:35
SYSCLK切换到HSI 48MHz前,FLASH需要配置读等待周期。FLASH_SetLatency(FLASH_Latency_2);;
点赞  2023-7-26 13:24

用的官方生成的代码吗?

默认摸鱼,再摸鱼。2022、9、28
点赞  2023-7-26 19:15
引用: freebsder 发表于 2023-7-26 19:15 用的官方生成的代码吗?

嗯,库是官方的

点赞  2023-7-26 20:11
引用: TL-LED 发表于 2023-7-26 20:11 嗯,库是官方的

质量堪忧啊,呵呵

默认摸鱼,再摸鱼。2022、9、28
点赞  2023-7-27 16:19
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复