异步串行通信,收发波特率都设置为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);第一行在串口上老是没有显示,期望高人指点