急!关于CH32V103 串口USART1上电后接收中断只能进入一次的问题


如题:现在是 接收中断 能_且仅能_进入一次(PC单次发一个字节)。相关代码已经参考过例程。相关问题也已经度娘。

相关代码如下:

void USART_GPIO_Init()
{
  GPIO_InitTypeDef GPIO_InitStructure;
  NVIC_InitTypeDef  NVIC_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);

  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);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

void USART_Setup(uint32_t baudrate)
{
  USART_InitTypeDef USART_InitStructure;
  USART_InitStructure.USART_BaudRate = baudrate;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_2;
  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_Cmd(USART1, ENABLE);
}

/*******************************************************************************
* Function Name  : USART1_IRQHandler
* Description    : This function handles USART1 global interrupt request.
* Input          : None
* Return         : None
*******************************************************************************/
void USART1_IRQHandler(void)
{

  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
  {
      u8 t = USART_ReceiveData(USART1)&0x7F;
        if(t == 0x11)send_st = 1;
        else if(t == 0x13)send_st = 0;
  }

int main()
{
	UINT8 s, i;

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    Delay_Init();
    USART_GPIO_Init();
    USART_Setup(19200);
	printf("SystemClk:%d\r\n",SystemCoreClock);





你好,首先你那边可以检查一下程序中有没有进行串口1的中断声明,其次检查一下程序中是否和debug文件串口1相关函数产生冲突,最后可以依据我们EVT例程对比一下串口初始化及相关配置,因为不知是否是你附代码不完整,程序中并没有看到串口1中断声明,其次在串口中断程序中也没有看到相关清中断标志位操作。



只有登录才能回复,可以选择微信账号登录