STM32标准库时钟树设置
1.STM32标准库时钟树设置
2.通过keil内置标准库创建stm32工程3.STM32硬件IIC使用4.STM32FATFS文件系统移植5.STM32SPIFLASH读写6.STM32标准库内部Flash读写7.STM32F103xC,xD,xE引脚定义8.STM32标准库通用定时器PWM生成9.STM32标准库通用定时器计数10.STM32标准库基本定时器11.STM32标准库RTC时钟12.STM32ADC单通道转换13.STM32标准库串口DMA空闲中断接收14.STM32OLED使用15.STM32标准库低功耗16.STM32标准库通用定时器输出比较17.STM32标准库通用定时器输入捕获18.STM32硬件IIC使用STM32的系统时钟大致可以分为以下流程
1.外部晶振提供HSE高速外部时钟信号
2.HSE经过PLL锁相环,倍频后得到PLL_CLK高速内部时钟信号
3.PLL_CLK经过分频后得到系统时钟SYSCLK
4.SYSCLK经过分频后得到APB1和APB2的时钟信号
如下图所示:
标准库代码如下(需要引用头文件“stm32f10x_rcc.h”,芯片不同,头文件也要更换):
void HSE_SetSysClock(uint32_t pllmul)
{
//__IO是c语言关键字volatile的重定义,防止这两个变量在读取过程中遭到修改导致的数据错误
__IO uint32_t StartUpCounter = 0,HSEStartUpStatus = 0;
//将RCC时钟树初始化为复位状态
RCC_DeInit();
//开启外部晶振
RCC_HSEConfig(RCC_HSE_ON);
//等待HSE稳定,该函数为阻塞式函数
HSEStartUpStatus = RCC_WaitForHSEStartUp();
//判断HSE是否稳定
if(HSEStartUpStatus == SUCCESS){
//设置PLL时钟来源为HSE,第一个参数表示使用HSE几分频,第二个参数表示PLL倍频倍数
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,pllmul);
//AHB预分频因子设置为1分频,使HCLK = SYSCLK;若设置为2分频,则HCLK/2 = SYSCLK
RCC_HCLKConfig(RCC_SYSCLK_Div1);
//APB1预分频因子设置为2分频,使PCLK1 = HCLK/2
RCC_PCLK1Config(RCC_HCLK_Div2);
//APB2预分频因子设置为1分频,使PCLK2 = HCLK
RCC_PCLK2Config(RCC_HCLK_Div1);
//开启PLL
RCC_PLLCmd(ENABLE);
//等待PLL稳定,此函数为非阻塞式
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){
}
//切换SYSCLK时钟源为系统时钟
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//读取时钟切换位状态,确保切换成功
while(RCC_GetSYSCLKSource() != 0x80){
}
}
else//此处放置初始化失败的程序
{
while(1)
{
}
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤