这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » Renesas » 【瑞萨RA4M2v2.0开发板马年限定】使用串口接收中断实现环境监测功能

共1条 1/1 1 跳转至

【瑞萨RA4M2v2.0开发板马年限定】使用串口接收中断实现环境监测功能

高工
2026-05-20 08:52:09     打赏

一:瑞萨的串口中断

    串口的中断:顾名思义,就是当串接收到数据时,触发控制状态,从而产生中断;RA4M2在数据交互时,传输字节之间的间隔很短,然后再一个字节的通讯时间内,没有收到数据时,意味着程序进入了中断,所以在程序的初始化后,我们只需要开启中断后,在定时器中做一个数据的超时判断,等待一段时间后,没有数据接收到就意味着一帧数据接收完成了。然后再进行数据处理。

二:FSP库配置

08-1 串口2中断配置.png

三:PM5003T颗粒物传感器产品介绍

3.1 模块资料分享:

PMS5003T 是一款可以同时监测空气中颗粒物浓度及温湿度的二合一传感器。其中颗粒物浓度的监测基于激光散射原理,可连续采集并计算单位体积内空气中不 同粒径的悬浮颗粒物个数,即颗粒物浓度分布,进而换算成为质量浓度。传感器同时内嵌瑞士生产的温湿度一体检测芯片。颗粒物浓度数值及温度、湿度合并以通用数字接口形式输出。本传感器可嵌入各种与空气质量监测和改善相关的仪器设备,为其提供及时准确的环境参数。

工作原理:

本传感器采用激光散射原理。即令激光照射在空气中的悬浮颗粒物上产生散射, 同时在某一特定角度收集散射光,得到散射光强随时间变化的曲线。进而微处理 器利用基于米氏(MIE)理论的算法,得出颗粒物的等效粒径及单位体积内不同 粒径的颗粒物数量。

3.2 硬件设计资料

08-2 模块资料分享.png

输出结果:

主要输出为单位体积内各浓度颗粒物质量以及个数,其中颗粒物个数的单位 体积为 0.1 升,质量浓度单位为:微克/立方米。

输出分为主动输出和被动输出两种状态。传感器上电后默认状态为主动输出, 即传感器主动向主机发送串行数据,时间间隔为 200~800ms,空气中颗粒物 浓度越高,时间间隔越短。主动输出又分为两种模式:平稳模式和快速模式。 在空气中颗粒物浓度变化较小时,传感器输出为平稳模式,即每三次输出同样的一组数值,实际数据更新周期约为 2s。当空气中颗粒物浓度变化较大时, 传感器输出自动切换为快速模式,每次输出都是新的数值,实际数据更新周 期为 200~800ms。

温湿度输出:输出吸入传感器内部的采样空气温度及湿度。

08-3 硬件设计资料.png

电路设计应注意:

PMS5003T 需要 5V 供电,这是因为风机需要 5V 驱动。但其他数据通讯和控 制管脚均需要 3.3V 作为高电平。因此与之连接通讯的主板 MCU 应为 3.3V 供 电。如果主板 MCU 为 5V 供电,则在通讯线(RXD、TXD)和控制线(SET、 RESET)上应当加入电平转换芯片或电路。

SET 和 RESET 内部有上拉电阻,如果不使用,则应悬空。

PIN7 和 PIN8 为程序内部调试用,应用电路中应使其悬空。

应用休眠功能时应注意:休眠时风扇停止工作,而风扇重新启动需要至少 30秒的稳定时间,因此为获得准确的数据,休眠唤醒后传感器工作时间不应低于 30秒。

四:软件代码:

4.1 串口2的初始化

void uart2_init(void)
{
    fsp_err_t err = FSP_SUCCESS;
    err = R_SCI_UART_Open(&g_uart2_ctrl, &g_uart2_cfg);    if (FSP_SUCCESS != err)
    {        while(1);
    }
}

4.2 串口接收中断处理函数

void g_uart2_callback(uart_callback_args_t *p_args)
{    switch (p_args->event)
    {        case UART_EVENT_RX_CHAR:
            g_data_received_flag1 = true;
            RxDbuffer[RxdCount] =(p_args->data);
            RxdCount++ ;
            R_SCI_UART_Write(&g_uart2_ctrl,(uint8_t*)&(p_args->data),1);
            OverCount = 5 ;        break;        case UART_EVENT_TX_COMPLETE:
            g_data_transmit_flag1 = true;        break;        default:        break;
    }
}

4.3 接收的数据处理函数

     if((RxDbuffer[0]== 0x42) &&(RxDbuffer[1]== 0x4D))
     {
         tempdata    =  ( RxDbuffer[24] << 8 ) + RxDbuffer[25] ;
         hunidata     =  ( RxDbuffer[26] << 8 ) + RxDbuffer[27] ;
         PM25data =  ( RxDbuffer[6] << 8 ) + RxDbuffer[7] ;
     }

4.4 OLED屏幕显示函数

void WorkPage(void)
{    char buffer[10] ;
    OLED_Clear();//清屏

    OLED_ShowString(16,0,"environment",16);

    OLED_ShowString(16,2,"huni",16);    sprintf((char*)buffer,"%3d",hunidata);
    OLED_ShowString(64,2,buffer,16);

    OLED_ShowString(16,4,"temp",16);    sprintf((char*)buffer,"%3d",tempdata);
    OLED_ShowString(64,4,buffer,16);

/*    OLED_ShowNum(16,0,hunidata,3,16);*/
    OLED_ShowString(16,6,"PM25",16);
    OLED_ShowNum(64,6,PM25data,3,16);
}

五:实物验证:

08-4 实物验证.png




关键词: RA4M2     环境监测     中断    

共1条 1/1 1 跳转至

回复

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