这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » Renesas » 串口通信

共4条 1/1 1 跳转至

串口通信

助工
2012-09-15 03:05:40     打赏

异步串行通信,收发波特率都设置为9600














关键代码:
主程序中在循环中不停地发送数据
void main(void)
{
    /* Start user code. Do not edit comment generated here */
  
    char str[6],a[50];
    R_UART0_Start();
  
    R_UART0_Send("abcdn",5);
  
    while (1U)
    {
       R_UART0_Send("----never give up----\r\n",24);
       delay(5000);
     ;
    }
    /* End user code. Do not edit comment generated here */
}

在r_cg_serial_user.c中,特别注意中断函数里回调函数
__interrupt static void r_uart0_interrupt_send(void)
{
    if (g_uart0_tx_count > 0U)
    {
        TXD0 = *gp_uart0_tx_address;
        gp_uart0_tx_address++;
        g_uart0_tx_count--;
    }
    else
    {
        SMR00 &= ~_0001_SAU_BUFFER_EMPTY;

        if ((SSR00 & _0040_SAU_UNDER_EXECUTE) == 0U)
        {
            r_uart0_callback_sendend();
        }
    }
}

回调函数
static void r_uart0_callback_sendend(void)
{
    /* Start user code. Do not edit comment generated here */
  
    R_UART0_Send(gp_uart0_tx_address, g_uart0_tx_count);
    /* End user code. Do not edit comment generated here */
}





顺便说下个人困惑,纠结于瑞萨的单片机异步串口通信好些日子,遗憾的是至今仍然没有醍醐灌顶的感觉,不理解自动生成代码里的TXD0,不是一个输出引脚吗,怎么向下面这么用 TXD0=*gp_uart0_tx_address;还有连续连行代码输出时
 R_UART0_Send("abcdn",5);
R_UART0_Send("----never give up----\r\n",24);第一行在串口上老是没有显示,期望高人指点




关键词: 串口     通信     uart0    

高工
2012-09-15 16:16:47     打赏
2楼
把所有进程贴子放在一起不更好?

院士
2012-09-15 23:08:31     打赏
3楼
楼主
在第一行语句,即 R_UART0_Send("abcdn",5); 在发送串口时,您的第二句,即R_UART0_Send("----never give up----\r\n",24);
就开始执行,此时发送缓冲还未清空,因此,收不到那一串计划出现的字符串。
楼主可以尝试将while循环内的语句进行倒置,即
    {
      delay(5000);
R_UART0_Send("----never give up----\r\n",24);
      
     ;
    }

试试 能不能收到想要效果。

具体原理,楼主思考一下吧

菜鸟
2014-10-29 17:04:10     打赏
4楼
楼主,用下载器串口下载我也遇到了问题,求帮忙解决QQ970912215

共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]