STM32单片机:HSI16(内部16MHz高速时钟)的编程(STM32L4xx)

HSI16时钟信号由内部16MHz的RC振荡器产生。

HSI16的RC振荡器具有以低成本(无外部组件)提供时钟源的优点。它的启动时间也比HSE晶体振荡器快,但即使经过校准,频率也不如外部晶体振荡器或陶瓷谐振器准确。

从停止模式(停止0、停止1、停止2)唤醒后,可以选择HSI16时钟作为系统时钟。如果HSE晶体振荡器发生故障,它也可以用作备用时钟源。

由于制造工艺的变化,HSI16的RC振荡器的频率可能因芯片而异,所以每个器件在25°C时都由ST进行工厂校准,精度为1%。

复位后,出厂校准值加载到内部时钟源校准寄存器(RCC_ICSCR)HSICAL[7:0]位中。

如果应用系统受到电压或温度变化的影响,这可能会影响HSI16的RC振荡器的频率。可以使用内部时钟源校准寄存器(RCC_ICSCR)中的HSITRIM[6:0]位来调整应用中的HSI16频率。

时钟控制寄存器(RCC_CR)中的(HSIRDY=1)位用来指示HSI16已经稳定运行。HSI16启动时,在硬件将(HSIRDY)位置1前,HSI16的时钟信号不会输出。

利用时钟控制寄存器(RCC_CR)中的(HSION)位打开和关闭HSI16的RC振荡器。

以下是实现启动HSI16的代码:

#define RCC                 ((uint32_t)0x40021000)

#define RCC_CR           (*(volatile uint32_t *)(uint32_t)(RCC+0x00))

#define RCC_CR_HSIRDY       BIT(10)

#define RCC_CR_HSION         BIT(8)

// 使能HSI16(16MHz)

RCC_CR |= RCC_CR_HSION;

 // 检测HSI16状态,等待HSI16稳定 

unsigned int   i;

for(i=0; i<1000; i++)

{

         if (RCC_CR & RCC_CR_HSIRDY)  break;

         delay(); 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

btzhy

您的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值