CH32V307 進(jìn)入串口空閑中斷+DMA后 不能退回主程序while循環(huán)

使用芯片CH32V307VCT6 裸系統(tǒng)

int main(void)

{

while(1)

? ? {

? ? if(G_usart1_Rsign == 1)

????? ? ? ?{

????? ? ? ? ? ?printf("test OK!\n");

????? ? ? ? ? ?G_usart1_Rsign = 0;

????? ? ? ?}

????}

}

void USART1_IRQHandler(void);

void USART1_IRQHandler(void)

{

int k, temp;

if(USART_GetITStatus(USART1,USART_IT_IDLE) == SET)

{

? ? temp = USART1->STATR;

? ? temp = USART1->DATAR; //清USART_IT_IDLE標(biāo)志

temp = usart_max - DMA_GetCurrDataCounter(DMA1_Channel5); //得到真正接收數(shù)據(jù)個數(shù)

for (k = 0; k < temp; k++)

{

usart1_rxbuf[k] =? usart1_rx[k];

usart1_rx[k] = 0;

}

????????????????printf("count=%d data=%s\n",temp,usart1_rxbuf);

DMA_Cmd(DMA1_Channel5,DISABLE); //關(guān)閉DMA

DMA1_Channel5->CNTR= usart_max;//重新設(shè)置接收數(shù)據(jù)個數(shù)

DMA_Cmd(DMA1_Channel5,ENABLE);? //開啟DMA

G_usart1_Rsign=1;

}

?}


以上程序,可以進(jìn)入一次空閑中斷,語句printf("count=%d data=%s\n",temp,usart1_rxbuf);正確執(zhí)行,主程序可以打印 test OK!? 但對以后的串口輸入沒有反應(yīng)。只能進(jìn)入一次串口空閑中斷。

修改函數(shù)聲明:

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

修改后:每次都可以進(jìn)入空閑中斷,語句printf("count=%d data=%s\n",temp,usart1_rxbuf);正確執(zhí)行。但main程序沒有打印?test OK!。


你好,可將完整代碼發(fā)我這邊測試下(yrl@wch.cn)


icon_rar.gifCH32V307VCT6.zip

1、使用的25M晶振

2、設(shè)置為:void USART1_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));

串口輸入GPS0\n

返回:count=5 data=GPS0

分析:串口空閑中斷每次成功,但沒有進(jìn)入main程序的while循環(huán)


設(shè)置為:void USART1_IRQHandler(void);

串口輸入GPS0\n

返回:count=5 data=GPS0

test OK!

;GPS PRN SIGN0

分析:串口空閑中斷只成功一次,進(jìn)入main程序的while循環(huán),調(diào)用USART_COM_DataReceiver()函數(shù)成功。



怎么樣?



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

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