发 帖  
原厂入驻New
[问答]

单片机收发问题请教

2102 单片机 串口
分享
感觉是硬件问题了?请问怎么通过软件调整?
    功能描述:
        串口0接受的数据通过串口1发送出去。
    问题描述:
         可以实现发送,但是每次改变串口0接收的数据时,仍发送一次之前的数据,第二次发送才是正确的。
  望解答一下,谢谢。
代码如下:
/**UART0接受中断函数*/
void uart0_receive_callback(UART_Handle_T *hUART, uint8_t event, unsigned long param)
{
   if (event == UART_EVENT_RX_WATERMARK || event == UART_EVENT_RXFIFO_tiMEOUT)
   {
   
        uint32_t rcvCount = (uint32_t)param;
    while (rcvCount--)  
        {
            g_rxData0[g_rxSize0] = UART_GetChar(hUART->device);
            if(g_rxData0[g_rxSize0] == 0x0A)//这里是一旦收到换行,就停止接收
            {
                g_txSize0 = g_rxSize0;
                g_rxSize0 = 0;
                uart1_tx_enable = 1;//打开UART1发送标志位。
                break;
            }
            g_rxSize0++;
            if(g_rxSize0 >= UART_USERBUFFER_SIZE)
                g_rxSize0 = 0;
        }
    }
    else if (event == UART_EVENT_RX_OVER || event == UART_EVENT_RX_ERROR)
    {
        g_rxSize0 = 0;
        g_event0 = event;
    }
}
//uart1发送函数(处理uart0接受的数据)

void transfer() {
if(uart1_tx_enable)
{

//  UART_Transmit(&uart1Handle, &g_rxData0[0], g_txSize0 + 1 , TIMEOUT_WAIT_FOREVER);
    for(i = 0 ;i < g_txSize0 + 1 ; i++)
    {
//     printf("g_rxData0[%d]=%c  //****   ",i,g_rxData0);
     SysTick_DelayMS(20);
     UART_PutChar(UART1,g_rxData0);

    }
  memset(g_rxData0,0,sizeof(UART_USERBUFFER_SIZE));
  uart1_tx_enable = 0;
}
}

0
2020-12-15 09:05:37   评论 分享淘帖 邀请回答

相关问题

4个回答
不熟悉这个单片机,
UART_PutChar(UART1,g_rxData0);这里的g_rxData0应该要带后面的编号吧,比如g_rxData0【i】
2020-12-15 11:09:20 4 评论

举报

4 条评论
  • 2020-12-15 11:19

    粘贴的时候少了,语句没问题,正常收发也没问题。就是一旦改变uart0接收数据,uart1发送的还是改变之前的,再发送一次就正常了。

    人中狼 回复 喜上眉梢: 2020-12-15 13:07

    个人看法,这里需要看发送函数是如何调用的,另外看芯片情况,建议串口接收中断只接收当前字节数据,并判断数据包是否接收完

    喜上眉梢 回复 人中狼: 2020-12-15 14:28

    请问这个是什么意思呢?我现在写的也是只接收当前以换行作为结束符的一帧数据,然后发送。

    阿信509 回复 喜上眉梢: 2020-12-15 15:59

    串口都是每次只接收或者发送一个字符,让你这么做是为了高效

程序太复杂了,为啥不是收到一个数据马上就发送出去呢,还要等结束符
2020-12-15 11:18:59 1 评论

举报

1 条评论
  • 2020-12-15 14:27

    因为做的是一个类似扫描的东西,接收数据结束后作为一帧数据,然后发送出来。

路过学习,很实用,谢谢分享。
2020-12-29 14:29:13 评论

举报

路过学习,谢谢分享。
2020-12-30 12:40:02 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
关闭

站长推荐 上一条 /7 下一条

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