程序如下:
int main(void)
{
CLK_DeInit(); //--> 时钟各变量初始化
CLK_HSECmd(ENABLE); //--> 外部高速晶振使能
while(SET != CLK_GetFlagStatus(CLK_FLAG_HSERDY)); //--> 测试外部高速晶振位是不是使能
CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1); //--> 外部时钟预分频器,1分频
CLK_ClockSwitchCmd(ENABLE); //--> 使能时钟切换功能
CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO,CLK_SOURCE_HSE,DISABLE,CLK_CURRENTCLOCKSTATE_DISABLE);
//--> 时钟切换 ( 自动切换模式 , 切换到外部高速晶振 , 禁止切换中断 ,内部时钟禁止 )
USART_Configuration();//串口配置
enableInterrupts();//允许中断
while (1)
{
delay(100);
}
}
//串口接收中断
#pragma vector=0x17
__interrupt void UART2_RX_IRQHandler(void)
{
if(UART2_GetFlagStatus(UART2_FLAG_RXNE)!=RESET){
UART_Send( "REC OK2\n\r", 8);
}
UART2_ClearITPendingBit(UART2_IT_RXNE);//清除接收标志位
return;
}
运行后,电脑往STM8S105发送命令后,串口接收中断能正常反应,并发回响应字符。但是只能反应一次。接下来就没反应了。加了断点观察发现,程序还一直在串口接收中断里面运行。但因为RXNE被清零了,所以虽然没有内容发出,实际上还是在中断里面运行。请问这是什么原因?如果不加UART2_ClearITPendingBit(UART2_IT_RXNE);这一句的话,就一直不断发送字符串。
|