欢迎光临东莞市飞江电子科技有限公司官网!
全国咨询热线

13926563901

18925580829

飞江淘宝店铺

首页>技术资料>ST单片机

STM8003F3定时器2精准延时范例

发布时间:2018-04-02   浏览量:

/*    添加包含芯片的头文件    */
#include


/*******************************************************************************
**函数名称:void LED3_Init()
**功能描述:LED3->功能引脚初始化
**入口参数:无
**输出:无
*******************************************************************************/
void LED3_Init()
{
  PC_DDR_bit.DDR6 = 1;    //设置端口PC->6的输入输出方向寄存器为输出方向
  PC_CR1_bit.C16 = 1;     //PC->6为推挽输出
  PC_CR2_bit.C26 = 1;     //PC->6是输出速度最快为10MHz
}

/*******************************************************************************
**函数名称:void TIM2_Init()
**功能描述:定时器2参数初始化
**入口参数:无
**输出:无
*******************************************************************************/
void TIM2_Init()
{
  TIM2_PSCR = 0x00;     //定时器2预分频数为 1 分频,即定时器时钟 = 系统时钟 = 16MHz
  TIM2_ARRH = 0x3E;     //设置1毫秒时间自动重载 16000 = 0x3e80
  TIM2_ARRL = 0x80;     //

  TIM2_CNTRH = 0x00;    //清除计数寄存器
  TIM2_CNTRL = 0x00;    //
  TIM2_SR1 = 0x00;      //清除所有的中断标志
 
}

/*******************************************************************************
**函数名称:void TIM2_DelayMs(unsigned int ms)
**功能描述:定时器2参进行精确延时,最小为1毫秒,最大65535
**入口参数:unsigned int ms     1=< ms <= 65535
**输出:无
*******************************************************************************/
void TIM2_DelayMs(unsigned int ms)
{
   
    TIM2_CR1 = 0x81;        //启动定时器2开始计数
    while(ms--)
    {
     
      while( !(TIM2_SR1 & 0x01)); //等待计数是否达到1毫秒
      TIM2_SR1 &= ~(0x01);  //计数完成1毫秒,清除相应的标志
    }
     TIM2_CR1 = 0x00;       //延时全部结束,关闭定时器2
}

/*    主函数    */
int main(void)
{
   CLK_CKDIVR = 0x00;     //CPUDIV = 1 HSIDIV = 1  内部时钟 = 16Mhz
   LED3_Init();           //调用LED3初始化函数
   TIM2_Init();           //调用定时器2初始化函数
   while(1)
   {
      PC_ODR ^= 0x40;     //异或取反PC->6 ,使LED3进行周期性亮灭亮灭操作
      TIM2_DelayMs(1000); //调用定时器2进行精确延时1000毫秒
   }
    
}

来源于:www.appmcu.com