LZY 发表于 2021-8-3 10:55:56

【串口UART】UART0中断接收问题

如题,本人使用串口0调试其接收中断问题,将中断服务函数写为转发接收到的数据,现在遇到问题是接收8位收据没问题,接收更多的收据调试助手显示接收到的数据不对,下面是配置代码
void UART0_IRQHandler(void)
{
      uint8_t RecBuf;
//接收中断处理
//      if((ENABLE == LL_UART_IsEnbaledIT_ReceiveBuffFull(UART0))
//                &&(SET == LL_UART_IsActiveFlag_RXBF(UART0)))
      if(LL_UART_IsActiveFlag_RXBF(UART0)!=RESET)//接收缓存满中断标志
      {
               //Uart0_SendStr("进中断\r\n");
                RecBuf=LL_UART_ReceiveData(UART0);//接收中断标志可通过读取rxreg寄存器清除
                LL_UART_TransmitData(UART0, RecBuf);
      }

}

void Uart0_SendStr(char*SendBuf)//串口1打印数据
{
      while(*SendBuf)
      {
                while((UART0->ISR&0X02)==0);   //等待发送完成    SR状态寄存器 发送完成置1
                UART0->TXBUF = (uint8_t) *SendBuf;    //数据寄存器DR
                SendBuf++;
      }
}

void Uart0_Init(void)
{
      LL_GPIO_InitTypeDef GPIO_InitStruct;
      LL_UART_InitTypeDef UART_InitStruct;   
      //PA13:UART0-RX   PA14:UART0-TX
      GPIO_InitStruct.Pin = LL_GPIO_PIN_13|LL_GPIO_PIN_14;
      GPIO_InitStruct.Mode = LL_GPIO_MODE_DIGITAL;
      GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
      GPIO_InitStruct.Pull = DISABLE;
      GPIO_InitStruct.RemapPin = DISABLE;
      LL_GPIO_Init(GPIOA, &GPIO_InitStruct);

      UART_InitStruct.ClockSrc = LL_RCC_UART_OPERATION_CLOCK_SOURCE_APBCLK1;
      /*NVIC中断配置*/
      NVIC_DisableIRQ(UART0_IRQn);
      NVIC_SetPriority(UART0_IRQn,2);//中断优先级配置
      NVIC_EnableIRQ(UART0_IRQn);
      UART_InitStruct.BaudRate = 115200;                                                                //波特率
      UART_InitStruct.DataWidth = LL_UART_DATAWIDTH_8B;                              //数据位数
      UART_InitStruct.StopBits = LL_UART_STOPBITS_1;                                        //停止位
      UART_InitStruct.Parity = LL_UART_PARITY_EVEN;                                        //奇偶校验
      UART_InitStruct.TransferDirection = LL_UART_DIRECTION_TX_RX;      //接收-发送使能
      UART_InitStruct.InfraredModulation = DISABLE;                              
      LL_UART_Init(UART0, &UART_InitStruct);
      LL_UART_ClearFlag_RXBF(UART0);
      LL_UART_EnableIT_ReceiveBuffFull(UART0);
//      LL_UART_EnableIT_ShiftBuffEmpty(UART0);
//      WRITE_REG(UART0->IER, UART_IER_RXBFIE);
}


串口0现在本身用printf函数,打印字符串等任何数据都没问题,但是用中断转发接收到的数据存在问题
这是串口调试助手收到的数据
收←◆A
发→◇A□
收←◆A
发→◇ABCD123□
收←◆A?1
发→◇1□
收←◆1
发→◇123□
收←◆1
发→◇你好□
收←◆?


请问我哪里配置错了吗?



顾博文 发表于 2021-8-3 16:05:53

pc 端的 奇偶校验 设的对不对,还有pc端的串口与串口线是不是可靠。 你用的是老版本的ll库,如果有当时的例程的话,直接用例程。试。不加改动是不是正确

LZY 发表于 2021-8-3 16:22:33

顾博文 发表于 2021-8-3 16:05
pc 端的 奇偶校验 设的对不对,还有pc端的串口与串口线是不是可靠。 你用的是老版本的ll库,如果有当时的例 ...

问题解决了,是奇偶校验的问题,我太蠢了哈哈,感谢感谢:handshake
页: [1]
查看完整版本: 【串口UART】UART0中断接收问题