使用STM32内部HSI (内部RC振荡)作为系统时钟

本文详细介绍了如何在STM32单片机中使用内部HSI RC振荡器作为系统时钟源,倍频至48MHz。通过宏定义切换时钟配置,实现不依赖外部晶振的成本优化方案。实验证明,无论是外部8MHz晶振还是内部HSI,都能正确设置系统时钟并验证其频率。

使用STM32内部HSI (内部RC振荡)作为系统时钟

在实际应用中,有时候为了节约成本,我们会能省则省,特别是当项目对成本比较敏感的时候。
本文介绍的就是如何使用内部RC时钟(HSI)作为时钟源,并且倍频到48M作为系统时钟。 这样就能不依赖外部时钟。
实际案例是通过宏定义来切换,既可以使用外部8M晶振来倍频到72M;也可以使用内部的HSI倍频到48M。

一、源码配置

1、直接进入正文,我们在文件里定义了两个“宏”,用来切换时钟配置是选内部HSI还是外部高速HSE。
代码如下:

#define SYSCLOCK_CRYSTAL_OUTSIED (0)  /* 使用外部晶振 */
#define SYSCLOCK_RCCLOCK_INSIED  (1)  /* 使用内部RC振荡 */
/* 时钟源选择 */
#define SYSCLOCK_CHOISE          (SYSCLOCK_RCCLOCK_INSIED)

2、封装使用内部RC作为时钟源,并倍频到48M的函数HSI_SetSysClock();

3、主函数里根据“SYSCLOCK_CHOISE”决定是调用内部RC还是外部晶振作为系统时钟源。
这边我们用到了串口,是为了方便输出信息进行查看。
这里也封装了个函数SYS_CLOCK_OUT用来查看系统频率信息是否真确。
代码如下:

/**
  * @brief  输出系统时钟信息
  */
void SYS_CLOCK_OUT(void)
{
	RCC_ClocksTypeDef RCC_Clocks;
	RCC_GetClocksFreq(&RCC_Clocks);
	printf("SYSCLK_Frequency = %d\r\n",RCC_Clocks.SYSCLK_Frequency);
	printf("HCLK_Frequency = %d\r\n",RCC_Clocks.HCLK_Frequency);
	printf("PCLK1_Frequency = %d\r\n",RCC_Clocks.PCLK1_Frequency);
	printf("PCLK2_Frequency = %d\r\n\r\n",RCC_Clocks.PCLK2_Frequency);
}

int main(void)
{
	u8 sysflag;

	#if SYSCLOCK_CHOISE == SYSCLOCK_CRYSTAL_OUTSIED
	SystemInit();	
	sysflag = 1;
	#elif SYSCLOCK_CHOISE == SYSCLOCK_RCCLOCK_INSIED
	HSI_SetSysClock(RCC_PLLMul_12);	
	sysflag = 2;
	#else
	#error "Sysclock Config Error!"	
	#endif

	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	uart_init(115200);

	if(sysflag == 1)
	{
		printf("Sysclock Use Outsied Crystal\r\n");
	}
	else
	{
		printf("Sysclock Use Inside Rc oscillation\r\n");
	}

	SYS_CLOCK_OUT();
	
	while(1)
	{

	}
}

二、实验现象

使用环境是正点原子的战舰版,串口调试工具是XCOM。

当我们开启使用外部晶振时,编译代码。此时系统时钟应该是72M。载入程序查看调试信息。确实是72M。
在这里插入图片描述
在这里插入图片描述
同样,我们开启使用内部晶振时,编译代码。此时系统时钟应该是48M。载入程序查看调试信息。确实是48M。
在这里插入图片描述
在这里插入图片描述
下方是程序源码地址,有需要的伙伴自行下载:
链接: link.
https://download.youkuaiyun.com/download/d1w2jsw/13586742

其他注意事项

HSI用于作为PLL时钟的输入时,系统时钟的最大频率不得超过64MHz。所以我们倍频到48M。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值