**基于RA2E1 48PIN的瑞萨板子实现,虽然这里没有用到试用板子RA4M2,但实现原理在RA4M2上也是一样实现,区别只是修改下引脚的定义。其实也没必要用到freeRTOS,这里之所以用到它是因为想借此机会涉猎一下freeRTOS。
这篇文章不是一个教程,实现过程代码很基础,不要介意
HC-25是一个物联网WIFI串口通讯模块,详细信息可自行tb搜索。按照官方配置MQTT上云的流程后,配置指令给模块连接WiFi,配置过程省略,需要的评论区可以提。
创建工程时,添加RTOS
按需求配,这里随便配的。
均配置成output mode initial low
** cs --- p409 ** **
dc --- p302
rst ----p201
sda ----p206
sck --- p208
vdd ----vdd
**gnd ---- gnd
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);
}
}
#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,需要的话可以把仓库连接分享出来。
由于内容比较杂,,仅仅是一次使用经验的分享,
更多回帖