串口打印
在上两篇基础上
https://mbb.eet-china.com/forum/topic/131707_1_1.html
https://mbb.eet-china.com/forum/topic/131708_1_1.html
1. 配置串口
1.1. 查原理图
1.2 查硬件手册
1.3 配置RASC上的串口
2. 代码
2.1 打开串口
C
err = R_SCI_UART_Open(&g_uart0_ctrl, &g_uart0_cfg);
assert(FSP_SUCCESS == err); |
2.2 接收和发送数据处理
C
#define RING_LEN (255)
char rx_buff[RING_LEN] = {0};
volatile int twrite = 0;
int tread = 0;
/**
* @brief 串口数据回调函数
*
* @param p_args
*/
void uart0_callback(uart_callback_args_t *p_args)
{
/* TODO: add your own code here */
if (p_args->event == UART_EVENT_RX_CHAR)
{
rx_buff[twrite] = (char)(p_args->data);
twrite++;
if (twrite >= RING_LEN)
twrite = 0;
}
}
/**
* @brief 从循环buf中获取一个字节
*
* @param ch 输出的字节
* @return int 0:未读到数据,1:读到数据
*/
static int cmd_get_char(char *ch)
{
if (tread != twrite)
{
*ch = rx_buff[tread];
tread++;
if(tread >= RING_LEN)
tread = 0;
return 1;
}
return 0;
}
#define CMD_LEN_MAX (1024)
char buff[CMD_LEN_MAX];
/**
* @brief 打印数据
*
* @param format 格式
* @param ...
*/
void myprintf(const void *format, ...)
{
int len = 0;
va_list list;
va_start(list, format);
len = vsnprintf(buff, CMD_LEN_MAX, format, list);
va_end(list);
if (len > 0)
{
R_SCI_UART_Write(&g_uart0_ctrl, (const uint8_t* const) buff, (uint32_t)len);
}
}
|
2.3 主循环中处理下
C
if (cmd_get_char(&cmd))
{
myprintf("cmd:%c\r\n",cmd);
} |