USART _ 两串口同时使用,冲突问题

本文探讨了在使用串口通信时遇到的一个问题:当在串口2的接收中断函数中调用串口1的发送函数时,串口2DMA发送的数据无法被正确接收。文章详细记录了问题现象,并通过实验对比,发现在任务中调用串口1发送函数时,两串口数据均可正常接收。问题的焦点在于中断函数中调用串口发送的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、使用外设情况:

              1、初始化了两个串口 :串口1以及串口2,使用串口2DMA发送数据,接收中断 接收数据;

                                                          使用串口1发送函数发送数据,接收中断接收数据;

2、问题出现的形式: 

                                         在串口2的中断接收函数中,使用串口1发送函数发送数据;

                                        串口1发送的数据能在串口接收到,但是在任务中,使用串口2DMA发送的数据在串口2上接收不到;

3、解决方法探索 :

                                  第一步探索: 把串口1发送函数放在任务中,两个串口上的数据都接收的到;             

                                                            一旦把串口1发送函数放在 串口2接收中断函数中,串口2DMA发送数据就收不到。     

   

                              第二步探索: 把串口1发送函数放在任务中,两个串口上的数据都接收的到;             

                                                            一旦把串口1发送函数放在 串口2接收中断函数中,串口2DMA发送数据就收不到。     

                                  

void Uart3_Init(u32 bound){ //GPIO端设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; // NVIC_InitTypeDef NVIC_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); //使能GPIOA时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);//使能USART1时钟 //串口1对应引脚复用映射 GPIO_PinAFConfig(GPIOB,GPIO_PinSource10,GPIO_AF_USART3); //GPIOA9复用为USART1 GPIO_PinAFConfig(GPIOB,GPIO_PinSource11,GPIO_AF_USART3); //GPIOA10复用为USART1 //USART1端配置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11; //GPIOA9与GPIOA10 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉 GPIO_Init(GPIOB,&GPIO_InitStructure); //初始化PA9,PA10 //USART1 初始化设置 USART_InitStructure.USART_BaudRate = bound;//波特率设置 USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式 USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位 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(USART3, &USART_InitStructure); //初始化串口1 USART_Cmd(USART3, ENABLE); //使能串口1 USART_ClearFlag(USART3, USART_FLAG_TC);这段代码有问题
03-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值