CH32V103 systick中斷只能進(jìn)一次,怎么破?

初始化

? ? SysTick->CNTL0 =0;

? ? SysTick->CNTL1 =0;

? ? SysTick->CNTL2 =0;

? ? SysTick->CNTL3 =0;

? ? SysTick->CNTH0 =0;

? ? SysTick->CNTH1 =0;

? ? SysTick->CNTH2 =0;

? ? SysTick->CNTH3 =0;


? ? i=FSYS/8/4;


? ? SysTick->CMPLR0 = (u8)(i & 0xFF);

? ? SysTick->CMPLR1 = (u8)(i >> 8);

? ? SysTick->CMPLR2 = (u8)(i >> 16);

? ? SysTick->CMPLR3 = (u8)(i >> 24);

? ? SysTick->CMPHR0 =0;

? ? SysTick->CMPHR1 =0;

? ? SysTick->CMPHR2 =0;

? ? SysTick->CMPHR3 =0;

? ? SysTick->CTLR=1;

? ?NVIC_EnableIRQ(SysTicK_IRQn);


中斷程序翻PB8閃燈:

? ? GPIOB->OUTDR^=1<<8;

? ? SysTick->CNTL0 =0;

? ? SysTick->CNTL1 =0;

? ? SysTick->CNTL2 =0;

? ? SysTick->CNTL3 =0;

? ? SysTick->CNTH0 =0;

? ? SysTick->CNTH1 =0;

? ? SysTick->CNTH2 =0;

? ? SysTick->CNTH3 =0;

單獨這樣跑沒有問題,

隨便增加USART1發(fā)送一字節(jié),就不閃了,CPU沒有死,讀systick值,CNT在增加,就是不進(jìn)中斷

? ? GPIOB->CFGHR=0x44444442;

? ? USART1->BRR=FSYS/115200;

? ? USART1->CTLR1=1<<13|3<<2;

? ? GPIOA->BSHR=1<<10; ? ? ? ? //IO置位

? ? GPIOA->CFGHR=0x44444894; ? //PA9 PA10 AFR

? ? Usart1SendByte(0x55); ? //查詢方式發(fā)送

這樣增加幾行就只能進(jìn)一次中斷,杠掉最后一行,閃燈恢復(fù)正常



void SysTick_Handler(void) __attribute__((interrupt("WCH-Interrupt-fast")));

void SysTick_Handler(void)

{

? ? GPIOB->OUTDR^=1<<8;

仿照官方程序,中斷這樣寫就對了,問題解決

管理員如果看到的話,說說道理


您好,關(guān)于中斷聲明函數(shù):void XXXX_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")))函數(shù),其用于保證中斷執(zhí)行完成之后程序正常運行。若不添加此函數(shù),中斷執(zhí)行完成之后,中斷執(zhí)行之前保存的信息將不會被返回,中斷會被認(rèn)為一個正常程序繼續(xù)執(zhí)行下去,但中斷之后并沒有程序,從而導(dǎo)致程序出現(xiàn)類似跑飛狀況。添加此函數(shù),中斷執(zhí)行完成之后,中斷執(zhí)行之前保存的信息將會被返回,從而程序可以繼續(xù)正常執(zhí)行,如圖所示。

105742fd6tdfftcd6ftflq.png.thumb.jpg


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频