STM32
直播中

贾虎世

7年用户 1671经验值
私信 关注
[问答]

求助,关于串口中断问题求解

串口中断问题  
int main (void)
{
  I2C_EE_Init();               
  /* 串口1初始化 */
  USART1_Config();
NVIC_Configuration();
while(1)
{   
            ADC_1();
            ADC_2();
            ADC_3();
                  ADC_11();
            ADC_12();        
        }

}
做了一个串口中断来判断数组,但是为什么中断完了之后,没有继续循环WHILE循环?
哪位高手告诉下!

void USART1_IRQHandler(void)//读取串口的数据
{
          u8  c;
        
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
        {         
           c=USART1->DR;
                 
        if(i<10)
        {
                  a[i]=USART_ReceiveData(USART1);
                    i++;
                }
                 if(i==9)
                 {
                        USART1_1();
                        USART1_2();
                        
                        i=0;
       }
          printf("%c",c);    //将接受到的数据直接返回打印
        
   }
        }


         


回帖(1)

张超

2024-5-15 16:50:04
您好!从您提供的代码片段来看,您正在使用一个微控制器(可能是STM32)进行串口通信。您的代码中包含了一些初始化函数,如I2C_EE_Init(I2C EEPROM初始化)、USART1_Config(串口1初始化)和NVIC_Configuration(中断配置)。在while循环中,您调用了三个ADC(模数转换器)函数。

关于串口中断问题,您没有提供具体的信息,但我可以给您一些建议来解决常见的串口中断问题:

1. 确保您的USART1_Config函数正确配置了串口的波特率、数据位、停止位和奇偶校验位等参数。

2. 在NVIC_Configuration函数中,确保您已经正确地配置了串口中断优先级和使能了串口中断。

3. 在您的代码中,您需要定义一个串口中断处理函数,例如:

```c
void USART1_IRQHandler(void)
{
    if (USART1->SR & USART_SR_RXNE) // 检查接收缓冲区非空标志
    {
        uint8_t data = USART1->DR; // 读取接收到的数据
        // 在这里处理接收到的数据
    }
}
```

4. 在您的主函数中,您需要在while循环中添加一个判断条件来检查是否有接收到的数据:

```c
while(1)
{
    if (USART1->SR & USART_SR_RXNE) // 检查接收缓冲区非空标志
    {
        uint8_t data = USART1->DR; // 读取接收到的数据
        // 在这里处理接收到的数据
    }

    ADC_1();
    ADC_2();
    ADC_3();
}
```

5. 如果您仍然遇到问题,请检查您的硬件连接,确保串口TX和RX引脚正确连接到外部设备。

6. 如果您使用的是STM32CubeMX工具,您可以使用它来自动生成初始化代码和中断处理函数。

希望这些建议能帮助您解决串口中断问题。如果您有更具体的问题,请提供更多详细信息,我会尽力帮助您。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分