熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2021-10-25 10:00
正文摘要:主程序 time,time2,time3由TIM1定時(shí)器提供時(shí)鐘,Sys提供延時(shí)函數(shù),TIM3提供PWM(兩路) void EXTI4_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line4)!=RESET)//不等 ... |
在中斷里延時(shí),,真有你的哦 |
yzwzfyz 發(fā)表于 2021-10-25 16:10 他在中斷處理函數(shù)里面放了while |
在中斷處理函數(shù)里面放while(),你不死機(jī)天理難容啊。人家中斷處理函數(shù)要么打個(gè)標(biāo)記,要么幾十微秒內(nèi)退出,畢竟中斷要輪詢(xún),要嵌套。你直接while住,函數(shù)怎么跑。 |
51hei截圖20211026084256.png (40.79 KB, 下載次數(shù): 60)
如果你說(shuō)的是真實(shí)的,則外中斷后,跳入中斷服務(wù)程序執(zhí)行,外中斷服務(wù)程序在下列情況下會(huì)死機(jī): 1、沒(méi)有寫(xiě)外中斷服務(wù)程序,即中斷后,程序就【飛】了。 2、有死等的條件語(yǔ)句,因條件不成立,死等出不來(lái)。 3、修改的主程序的重要參數(shù),造成主程序發(fā)生未預(yù)期的結(jié)果。例如,主程序在等某一事件的結(jié)果,突然被外中斷打斷,中斷服務(wù)程序又將這個(gè)事件清除了,造成中斷返回后,主程序等不到事件的結(jié)果。 |
EXTI4_IRQHandler里面Delay_ms(10)是用systick中斷實(shí)現(xiàn)的吧???systick中斷優(yōu)先級(jí)低于exti4,所以執(zhí)行到這一句永遠(yuǎn)無(wú)法進(jìn)一步執(zhí)行下去了。 千萬(wàn)不要在中斷處理函數(shù)里面用delay,這是個(gè)基本原則問(wèn)題。 |
下面是主程序 while(1) { if ( time >= 300 ) /* 10 * 1 ms = 10ms ʱ¼äµ½ */ { d=Get_Max31855(); TM1=d; if(TM1>=92.5) { TM2=TM1+(TM1-92.3)*0.026;//²ÉÑù¾«¶È²¹³¥ }else { TM2=TM1; } time = 0; } if ( time2 >= 1000 ) /* 1000 * 1 ms = 1s ʱ¼äµ½ */ { pid.Pv=TM2;//µ±Ç°ÎÂ¶È PID_Calc(); //pid¼ÆËã Mode();//ʱ¿Ì²ì¾õÉèÖÃζȵı仯 time2 = 0; } if ( time3 >= 200 ) /* 10 * 1 ms = 10ms ʱ¼äµ½ */ { time3 = 0; OLED_Temp(); } } |
Powered by 單片機(jī)教程網(wǎng)