求助 串口转发数据时有时无

2019-10-15 23:47发布

void USART2_IRQHandler(void)
{          
        if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)//接收到数据
        {         

                USART_SendData(USART1, USART_ReceiveData(USART2) );        //Debug 有时候会出现不输出数据的现象
               
                USART2_RX_BUF[USART2_REC_num] = USART_ReceiveData(USART2);  //接收字符存入 BUF
                USART2_REC_num ++;
                if( USART2_REC_num > USART2_MAX_REC_LEN )       
                        USART2_REC_num = 0;
        }                                                                                                                            
}   
非常简单的一个 串口2接收数据转发到 串口1.
问题就出在 USART_SendData(USART1, USART_ReceiveData(USART2) );        //Debug 有时候会出现不输出数据的现象
但最奇怪的是 buf 中却有数据,也就是说 串口2接收数据是正常的.但确没有转发出来.
求解, 有检查中断优先级 串口2的优先级高于串口1
串口1 只接收数据,通过串口调试助手查看. 10次 会有 1-2次能输出.

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
wuhuigps
1楼-- · 2019-10-16 03:15
感谢大家的热情帮助,问题解决了.不是程序问题,刚刚从测试部门借了个示波器查看发现 RX 引脚,发送数据前后都是低电平,只有数据发送的时候会是高.外接上拉电阻后问题解决.只是非常奇怪 为何会出现这样的现象.有待进一步深究,至于串口数据在芯片不同接口间转发,我个人觉得,只要波特率与中断控制的合理这不是问题的. 例如我的 串口 2将数据转发给串口1 串口2的中断优先级必须高于串口1,波特率 串口1的必须高与串口2.
电脑小白
2楼-- · 2019-10-16 03:38

看的我头晕……
中断嵌套……哥……你别这么玩好不……
没有见过你这样写的。
你可以把USART_SendData(USART1, USART_ReceiveData(USART2_RX_BUF[x]) );   ---这个处理放到main的while里去。
在main的whlie里检查 当uart2空闲的时候再在用串口1发送。
footprint
3楼-- · 2019-10-16 05:28
 精彩回答 2  元偷偷看……
wuhuigps
4楼-- · 2019-10-16 10:18
电脑小白 发表于 2016-11-4 20:21
看的我头晕……
中断嵌套……哥……你别这么 ...

BUF 中数据是在 main的while 处理,我的问题不是说 BUF中收不到数据,而是 转发串口1 有时无法发送.buf 中始终能正确接收所有数据.
wuhuigps
5楼-- · 2019-10-16 15:59
footprint 发表于 2016-11-5 12:52
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET);
你有没有等待串口去发送这些数据?

加上  传输完成标准判断也是一样的, 问题依旧. 刚刚有把程序放到战舰上测试是正常的. 我设备的芯片型号是STM32F101RB,难道是芯片问题. 希望有那个兄弟能指正一下.
憨厚诚实大叔
6楼-- · 2019-10-16 16:37
楼主很主要的一个问题,在中断里面做一些鸟事情,不出问题才怪呢

一周热门 更多>