软件:STM32CubeMX,MDK-ARM
硬件:蓝桥杯物联网Lora开发板,板载芯片STM32L071
一、STM32L0时钟系统简介
1、LSI RC,低速内部时钟(RC振荡器),是看门狗(WatchdogLS)的唯一时钟来源,可以作为实时时钟RTC和主时钟输出(MCO)的时钟源。
2、LSE OSC,外部低速时钟(晶振),输入输出引脚接OSC32_IN、OCS32_OUT可以作为实时时钟RTC和主时钟输出(MCO)的时钟源。精度高于内部低速时钟。
3、MSI RC,全称为Multispeedinternal RC oscillator,是stm32lxx低功耗系列独有的时钟,可提供12种频率的时钟源,范围可以从100KHZ到48MHZ之间变化。可以直接选择为系统时钟和AHB时钟,也可以作为MCO的时钟源。MSI为低功耗模式提供了更多的选择,但是精度不高。官方提供的例程中多以MSI作为时钟源。
4、HSI,内部高速时钟(RC振荡器),可以直接选择为系统时钟,可以作为PLL(锁相环倍频输出)时钟源,经倍频后选择作为系统的System Clock(系统时钟)和AHB时钟。HSI还可以作为ADCCLK时钟源。
5、HSE,外部高速时钟(晶振),输入输出引脚接OSC_IN、OCS_OUT,可以直接选择为系统时钟,可以作为PLL源,经倍频后选择作为系统的(系统时钟)和AHB时钟。还可以作为MCO和RTC时钟源。
6、System Clock,系统时钟,是供STM32 中绝大部分部件工作的时钟源,是其他所有外设的时钟的来源。System Clock通过 AHB 分频器分频后送给各模块使用。System Clock还是CK_PWR和MCO的时钟源。System Clock的时钟源有三个MSI、HSI16、PLLCLK。
7、HCLK,高速外设时钟,是AHB总线时钟源,SystemClock经AHB预分频得到。供内存和 DMA 等使用。
8、FCLK为自由振荡处理器时钟,用来保证在休眠是采样到中断和跟踪休眠事件,与HCLK时钟源相同。
9、PCLK1,System Clock经AHB预分频后,送给 APB1 分频器,得出PCLK1,是APB1时钟源,供 APB1 外设使用。APB1上面连接的是低速外设,包括电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3 等等。另一路送给TIMx使用,若APB1分频系数为1,则不倍频,否则倍频系数为2。
9、PCLK2,System Clock经AHB预分频后,送给 APB2 分频器,得出PCLK2,是APB2时钟源,供 APB2外设使用,APB2 上面连接的是高速外设包括UART1、SPI1、Timer1、ADC1、ADC2、所有普通 IO 口(PA~PE)、第二功能 IO 口等。另一路送给TIMx使用,若APB2分频系数为1,则不倍频,否则倍频系数为2。
10、MCO,输出时钟频率。
11、CSS,时钟安保系统,这个功能可以通过软件启用。如果一个HSE时钟故障发生,主时钟自动切换到HSI和软件中断,如果启用,另一个时钟安全系统可以启用,如果LSE故障,它提供一个中断或唤醒事件。
二、例子
学习一下例子,在给的HAL库例子1-3里面
int main{
uint8_t Clock_Number = 0;
uint8_t UserKey_Value = 0;
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
UserKey_Value = HAL_GPIO_ReadPin(GPIOC, USER_KEY);
if (UserKey_Value == 0)
{
Clock_Number++;
if (Clock_Number == 3) //如果按了三次就置0
{
Clock_Number = 0;
}
switch (Clock_Number)
{
case 1:
SystemClock_HSI16M_Config(); // HSI16M时钟
break;
case 2:
SystemClock_MSI4M_Config(); // MSI4M时钟(4)
break;
default :
SystemClock_Config(); // PLL24M时钟,HSI通过PLL变频得到的(24=16x3/2)
break;
}
}
}
}
三、现象
MCO输出的时钟频率可以显示在示波器上。按下USER按键,系统时钟就会在HSI16、MSI4、PLLCLK24之间切换。
软件:STM32CubeMX,MDK-ARM
硬件:蓝桥杯物联网Lora开发板,板载芯片STM32L071
一、STM32L0时钟系统简介
1、LSI RC,低速内部时钟(RC振荡器),是看门狗(WatchdogLS)的唯一时钟来源,可以作为实时时钟RTC和主时钟输出(MCO)的时钟源。
2、LSE OSC,外部低速时钟(晶振),输入输出引脚接OSC32_IN、OCS32_OUT可以作为实时时钟RTC和主时钟输出(MCO)的时钟源。精度高于内部低速时钟。
3、MSI RC,全称为Multispeedinternal RC oscillator,是stm32lxx低功耗系列独有的时钟,可提供12种频率的时钟源,范围可以从100KHZ到48MHZ之间变化。可以直接选择为系统时钟和AHB时钟,也可以作为MCO的时钟源。MSI为低功耗模式提供了更多的选择,但是精度不高。官方提供的例程中多以MSI作为时钟源。
4、HSI,内部高速时钟(RC振荡器),可以直接选择为系统时钟,可以作为PLL(锁相环倍频输出)时钟源,经倍频后选择作为系统的System Clock(系统时钟)和AHB时钟。HSI还可以作为ADCCLK时钟源。
5、HSE,外部高速时钟(晶振),输入输出引脚接OSC_IN、OCS_OUT,可以直接选择为系统时钟,可以作为PLL源,经倍频后选择作为系统的(系统时钟)和AHB时钟。还可以作为MCO和RTC时钟源。
6、System Clock,系统时钟,是供STM32 中绝大部分部件工作的时钟源,是其他所有外设的时钟的来源。System Clock通过 AHB 分频器分频后送给各模块使用。System Clock还是CK_PWR和MCO的时钟源。System Clock的时钟源有三个MSI、HSI16、PLLCLK。
7、HCLK,高速外设时钟,是AHB总线时钟源,SystemClock经AHB预分频得到。供内存和 DMA 等使用。
8、FCLK为自由振荡处理器时钟,用来保证在休眠是采样到中断和跟踪休眠事件,与HCLK时钟源相同。
9、PCLK1,System Clock经AHB预分频后,送给 APB1 分频器,得出PCLK1,是APB1时钟源,供 APB1 外设使用。APB1上面连接的是低速外设,包括电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3 等等。另一路送给TIMx使用,若APB1分频系数为1,则不倍频,否则倍频系数为2。
9、PCLK2,System Clock经AHB预分频后,送给 APB2 分频器,得出PCLK2,是APB2时钟源,供 APB2外设使用,APB2 上面连接的是高速外设包括UART1、SPI1、Timer1、ADC1、ADC2、所有普通 IO 口(PA~PE)、第二功能 IO 口等。另一路送给TIMx使用,若APB2分频系数为1,则不倍频,否则倍频系数为2。
10、MCO,输出时钟频率。
11、CSS,时钟安保系统,这个功能可以通过软件启用。如果一个HSE时钟故障发生,主时钟自动切换到HSI和软件中断,如果启用,另一个时钟安全系统可以启用,如果LSE故障,它提供一个中断或唤醒事件。
二、例子
学习一下例子,在给的HAL库例子1-3里面
int main{
uint8_t Clock_Number = 0;
uint8_t UserKey_Value = 0;
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
UserKey_Value = HAL_GPIO_ReadPin(GPIOC, USER_KEY);
if (UserKey_Value == 0)
{
Clock_Number++;
if (Clock_Number == 3) //如果按了三次就置0
{
Clock_Number = 0;
}
switch (Clock_Number)
{
case 1:
SystemClock_HSI16M_Config(); // HSI16M时钟
break;
case 2:
SystemClock_MSI4M_Config(); // MSI4M时钟(4)
break;
default :
SystemClock_Config(); // PLL24M时钟,HSI通过PLL变频得到的(24=16x3/2)
break;
}
}
}
}
三、现象
MCO输出的时钟频率可以显示在示波器上。按下USER按键,系统时钟就会在HSI16、MSI4、PLLCLK24之间切换。
举报