stm32的串口中断问题

我要配置的是usart2的接收
配置了nvic后程序就不往下走了 一直不停的进入中断

void NVIC_Configuration(void)
{
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0); //初始化中断向量表
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}

void USART2_IRQHandler()
{
uint16_t abc=0;

if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART2, USART_IT_RXNE);
abc = USART_ReceiveData(USART2);
USART_SendData(USART2,abc);
}
}

迷惑了好久找不出来问题
反复调试发现USART_ITConfig(USART2, USART_IT_TXE, ENABLE);这一句
加入发送使能后就陷入进入中断的循环

1)中断函数是发送和接收公用的,你是否开启了发送中断函数,如果开启了会一直进入中断。
2)你接收的数据是否太多,或者一直都在接收过程,比如一次性就给本机发了1000个数据,你说会不会一直进中断?
3)将中断函数里的东西全删了,只留一个清中断标志位的函数试试。(中断函数里你发送数据是发给谁,如果自发自收自然会一直进中断)。追问

现在中断里只写了这么两句清空中断标志位,结果还是会不停进入清空标志位,不晓得是哪个中断触发的,NVIC_Configuration(),这个函数注释掉后在main里的发送没有问题

USART_ClearITPendingBit(USART2, USART_IT_TXE);
USART_ClearITPendingBit(USART2, USART_IT_RXNE);

追答

USART_ITConfig(USART2, USART_IT_TXE, ENABLE);这句就是我说的第一点

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答