已經(jīng)解決,需要添加聲明:?void USART1_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));?
各位前輩,現(xiàn)在調(diào)試CH32V307VCT6 串口驅(qū)動回環(huán)測試.
用串口中斷RX接收后TX返回數(shù)據(jù),發(fā)現(xiàn)RX進入中斷接收第一個字符后就停止接收,芯片復(fù)位后還是只能接收RX第一個字符.
串口1和串口2一樣現(xiàn)象,開IDLE也沒有區(qū)別.試過EVT的中斷范例也是一樣只接收第一個字符,嘗試用其他的clear函數(shù)沒作用.
現(xiàn)將測試代碼貼上麻煩幫看下,謝謝!
void USART1_Configuration(void)
{
? ? ? ? NVIC_InitTypeDef NVIC_InitStructure;
? ? ? ? GPIO_InitTypeDef GPIO_InitStructure;
? ? ? ? USART_InitTypeDef USART_InitStructure;
? ? ? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
? ? ? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,? ENABLE);
? ? ? ? //USART1_TX? ?GPIOA.9
? ? ? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
? ? ? ? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
? ? ? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
? ? ? ? GPIO_Init(GPIOA, &GPIO_InitStructure);
? ? ? ? //USART1_RX? ?GPIOA.10初始化
? ? ? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
? ? ? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
? ? ? ? GPIO_Init(GPIOA, &GPIO_InitStructure);
? ? ? ? ?// 配置波特率
? ? ? ? USART_InitStructure.USART_BaudRate = 115200;
? ? ? ? // 配置 針數(shù)據(jù)字長
? ? ? ? USART_InitStructure.USART_WordLength = USART_WordLength_8b;
? ? ? ? // 配置停止位
? ? ? ? USART_InitStructure.USART_StopBits = USART_StopBits_1;
? ? ? ? // 配置校驗位
? ? ? ? USART_InitStructure.USART_Parity = USART_Parity_No ;
? ? ? ? // 配置硬件流控制
? ? ? ? USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
? ? ? ? // 配置工作模式,
? ? ? ? USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
? ? ? ?// 完成串口的初始化配置
? ? ? ? USART_Init(USART1, &USART_InitStructure);
? ? ? ? // 使能串口接收中斷
? ? ? ? USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
? ? ? ? //USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);
? ? ? ? USART_Cmd(USART1, ENABLE);
? ? ? ? // 清除發(fā)送完成標志
? ? ? ? NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
? ? ? ? NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0X06;
? ? ? ? NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0X00;
? ? ? ? NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
? ? ? ? NVIC_Init(&NVIC_InitStructure);
}
void USART1_IRQHandler(void)
{
? ? if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
? ? {
? ? ? ? Res = USART_ReceiveData(USART1);
? ? ? ? USART_ClearITPendingBit(USART1, USART_IT_RXNE);
? ? ? ? USART_SendData(USART1, Res);
? ? }
}
以下是串口助手接收數(shù)據(jù)狀態(tài);
[10:41:12.615]收←◆SystemClk:144000000
USBHS HOST MTP Test
這是一個串口中斷接收回顯實驗
[10:41:15.950]發(fā)→◇3333□
[10:41:15.953]收←◆3
[10:41:17.397]發(fā)→◇3333□
[10:43:06.322]收←◆SystemClk:144000000
USBHS HOST MTP Test
這是一個串口中斷接收回顯實驗
[10:43:09.605]發(fā)→◇3333□
[10:43:09.607]收←◆3
[10:43:10.293]發(fā)→◇3333□
[10:43:10.932]發(fā)→◇3333□
[10:43:11.517]發(fā)→◇3333□
[10:51:16.159]收←◆SystemClk:144000000
USBHS HOST MTP Test
這是一個串口中斷接收回顯實驗
[10:51:22.365]發(fā)→◇123456789□
[10:51:22.367]收←◆1
[10:51:28.973]發(fā)→◇987654321□
[10:51:36.581]發(fā)→◇234567890□
[10:51:45.869]發(fā)→◇3456789012□