stm32的时钟体系参考(转自正点原子,仅用于学习交流):
一、时钟是什么?
时钟:给单片机提供一个时钟信号(某个频率),协调单片机内部组件同步工作,实现与外部设备通信的同步。(串口的波特率同步)相当于我们的心脏,是核心的部分。
二、时钟源
STM32103的5个时钟源
HSE 高速外部时钟 RC振荡器 频率为8MHz
HSI 高速内部时钟 外接时钟4MHz~16MHz
LSI 低速内部时钟 RC振荡器频率为40KHz 供WDG看门狗
LSE 低速外部时钟 32.768MHz 供给RTC
PLL 锁相环倍频输出(范围2~16倍)最大不超过72MHz
系统时钟来源SYSCLK
HSI
HSE
PLL
时钟输出MCO(PA8)
PLLCLK /2
HSI
HSE
SYSCLK
重要的时钟
SYSCLK 系统时钟
AHB 总线时钟
APB1 低速总线36MHz
APB2 高速总线72MHz
PLL 时钟
三、RCC时钟控制
stm32f10x_rcc.c
①时钟使能配置
void RCC_HSEConfig(uint32_t RCC_HSE);
void RCC_HSICmd(FunctionalState NewState);
void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);
void RCC_PLLCmd(FunctionalState NewState);
②时钟源配置
void RCC_LSEConfig(uint8_t RCC_LSE);
void RCC_LSICmd(FunctionalState NewState);
void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource);
void RCC_RTCCLKCmd(FunctionalState NewState);
③分频系数配置
void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);
void RCC_HCLKConfig(uint32_t RCC_SYSCLK);//分频系数设置
void RCC_PCLK1Config(uint32_t RCC_HCLK);
void RCC_PCLK2Config(uint32_t RCC_HCLK);
④外设时钟使能
void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//时钟
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
⑤其他外设时钟使能
⑥状态参数
⑦RCC中断
void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);
四、SystemInit系统初始化函数
修改系统时钟频率
把指定的宏定义修改
获取当前的系统时钟
/*******************************************************************************
* Clock Definitions
*******************************************************************************/
SystemCoreClock:当前时钟频率
#ifdef SYSCLK_FREQ_HSE
uint32_t SystemCoreClock = SYSCLK_FREQ_HSE; /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_24MHz
uint32_t SystemCoreClock = SYSCLK_FREQ_24MHz; /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_36MHz
uint32_t SystemCoreClock = SYSCLK_FREQ_36MHz; /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_48MHz
uint32_t SystemCoreClock = SYSCLK_FREQ_48MHz; /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_56MHz
uint32_t SystemCoreClock = SYSCLK_FREQ_56MHz; /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_72MHz
uint32_t SystemCoreClock = SYSCLK_FREQ_72MHz; /*!< System Clock Frequency (Core Clock) */
#else /*!< HSI Selected as System Clock source */
uint32_t SystemCoreClock = HSI_VALUE; /*!< System Clock Frequency (Core Clock) */
#endif
时钟源的选择
时钟源切换
修改对应的宏参即可
五、应用
对芯片进行降频,减少功耗损失,类似于手机的低功耗模式,电脑的低性能模式。
例程
void KEY_Clk(void)
{
if(Bit_RESET == GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4))
{
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
RCC->CFGR |= (uint32_t)RCC_CFGR_SW_HSI;
}
else if(Bit_RESET == GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3))
{
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;
}
else
{
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
RCC->CFGR |= (uint32_t)RCC_CFGR_SW_HSE;
}
}
实验现象:
RCC_CFGR_SW_HSE
# 总结 对时钟系统还是不太熟悉,还是一点懵懵懂懂。
上一篇:STM32学习笔记--------外部中断
下一篇:STM32学习笔记--------GPIO
推荐阅读最新更新时间:2024-11-11 10:58
设计资源 培训 开发板 精华推荐
- EEWORLD跨年芯币竞价——示波器、开发板、技术图书等你拿
- 有奖直播:迈来芯消费级超低功耗位置传感器,简化设计降低成本
- 寻人:熟悉“仪器仪表校准流程”的工程师来报到啦!
- 【提问有礼】TI MCU,今天你提问了吗?
- 艾睿合众直播报名:TI Sitara系列芯片在【大数据】产品上的应用
- 看东芝在线展会视频,听权威汽车技术讲解!
- 新年新挑战:ST蓝牙开发板免费申请评测+挑战赛(littleshrimp带队)
- 直播已结束【普源精电2020新品发布会暨行业论坛】
- 阅读 TI工业应用方案(电器、电力传输)精彩专题,挑战你的记忆力!好礼相送
- 下载有礼|是德科技电子书 《通过了解测试精度的基础知识, 提高良率并降低风险》,不做“差不多先生”