101-CH579M学习开发-基本外设-定时器

<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/LearnCH579M" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

说明

先看一下默认的优先级

 

 

 

什么是定时器?定时器具体是怎么到了时间进去中断的?

定时器里面是啥?就是个计数器.定时器的时钟,就是计数器的时钟.假设计数器的时钟是1Hz

假设设置了计数器计数到1的时候就进入中断,那么就是每隔1S进入中断了.

假设计数器的时钟是32MHz,我想每隔1ms进入一次中断,我应该设置计数值是多少呢???

计数器记一次是 1/32000000 秒    1/32000 毫秒  

需要多少个 1/32000 毫秒  才能到1ms呢?  1/(1/32000) = 32000

定时多少毫秒,设置初值可以写成     X*32000   X就是要定时的ms数

 

 

 

一次性解决战斗

 

 

int main()
{
    /*ÅäÖô®¿Ú1*/
    GPIOA_SetBits(GPIO_Pin_9);
    GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);     // RXD-ÅäÖÃÉÏÀ­ÊäÈë
    GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA);// TXD-ÅäÖÃÍÆÍìÊä³ö£¬×¢ÒâÏÈÈÃIO¿ÚÊä³ö¸ßµçƽ
    UART1_DefInit();
    
    /*ÅäÖö¨Ê±Æ÷0,¶¨Ê±Æ÷µÄʱÖÓÊÇFREQ_SYS*/
    TMR0_TimerInit( 10*(FREQ_SYS/1000) );   //¶¨Ê±10ms
    TMR0_ITCfg(ENABLE, TMR0_3_IT_CYC_END); //ʹÄܶ¨Ê±Æ÷ÖÜÆÚÖжÏ
    NVIC_SetPriority(TMR0_IRQn,18);//ÉèÖÃÖжÏÓÅÏȼ¶(Ò²¿ÉÒÔ²»ÉèÖÃ,ĬÈÏ3)
    NVIC_EnableIRQ( TMR0_IRQn );
    
    while(1)
    {
    }
}

/*TMR0ÖÜÆÚÖжÏ*/
void TMR0_IRQHandler( void )
{
    if( TMR0_GetITFlag( TMR0_3_IT_CYC_END ) )
    {
        TMR0_ClearITFlag( TMR0_3_IT_CYC_END );
        PRINT("1\r\n");//´òÓ¡Òý½Å״̬
    }
}

 

 

posted on 2021-07-19 11:41  广源时代  阅读(394)  评论(0编辑  收藏  举报

导航

支付宝 QQ群