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");//´òÓ¡Òý½Å״̬ } }