瑞萨单片机william hill官网
直播中

jf_23522415

1年用户 65经验值
擅长:可编程逻辑 嵌入式技术
私信 关注
[经验]

【瑞萨RA4系列开发板体验】+ freeRTOS+串口中断+HC25+0.96显示屏实现阿里云下发命令控制板载LED灯

freeRTOS+串口中断+HC25+0.96显示屏实现阿里云下发命令控制板载LED灯

前言

**基于RA2E1 48PIN的瑞萨板子实现,虽然这里没有用到试用板子RA4M2,但实现原理在RA4M2上也是一样实现,区别只是修改下引脚的定义。其实也没必要用到freeRTOS,这里之所以用到它是因为想借此机会涉猎一下freeRTOS。

这篇文章不是一个教程,实现过程代码很基础,不要介意

实现功能

  • 通过阿里云、手机端给HC-25发指令,HC-25接收到指令后,发给板子,触发中断,在中断处处理切换LED灯的逻辑,0-led0 1-led1
  • 在触摸屏中实时显示下发指令内容

HC-25模块配置

HC-25是一个物联网WIFI串口通讯模块,详细信息可自行tb搜索。按照官方配置MQTT上云的流程后,配置指令给模块连接WiFi,配置过程省略,需要的评论区可以提。

0.96寸OLED显示屏

开始

e2studio工程配置

创建工程

创建工程时,添加RTOS

image-20221121164635580

配置stack界面
调整heap size

image-20221121164407977

按需求配,这里随便配的。

切换到stack界面
  • 添加Task
    总览
    • uart 1:用以从HC-25WiFi模块所在串口读取数据
      • image-20221121165416833
    • uart2:可以不用配置,我这里是通过该模块给板子供电
      • image-20221121165348963
    • led:led灯切换的任务
      • image-20221121165513836
    • oled:显示屏的任务
      • 显示屏有7pin,分配如下

        均配置成output mode initial low

        ** cs --- p409 ** **
        dc --- p302
        rst ----p201
        sda ----p206
        sck --- p208
        vdd ----vdd
        **gnd ---- gnd

    • 添加这些任务时均按默认配置配置,除了修改了task name和Symbol以及串口中断回调
代码片段
HC-25部分

LED定义

#define LED_1 \
        R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_03, BSP_IO_LEVEL_HIGH);\
        R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_04, BSP_IO_LEVEL_LOW);
​
#define LED_2 \
        R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_03, BSP_IO_LEVEL_LOW);\
        R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_04, BSP_IO_LEVEL_HIGH);
​
​
#define LED_ON \
        R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_03, BSP_IO_LEVEL_HIGH);\
        R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_04, BSP_IO_LEVEL_HIGH);
​
#define LED_OFF \
        R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_03, BSP_IO_LEVEL_LOW);\
        R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_04, BSP_IO_LEVEL_LOW);

HC-25模块所在串口处理逻辑

#include "hal_data.h"
#include "hc_25.h"
#include "led_run.h"
#include "oled.h"
#include "string.h"
​
volatile bool uart9_send_complete_flag = false;
u8 cmd; 
/**
 * uart-1 callback function
 void g_uart9_callback(uart_callback_args_t *p_args)
{
    memcpy(cmd, (uint8_t*)&(p_args->data), strlen(p_args->data));
    switch (p_args->event)
    {
        case UART_EVENT_RX_CHAR:
        {
            switch (p_args->data)
            {
                case '0':
                {
                    LED_1;
                    break;
                }
                case '1':
                {
                    LED_2;
                    break;
                }
                case '2':
                {
                    LED_ON;
                    break;
                }
                case '3':
                {
                    LED_OFF;
                    break;
                }
                default:
                    break;
            }
            break;
        }
        case UART_EVENT_TX_COMPLETE:
        {
            uart9_send_complete_flag = true;
            break;
        }
        default:
            break;
    }
}
​

HC-25串口任务入口定义

ains TaskHandle_t */
void hc_25_entry(void *pvParameters)
{
    FSP_PARAMETER_NOT_USED (pvParameters);
​
    fsp_err_t err;
    err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
    assert(FSP_SUCCESS==err);
​
​
    /* TODO: add your own code here */
    while (1)
    {
        vTaskDelay (500);
    }
}
​
OLED任务部分
#include "oled_task.h"
#include "oled.h"
/* OLED Task entry function */
/* pvParameters contains TaskHandle_t */
void oled_task_entry(void *pvParameters)
{
    FSP_PARAMETER_NOT_USED (pvParameters);
    u8 i;
    extern u8 cmd;
​
    R_IOPORT_Open(&g_ioport_ctrl, &g_bsp_pin_cfg);
​
    OLED_init();
    oled.showStart();
    delay(500);
    oled.clear();
    /* TODO: add your own code here */
    while (1)
    {
        oled.showString(0,0,"welcome!!");
        oled.showString(0,1, "task is running");
        oled.showString(0,2, &cmd);
        delay(500);
    }
}
​

有关这个0.96OLED显示部分的处理逻辑已封装好API,需要的话可以把仓库连接分享出来。

image-20221121171143833

成果展示

image-20221121172153242

image-20221121172239916

image-20221121172258264

image-20221121172512037

image-20221121172408544

总结

由于内容比较杂,,仅仅是一次使用经验的分享,

回帖(3)

jf_23522415

2022-11-21 17:42:09
受到警告
提示: 作者被禁止或删除 内容自动屏蔽
举报
附件: 您需要登录才可以下载或查看附件。没有帐号?注册

h1654155285.8644

2022-11-21 21:42:55
思路不错,值得学习。
举报

jf_23522415

2022-11-21 22:12:12
如果是在局域网内,实现起来就简单多了,直接使用wifi串口透传模块,让该模块做server或cliend,pc端或移动端链接局域网,做client或server,给板子发指令,以达到控制板子动作的目的;还有一种就是直接通过串口助手走串口给板子发命令,归根结底,最终到开发板端都是同样的处理方式。

现在的物联网产品应该大多是集成这几种方式用于控制设备或远程debug。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分