历史上的今天
今天是:2024年12月26日(星期四)
2018年12月26日 | STM32中通过固件库自己编写系统时钟配置文件
2018-12-26 来源:eefocus
使用HSE配置系统时钟
因为STM工程使用固件库,进入main函数时都已配置好时钟,所以我们自己编写时钟配置文件首先需要复位RCC寄存器!
使能HSE
判断HSE是否启动成功
使能预取指
设置FLASH等待周期
配置3条总线的倍频因子
配置锁相环,使能锁相环
等待锁相环稳定
选择锁相环输出为系统时钟,并等待其稳定
void HSE_sysclock_config( uint32_t RCC_PLLMul_x )
{
//先复位RCC寄存器
RCC_DeInit();
/*使用HSE配置系统时钟*/
//使能HSE
RCC_HSEConfig( RCC_HSE_ON );
//检测HSE是否启动成功
if ( SUCCESS == RCC_WaitForHSEStartUp() )
{
//使能预取指,这是FLASH固件中的函数
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
//设置FLASH等待周期。 因为倍频成72M 所以等待两个周期。
FLASH_SetLatency(FLASH_Latency_2);
//配置三个总线的倍频因子
//HCLK --> AHB 最大为72M,所以只需要1分频
RCC_HCLKConfig(RCC_SYSCLK_Div1);
//PCLK1 --> APB1 最大为36M,所以要2分频
RCC_PCLK1Config(RCC_HCLK_Div2);
//PCLK2 --> APB2 最大为72M,所以只需要1分频
RCC_PCLK2Config(RCC_HCLK_Div1);
//先配置锁相环 PLLCLK = HSE * 倍频因子
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_x);
//使能PLL
RCC_PLLCmd(ENABLE);
//等待PLL稳定
while ( RESET == RCC_GetFlagStatus(RCC_FLAG_PLLRDY) );
//选择系统时钟(选择锁相环输出)
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//等待选择稳定
while ( 0x08 != RCC_GetSYSCLKSource() );
}
else
{
//HSE启动失败,用户自己编写补救措施
}
}
使用HSI配置系统时钟
因为STM工程使用固件库,进入main函数时都已配置好时钟,所以我们自己编写时钟配置文件首先需要复位RCC寄存器!
使能HSI
判断HSI是否启动成功
使能预取指
设置FLASH等待周期
配置3条总线的倍频因子
配置锁相环,使能锁相环
等待锁相环稳定
选择锁相环输出为系统时钟,并等待其稳定
void HSI_sysclock_config( uint32_t RCC_PLLMul_x )
{
__IO uint32_t HSIStatus = 0;
//先复位RCC寄存器
RCC_DeInit();
/*使用HSI配置系统时钟*/
//使能HSI
RCC_HSICmd(ENABLE);
//检测HSE是否启动成功
HSIStatus = RCC->CR & RCC_CR_HSIRDY;
if ( RCC_CR_HSIRDY == HSIStatus )
{
//使能预取指,这是FLASH固件中的函数
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
//设置FLASH等待周期。 因为倍频成72M 所以等待两个周期。
FLASH_SetLatency(FLASH_Latency_2);
//配置三个总线的倍频因子
//HCLK --> AHB 最大为72M,所以只需要1分频
RCC_HCLKConfig(RCC_SYSCLK_Div1);
//PCLK1 --> APB1 最大为36M,所以要2分频
RCC_PCLK1Config(RCC_HCLK_Div2);
//PCLK2 --> APB2 最大为72M,所以只需要1分频
RCC_PCLK2Config(RCC_HCLK_Div1);
//先配置锁相环 PLLCLK = HSE * 倍频因子
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_x);
//使能PLL
RCC_PLLCmd(ENABLE);
//等待PLL稳定
while ( RESET == RCC_GetFlagStatus(RCC_FLAG_PLLRDY) );
//选择系统时钟(选择锁相环输出)
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//等待选择稳定
while ( 0x08 != RCC_GetSYSCLKSource() );
}
else
{
//HSI启动失败,用户自己编写补救措施
}
}
上一篇:STM32—RCC时钟
下一篇:STM32 RTC 读写不正确
史海拾趣
|
现在看到网络中提出了一个很新的概念,云计算,简单看了一下,以一个很通俗化的比喻能够说明这个概念。就是中心相当于发电厂,每个用户相当于家庭用户,可以直接使用电厂发出来的电,而不需要自己去建立发电厂发电,然后自己才能用上电。从理想状态 ...… 查看全部问答> |
|
如何用Altera的Cyclone III系列的FPGA实现具有拍照功能的数码相框? 急急急急急急!!!! 最近在科技创新基地学FPGA,老师安排的任务做出一个作品,我们答辩时说做一个具有拍照功能的数码相框,但是 觉得无从下手,相切合的资料也找的很少,特向大虾请教!!!7月我们就要交 ...… 查看全部问答> |
|
现有两个WINCE下驱动项目外包: 1、S3C2416下驱动16C554多串口芯片的驱动程序 2、S3C2416的声音驱动(芯片的驱动代码有2442平台下的可以做参考) 有意者请加QQ嵌入式外包群:48348107 谢谢各位!… 查看全部问答> |
|
谁用过TW9910A这块视频解码芯片啊?里面的SFR该怎么配置啊?读数据手册,整了老半天,从CAMERA接口还是看不到图像!好抑闷! 谁用过TW9910A这块视频解码芯片啊?里面的SFR该怎么配置啊?读数据手册,整了老半天,从CAMERA接口还是看不到图像!好抑闷!… 查看全部问答> |
|
求助各位大侠,现有一台起重机,380V,50HZ电源供电, 起升电机是两台375KW的电机,型号是YZR500M-8.额定电流746A,转子电流406A,转子电压550V,用可控硅定子调压装置进行调速(一拖二控制).请问从定子调压装置到电机定子需要多大的电缆?电阻器到转子的电 ...… 查看全部问答> |




