STM32 系统时钟初始化函数和延时函数

系统时钟初始化函数

void Stm32 Clock nit(u8 PLL)
{
unsigned char temmp=0; 
MYRCC_Delnit();            //复位并配置向量表
RCC->CR|=0x00010000;       //把时钟控制寄存器的第16置1来开启外部振荡器
while(!RCC->CR>>17);       //通过判断时钟控制寄存器的第17位,看一下外部振荡器是否就绪
RCC->CFCR=0X00000400;      //通过设置时钟配置寄存器8-10位来保证APB1时钟频率不超过36MHZ。
PLL-=2;                    //抵消2个单位
RCC->CFGR|=PLL<<18;        //设置PLL值
ROC->CFGR|=1<<16;          //外部时钟作为PLL输入时钟
FLASH->ACR|=0x32;          //FLASH 2个延时周期

RCC->CRI=0x01000000;       //通过时钟控制寄存器的第24位,使能PLL
while(!(RCC->CR>>25));     //通过判断时钟控制寄存器的第25位,看一下PLL是否就绪
RCC->CFGR|=0x00000002;     //通过设置时钟配置寄存器0-1位把PLL作为系统时钟
whiler(temp!=0x02);        //等待PLL作为系统时钟设置成功
 {
   temp=RCC>CFGR>>2;
   temmp&=0x03;
  }
}

延时函数

         如果我们需要得到精确的定时,那么我们可以使用STM32中的定时器(时钟9M,1微秒减9),例如,SysTick 定时器。SysTick是一个24位的递减计数器,它放在NVIC中,主要目的是为了给操作系统提供一个硬件上的中断(滴答中断)。SysTick设定初值并使能后,每经过1个系统时钟周期,计数值就减1。计数到0 时,SvsTick计数器自动重装初值并继续计数,同时内部的COUNTFLAG标志会置位,触发中断(假如中断使能情况下)。在STM32中,SysTick定时器可以用来作为操作系统的滴答定时器。如果我们的程序不使用操作系统,那么SysTick定时器可以用来产生精确的定时。

//初始化延迟函数
//SYSTICK的时钟固定为HCLK时钟的1/8
//SYSCLK:系统时钟
void delay_init(u8 SYSCLK)
{
   SysTick->CTRL&=0xfffffffb;  //bit2清空,选外部时钟 HCLK/8
   fac_us=SYSCLK/8:
   fac_ms=(u16)fac_us*1000;
}
//延时nus
//nus为要延时的us数
//n为10,20,30,.....

void delay_us(u32 nus)
{
  u32 temp;
  SysTick->LOAD=nus*fac_us; //时间加载
  SysTick->VAL=0x00;  //清空计数器
  SysTick->CTRL=0x01; //开始倒数
  
  do
  {
   temp=SysTick->CTRL;
   }
   while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
   SysTick->CTRL=0x00;//关闭计数器
   SysTick->VAL =0X00://清空计数器
}

要注意因为 LOAD 仅仅是一个24bit的寄存器,延时的ms数不能太长。否则超出了LOAD 的范围,高位会被舍去,导致延时不准。最大延迟ms数可以通过公式:n ms<=0xffffff *8*1000/SYSCLK 计算。SYSCLK 单位为Hz,nms的单位为ms。如果时钟为72M,那么nms的最大值为1864ms。超过这个值就会导致延时不准确。

相关推荐

  1. STM32 系统时钟初始化函数函数

    2024-07-10 09:32:03       29 阅读
  2. STM32系统滴答定时器SysTick实现精确msus

    2024-07-10 09:32:03       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 09:32:03       99 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 09:32:03       107 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 09:32:03       90 阅读
  4. Python语言-面向对象

    2024-07-10 09:32:03       98 阅读

热门阅读

  1. Oracle数据库服务器CPU占用率巨高的问题排查思路

    2024-07-10 09:32:03       34 阅读
  2. WebKit简介及工作流程

    2024-07-10 09:32:03       29 阅读
  3. nlp中tokenizer用法

    2024-07-10 09:32:03       28 阅读
  4. 2.Date类型的请求参数

    2024-07-10 09:32:03       29 阅读
  5. 基于antdesign封装一个react的上传组件

    2024-07-10 09:32:03       35 阅读
  6. Leetcode100.判断两颗二叉树是否相同

    2024-07-10 09:32:03       27 阅读
  7. 防止应用调试分析IP被扫描加固实战教程

    2024-07-10 09:32:03       32 阅读