芯查查logo
  • 物料选型
  • 数据服务
    1. 新产品
    2. 查替代
    3. 丝印反查
    4. 查品牌
    5. PCN/PDN
    6. 查方案
    7. 查代理
    8. 数据合作
  • SaaS/方案
      SaaS产品
    1. 供应链波动监测预警
    2. 半导体产业链地图
    3. 智能BOM管家
    4. 解决方案
    5. 汽车电子
    6. 政府机构
    7. 数据API
  • 商城
  • 行业资讯
    1. 资讯
    2. 直播
  • 论坛社区
    1. 论坛
    2. 学习
    3. 测评中心
    4. 活动中心
    5. 积分商城
  • 查一下
RA4L1-SENSOR+06:串口的数据回传功能
原创 发布时间:前天 13:26
版块:
瑞萨电子
简介:串口的数据回传功能

一:调试串口的意义:

UART 只需两根信号线即可完成双向通信,对硬件要求低,使得很多模块都预留 UART 接口来实现与其他模块或者控制器进行数据传输,比如 GSM 模块,WIF模块、蓝牙模块等等。在硬件设计时,注意还需要一根“共地线”。

我们经常使用 UART 来实现控制器与电脑之间的数据传输。这使得我们调试程序非常方便,比如我们可以把一些变量的值、函数的返回值、寄存器标志位等等通过 UART 发送到串口调试助手这样我们可以非常清楚程序的运行状态,当我们正式发布程序时再把这些调试信息去除即可。我们不仅仅可以将数据发送到串口调试助手,我们还可以在串口调试助手发送数据给控制器,控制器程序根据接收到的数据进行下一步工作。

首先,我们来编写一个程序实现开发板与电脑通信,在开发板上电时通过 UART 发送一串字符串给电脑,然后开发板进入中断接收等待状态,如果电脑有发送数据过来,开发板就会产生中断我们在中断服务函数接收数据,并马上把数据返回发送给电脑。

二:硬件连接:

参考上个帖子,依然是使用串口9,进行调试。

三:瑞萨RA4L1串口的标志位:

typedef enum e_sf_event
{
    UART_EVENT_RX_COMPLETE   = (1UL << 0), ///< Receive complete event
    UART_EVENT_TX_COMPLETE   = (1UL << 1), ///< Transmit complete event
    UART_EVENT_RX_CHAR       = (1UL << 2), ///< Character received
    UART_EVENT_ERR_PARITY    = (1UL << 3), ///< Parity error event
    UART_EVENT_ERR_FRAMING   = (1UL << 4), ///< Mode fault error event
    UART_EVENT_ERR_OVERFLOW  = (1UL << 5), ///< FIFO Overflow error event
    UART_EVENT_BREAK_DETECT  = (1UL << 6), ///< Break detect error event
    UART_EVENT_TX_DATA_EMPTY = (1UL << 7), ///< Last byte is transmitting, ready for more data
} uart_event_t;

这里我是用的标志是

UART_EVENT_RX_CHAR

在串口回调函数中,添加如下代码:

void g_uart9_callback(uart_callback_args_t *p_args)
{
    switch (p_args->event)
    {
        case UART_EVENT_TX_COMPLETE:
             g_data_transmit_flag = true;
        break;
/*        case UART_EVENT_RX_COMPLETE:
            g_data_received_flag = true;*/
        case UART_EVENT_RX_CHAR:
        g_data_received_flag = true;
            R_SCI_UART_Write(&g_uart9_ctrl,(uint8_t *)&(p_args->data),1);
        break;

    default:
    break;
    }
}

当然瑞萨的官方,也提供串口接收完成的中断标位位:

case UART_EVENT_RX_COMPLETE:

这里的需要定义每次接收的字节个数,比如说:10个字节;当串口接收10个字节才会触发接收完成中断。

可以使用该函数:

fsp_err_t R_SCI_UART_Read(uart_ctrl_t * const p_api_ctrl, uint8_t * const p_dest, uint32_t const bytes); 

触发接收完成中断后,使用读取函数将串口接收寄存器中读取指定的字节到接收buffer里面,进行处理,当处理完成后,清空就可以。

使用该函数的缺点就是,需要用户明确知道一帧数据的具体个数。

四:验证如下所示:

不过现在有个问题就是,调试串口的功能发现,瑞萨的串口没有串口的空闲中断功能,如果说在调试的时候,在接收不定长的数据时候,在接收端需要知道每次发送的字节长度,这样对于调试人员来说还是比较麻烦的。等等研究一下其他的方法,实现数据的不定长接收与回传功能。

开源社区
前天 13:26
  • 举报
😁😂😃😄😅😆😉😊😋😌😍😏😒😓😔😖😘😚😜😝😞😠😡😢😣😤😥😨😩😪😫😭😰😱😲😳😵😷😸😹😺😻😼😽😾😿🙀🙅🙆🙇🙈🙉🙊🙋🙌🙍🙎🙏✂✅✈✉✊✋✌✏✒✔✖✨✳✴❄❇❌❎❓❔❕❗❤➕➖➗➡➰🚀🚃🚄🚅🚇🚉🚌🚏🚑🚒🚓🚕🚗🚙🚚🚢🚤🚥🚧🚨🚩🚪🚫🚬🚭🚲🚶🚹🚺🚻🚼🚽🚾🛀Ⓜ🅰🅱🅾🅿🆎🆑🆒🆓🆔🆕
@好友

全部评论

加载中
游客登录通知
已选择 0 人
自定义圈子
移动
发布帖子
发布动态
发布问答
发布者
聪聪哥哥
最新帖子
高压电机直接启动的危害及解决方案:软启动柜选型与应用指南RA4L1-SENSOR+07:调试串口的不定长数据回传功能RA4L1-SENSOR+06:串口的数据回传功能RA4L1-SENSOR+05:调试串口输出功能线性和半线性方案,解决小功率交流转5V的成本,性能,体积痛点
热门版块
查看更多
问型号
问技术
问行情
硬件资源下载区
汽车电子工程师论坛
工业电子专区
新手入门指南
专家问答
单片机/MCU论坛
PCB设计

2

收藏

分享

微信扫码
分享给好友

评论