stm32f103zet6时钟

本文介绍STM32微控制器的时钟配置方法,包括HSE配置、PLL设置以及AHB/APB时钟分配等,并通过具体代码示例展示了如何使用SysTick定时器实现精确的延时。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


voidRCC_HSE_Configuration(void) //HSE作为PLL时钟,PLL作为SYSCLK
{
RCC_DeInit(); /*将外设RCC寄存器重设为缺省值 */
RCC_HSEConfig(RCC_HSE_ON);
/*设置外部高速晶振(HSE) HSE晶振打开(ON)*/
  if(RCC_WaitForHSEStartUp() == SUCCESS)
   { 
/*等待HSE起振,  SUCCESS:HSE晶振稳定且就绪*/ 
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/*设置AHB时钟(HCLK)RCC_SYSCLK_Div1——AHB时钟 = 系统时*/ 
RCC_PCLK2Config(RCC_HCLK_Div1);
/*设置高速AHB时钟(PCLK2)RCC_HCLK_Div1——APB2时钟 = HCLK*/    
RCC_PCLK1Config(RCC_HCLK_Div2);
/*设置低速AHB时钟(PCLK1)RCC_HCLK_Div2——APB1时钟 = HCLK / 2*/
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
/*设置PLL时钟源及倍频系数*/   
RCC_PLLCmd(ENABLE);    /*使能PLL */
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) ==RESET) ;
/*检查指定的RCC标志位(PLL准备好标志)设置与否*/
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); 
/*设置系统时钟(SYSCLK) */ 
while(RCC_GetSYSCLKSource() != 0x08);    
/*0x08:PLL作为系统时钟 */ 
 }
}


  




























首先设置好系统时钟源与频率等问题后,设置计数器。

void delay_ms(u32 i)
{
u32 temp;
SysTick->LOAD=9000*i;  //设置重装数值, 72MHZ时
SysTick->CTRL=0X01; //使能,减到零是无动作,采用外部时钟源
SysTick->VAL=0; //清零计数器
do
{
temp=SysTick->CTRL;   //读取当前倒计数值
}
while((temp&0x01)&&(!(temp&(1<<16)))); //等待时间到达
SysTick->CTRL=0; //关闭计数器
SysTick->VAL=0; //清空计数器
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值