zoukankan      html  css  js  c++  java
  • EFM32之定时器

    设置系统时钟:

    CMU_ClockSelectSet(cmuClock_HF,cmuSelect_HFXO);//32MHz

    NVIC配置:
    EFM32的库函数没有关于NVIC配置的库函数,所以我将stm32lxx中的相关库函数移植了进来,因为都是m3内核,NVIC的配置是一样的,只需要少量的修改即可。
    配置时要注意一下几点。
    1.stm32的flash起始地址是0x08000000,EFM32的flash起始地址是0x00000000。RAM地址一致。
    2.stm32的使能和失能是用枚举类型(ENABLE,DISABLE),EFM32使用的是stdbool.h头文件

    void NVIC_Config(void)
    {
        NVIC_InitTypeDef NVIC_InitStructure;
    #ifdef VECT_TAB_RAM
        NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);
    #else
        NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);
    #endif
        NVIC_PriorityGropConfig(NVIC_PriorityGrop_1);//先占优先级1位,从优先级3位
       NVIC_InitStructure.NVIC_IRQChannel = TIMER0_IRQn;//定时器0中断
       NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//先占优先级
       NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;//从优先级
       NVIC_InitStructure.NVIC_IRQChannelCmd = true;
        NVIC_Init(&NVIC_InitStructure);
    }

    定时器0初始化:

    void Timer_Config(void)
    {
        CMU->HFPERCLKEN0 |= (1<<4);
        TIMER0->CTRL |= (5<<24);//32分频  32/32 = 1M
        TIMER0->CTRL &= ~(3<<6);//timer0的时钟选择为外设高速时钟
        TIMER0->CTRL |= (1<<0);//计数模式为向下
    
        TIMER0->IEN |= (1<<1);//向下计数溢出中断使能
    
        TIMER0->TOP = 999;//计数1000次刚好是1ms
    
        TIMER0->CMD = 0x01;//开启定时器0
    }

    定时器0中断服务函数:

    void TIMER0_IRQHandler(void)
    {
        if(TIMER0->IF & 0x02)
        {
            TIMER0->IFC |= (1<<1);//清中断
        }
    }
  • 相关阅读:
    bzoj5328: [Sdoi2018]物理实验
    HDU
    bzoj4820: [Sdoi2017]硬币游戏
    bzoj4600: [Sdoi2016]硬币游戏
    阿里云配置防火墙规则
    博客园 添加 Live 2D 模型
    R语言做逻辑回归
    R语言错误的提示(中英文翻译)
    用随机森林分类
    python 切换虚拟环境
  • 原文地址:https://www.cnblogs.com/zpehome/p/2983946.html
Copyright © 2011-2022 走看看