使用芯片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!。