查看: 4434|回复: 2

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

[复制链接]

3

主题

5

帖子

97

积分

中级工程师

Rank: 2

积分
97
发表于 2021-8-3 10:55:56 | 显示全部楼层 |阅读模式
如题,本人使用串口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函数,打印字符串等任何数据都没问题,但是用中断转发接收到的数据存在问题
这是串口调试助手收到的数据
[10:52:13.089]收←◆A
[10:52:13.537]发→◇A□
[10:52:13.541]收←◆A
[10:52:20.928]发→◇ABCD123□
[10:52:20.931]收←◆A?1
[10:52:28.208]发→◇1□
[10:52:28.212]收←◆1
[10:52:31.335]发→◇123□
[10:52:31.338]收←◆1
[10:52:39.011]发→◇你好□
[10:52:39.015]收←◆?


请问我哪里配置错了吗?



回复

使用道具 举报

155

主题

847

帖子

4701

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4701
发表于 2021-8-3 16:05:53 | 显示全部楼层
pc 端的 奇偶校验 设的对不对,还有pc端的串口与串口线是不是可靠。 你用的是老版本的ll库,如果有当时的例程的话,直接用例程。试。不加改动是不是正确
回复

使用道具 举报

3

主题

5

帖子

97

积分

中级工程师

Rank: 2

积分
97
 楼主| 发表于 2021-8-3 16:22:33 | 显示全部楼层
顾博文 发表于 2021-8-3 16:05
pc 端的 奇偶校验 设的对不对,还有pc端的串口与串口线是不是可靠。 你用的是老版本的ll库,如果有当时的例 ...

问题解决了,是奇偶校验的问题,我太蠢了哈哈,感谢感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表