MC20 OpenCPU开发记录

article/2025/9/13 4:02:21

MC20 OpenCPU开发笔记

OpenCPU软件体系结构

在这里插入图片描述

资源

32-bit ARM7EJ-STMRISC 260MHz

4MB flash

4MB RAM

串口

提供两个UART端口:MAIN UART、DEBUG UART。分别命名为UART1和UART2。

UART1是9-pin串行接口。UART2是3-wire接口,具有调试功能,可以用来调试核心系统。

GPIO

有21个I/O管脚可配置为通用I/O。

EINT

OpenCPU支持外部中断输入。有三个I/O引脚可配置为外部

中断输入。但是,EINT不能用于高频率中断检测,这

会导致模块工作不稳定

PWM

有一个I/O引脚可配置为脉宽调制。有32K和13M时钟源

可用。

ADC

有一个可为ADC配置的模拟输入引脚。

Power Key

在OpenCPU中,应用程序可以捕捉到电源键被按下或释放的行为。然后开发人员可以重新定义按下power键的行为。

开发环境

程序框架

proc_main_task函数是嵌入式应用程序的入口,就像C应用程序中的main()一样。

Ql-OS-GetMessage是嵌入式应用从任务的消息队列接收消息的重要系统功能。

MSG_ID_RIL_READY是RIL模块发送给主任务的系统消息。

MSG_ID_URC_INDICATION是一条系统消息,指示新的URC即将到来。

数据类型

TypeDescription
bool布尔变量(应为TRUE或FALSE)。
s88位有符号整数。
u88位无符号整数。
s1616位有符号整数。
u1616位无符号整数。
s3232位有符号整数。
u3232位无符号整数。
u6464位无符号整数。
float浮点变量。

系统配置

\SDK\custom\config目录下,开发者可以根据自己对堆内存的要求重新配置应用程序大小、任务添加和任务堆栈大小配置,以GPIO初始化状态。开发人员的所有配置文件都以前缀“custom_u”命名。

Config FileDescription
custom_feature_def.h启用OpenCPU功能。现在只包括RIL。一般不需要更改。
custom_gpio_cfg.hgpio初始化状态的配置
custom_heap_cfg.h堆内存大小配置
custom_task_cfg.h多任务配置
custom_sys_cfg.h其他系统配置,包括电源键、指定外部看门狗gpio管脚,并设置调试端口的工作模式

任务配置

OpenCPU支持多任务处理。开发人员只需要简单地按照下面的步骤在custom_task_cfg.h文件中添加一个记录就可以定义一个新任务。OpenCPU支持一个主任务和最多十个子任务。

如果任务中有文件操作,则栈大小必须设置为至少5KB。

开发人员应避免调用以下函数:Ql_Sleep()Ql_OS_takesimaphore()Ql_OS_TakeMutex()。这些函数将阻塞任务,从而使任务无法从消息队列中获取消息。如果消息队列已满,系统将意外地自动重新启动。

GPIO配置

OpenCPU中GPIO的配置,有两种方法可以初始化GPIO。一种是在custom_GPIO_cfg.h中配置GPIO列表初始化;另一种是在应用程序启动后调用与GPIO相关的api来初始化。但前者在时间序列上要早于后者。

定制配置

所有定制项都在custom_sys_cfg.c的TLV(type-Length-Value)中配置。开发者可以通过改变值来改变程序功能。

const ST_SystemConfig SystemCfg[] = {{SYS_CONFIG_APP_ENABLE_ID,      SYS_CONFIG_APPENABLE_DATA_SIZE,(void*)&appEnableCfg},{SYS_CONFIG_PWRKEY_DATA_ID,     SYS_CONFIG_PWRKEY_DATA_SIZE,   (void*)&pwrkeyCfg   },{SYS_CONFIG_WATCHDOG_DATA_ID,   SYS_CONFIG_WATCHDOG_DATA_SIZE, (void*)&wtdCfg      },{SYS_CONFIG_DEBUG_MODE_ID,      SYS_CONFIG_DEBUGMODE_DATA_SIZE,(void*)&debugPortCfg},{SYS_CONFIG_END, 0, NULL                                                           }
};
ItemTypeLengthDefault ValuePossible Value
App EnablingSYS_CONFIG_APP_ENABLE_ID4APP_ENABLEAPP_ENABLE APP_DISABLE
PWRKEY CfgSYS_CONFIG_PWRKEY_DATA_ID2TRUE TRUETRUE/FALSE
GPIO WTD CfgSYS_CONFIG_WATCHDOG_DATA_ID8PINNAME_GPIO0One value of Enum_PinName
Working Mode for Debug PortSYS_CONFIG_DEBUG_MODE_ID4BASIC_MODEBASIC_MODE ADVANCE_MODE

PowerKey配置

static const ST_PowerKeyCfg pwrkeyCfg = {TRUE,  // PWRKEY pin通电模块的工作模式。/* 在向PWRKEY引脚输入低电平时自动通电。设置为FALSE时,将触发Ql_PwrKey_Register注册的回调。应用程序必须	调用Ql_LockPower()来锁定电源,否则当PWRKEY引脚处于高电平时,模块将掉电。*/TRUE,  // 通过PWRKEY引脚关闭模块的工作模式。/* 在向PWRKEY引脚输入低电平时自动断电。设置为FALSE时,将触发Ql_PwrKey_Register注册的回调。应用程序会在	在关闭模块之前进行处理。 */
};

外部看门狗引脚

当采用外部看门狗监控应用程序时,模块必须在模块通电的整个期间为看门狗供电,包括启动、应用程序激活和升级的过程。

PeriodFeeding Host
BootingCore system
App RunningApp
Upgrading App by FOTACore system

因此,开发人员需指定哪个GPIO是为外部看门狗使用的。

static const ST_ExtWatchdogCfg wtdCfg = {PINNAME_PCM_OUT,  // Specify a pin which connects to the external watchdogPINNAME_END   // Specify another pin for watchdog if needed
};

调试端口工作模式

串行调试端口(UART2)可以作为公共串行端口(基本模式)或特殊调试端口(高级模式)工作,可以在应用程序期间调试某些问题。

static const ST_DebugPortCfg debugPortCfg = {BASIC_MODE      // Set the serial debug port (UART2) to a common serial port//ADVANCE_MODE   // Set the serial debug port (UART2) to a special debug port
};

API函数

时间API

OpenCPU提供与时间相关的API,包括设置本地时间、获取本地时间、将日历时间转换为秒或将秒转换为日历时间等。

时间结构定义如下:

typedef struct {s32 year; //Range: 2000~2127s32 month;s32 day;s32 hour; //In 24-hour time systems32 minute;s32 second;s32 timezone; //Range: -12~12
}ST_Time;
s32 Ql_SetLocalTime(ST_Time *datetime);
ST_Time *Ql_GetLocalTime(ST_Time * dateTime);
u64 Ql_Mktime(ST_Time *dateTime);

根据ST_Time结构体描述的时间返回UTC时间。

ST_Time *Ql_MKTime2CalendarTime(u64 seconds, ST_Time *pOutDateTime)

将UTC时间转换为本地时间;

定时器API

OpenCPU提供两种定时器。一个是”Common Timer“,一个是”Fast Timer“。OpenCPU系统允许在一个任务内同时运行最多10个Common Timer。Fast Timer仅提供一个。

电源管理API

电源管理包含与电源相关的操作,例如断电、电源键控制和低功耗启用/禁用。

  • 电源开关

    当PWRKEY引脚没有对地短路时,开发人员可以调用Ql_PowerDown函数关闭模块电源。当PWRKEY引脚对地短路时,此动作将重置模块。

  • 睡眠模式

    Ql_ SleepEnable可以启用模块睡眠模式。当模块空闲时进入睡眠模式,定时器超时、来电、短信、GPRS数据和中断事件可将模块从睡眠模式唤醒。

    Ql_sleepDisable函数可以在模块唤醒时禁用睡眠模式。

  • 断电

void Ql_PowerDown(u8 pwrDwnType);

​ pwrDwnType:1表示正常断电

  • 锁定电源
void Ql_LockPower(void);
  • Power Key回调函数注册
s32 Ql_PwrKey_Register(Callback_PowerKey_Ind callback_pwrKey);typedef void (*Callback_PowerKey_Ind)(s32 param1, s32 param2);
  • 睡眠模式
s32 Ql_SleepEnable(void);
s32 Ql_SleepDisable(void);

GNSS API

打开或关闭GNSS。

s32 RIL_GPS_Open(u8 op);

参数

op:[In]接通/断开GNSS的操作。0表示关闭GNSS,1表示打开GNSS。

s32 RIL_GPS_Read(u8 *item, u8 *rdBuff);

http://chatgpt.dhexx.cn/article/1qBPNCVj.shtml

相关文章

STM32+移远MC20模块采用MQTT协议登录OneNet上传GPS数据

一、环境介绍 MCU: STM32F103C8T6 GSM模块: 移远MC20 (MT2503D)(GSMGPS共存)功能很强大 开发软件: Keil5 MQTT协议采用OneNet的旧版协议,登录OneNet控制台创建应用时要选择旧版本。 如果想使用新版本的标准MQTT协议连接OnetNet请参考这…

OpenCV-最大极值稳定区域MSER分析

最大稳定极值区域MSER是一种类似分水岭图像的分割与匹配算法,它具有仿射不变性。极值区域反映的就是集合中的像素灰度值总大于或小于其邻域区域像素的灰度值。对于最大稳定区域,通过局部阈值集操作,区域内的像素数量变化是最小的。 MSER的基…

【转载】项目实战—文档区域MSER检测实战(十)

上次已经讨论过相关的理论,这次我们来进行相关的实战。 OCR相关工作都有一个第一步,那就是检测图像中的文本区域,只有找到了文本区域,才能对其内容进行识别,也只有找到了文本区域,才能更有针对性地判断该文…

opencv 中将 MSER 修改成 Hierarchical MSER 方法

http://code.opencv.org/issues/1577 描述 I attach a patch implementing the Hierarchical MSER. It extends the OpenCV MSER implementation to return the underlying component tree used by the MSER algorithm. The tree is returned in the CvSeq tree fields (h_next…

OpenCV实践之MSER/MSCR极值区域检测算法

MSER/MSCR极值区域检测算法 OpenCV中features2d.hpp中MSER类接口实现了MSER极值区域检测算法,MSER类根据输入参数判断是否为彩色or灰度图像进行不同的算法检测。若输入为灰度图像,那么采取MSER极值区域检测算法,若输入为彩色图像,…

MSER仿射不变特征匹配算法

MSER原理简述 个人博客 OpenCV实践之MSER仿射匹配算法 已更新讲述MSER仿射匹配算法代码      区域检测(Region Detection)方法是根据图像中具有某种同类性质的像元进行分类(例如相同像素值大小的点),然后把具有相同性质的像元合并成区域,实现区域的检测即图像分割。MSER…

OpenCV用MSER 算法提取特征区域

计算图像 MSER 的基础类是 cv::MSER&#xff0c;继承自 cv::Feature2D 类&#xff0c;cv::MSER 类的实例可以通过create 方法创建。我们在初始化时指定被检测区域的最小和最大尺寸&#xff0c;以便限制被检测特征的数量&#xff0c;调用方式如下&#xff1a; cv::Ptr<cv::M…

车牌定位之MSER — 文本检测

最大稳定极值区域&#xff08;MSER-Maximally Stable Extremal Regions&#xff09;可以用于图像的斑点区域检测。它是基于分水岭的概念。 SIFT和SURF算法高效实现了具有尺度和旋转不变性的特征检测&#xff0c;但这些特征不具有仿射不变性。区域检测针对各种不同形状的图像区域…

图像局部特征(十四)--MSER特征

原文: http://blog.csdn.net/zhaocj/article/details/40742191 最大稳定极值区域&#xff08;MSER-Maximally Stable Extremal Regions&#xff09;可以用于图像的斑点区域检测。该算法最早是由Matas等人于2002年提出&#xff0c;它是基于分水岭的概念。 MSER的基本原理是对…

【AI实战】手把手教你深度学习文字识别(文字检测篇:基于MSER, CTPN, SegLink, EAST等方法)

文字检测是文字识别过程中的一个非常重要的环节&#xff0c;文字检测的主要目标是将图片中的文字区域位置检测出来&#xff0c;以便于进行后面的文字识别&#xff0c;只有找到了文本所在区域&#xff0c;才能对其内容进行识别。 文字检测的场景主要分为两种&#xff0c;一种是…

MSRCR

带色彩恢复的多尺度视网膜增强算法&#xff08;MSRCR&#xff09;的原理、实现及应用。 Retinex这个词是由视网膜(Retina)和大脑皮层(Cortex) 两个词组合构成的。Retinex理论主要包含了两个方面的内容&#xff1a;物体的颜色是由物体对长波、 中波和短波光线的反射能力决定的&a…

mser场景文字检测及筛选

发现很多人都用mser,swt等进行场景文字的检测&#xff0c;最近也去实现了一下&#xff0c;虽然swt较新的算法&#xff0c;但实现过程中传统的mser算法反而更稳定&#xff0c;速度也会更快&#xff0c;可能是我还没有完全领会swt的精髓。ps:暂时只做水平及水平倾斜的文字 demo …

mser python篇

之前一直在matlab上用这个函数&#xff0c;现在转移到python上面使用 ———————————————————————————————————— 1、代码 I cv2.cvtColor(I, cv2.COLOR_BGR2GRAY); mser cv2.MSER_create() regions,boxes mser.detectRegions(I) for bo…

MSER — 自然场景文本检测

MSER是最大稳定极值区域&#xff1a;是对一幅灰度图像&#xff08;灰度值为0&#xff5e;255&#xff09;取阈值进行二值化处理&#xff0c;阈值从0到255依次递增。阈值的递增类似于分水岭算法中的水面的上升&#xff0c;随着水面的上升&#xff0c;有一些较矮的丘陵会被淹没&a…

文字检测与识别1-MSER

导语 文字识别在现实场景中的用途非常广泛&#xff0c;现在已经有很多公司将这项技术用于实际中。比如车牌识别&#xff0c;图片转换成文档&#xff0c;拍照搜题&#xff0c;拍照翻译等。这让很多人有了错觉&#xff0c;感觉文字识别的技术已经炉火纯青&#xff0c;可以广泛应…

MSER常见参数

MSER用于文本检测已经成熟了&#xff0c;现简单使用来识别车牌号。 目录 MSER参数最大最小区域固定 MSER参数 默认&#xff1a;int delta 5, int min_area 60, int max_area 14400, double max_variation 0.25, double min_diversity .2 * Full constructor for %MSER d…

MSER算法

最稳定极值区域介绍 如把灰度图看成高低起伏的地形图&#xff0c;其中灰度值看成海平面高度的话&#xff0c;MSER的作用就是在灰度图中找到符合条件的坑洼。条件为坑的最小高度&#xff0c;坑的大小&#xff0c;坑的倾斜程度&#xff0c;坑中如果已有小坑时大坑与小坑的变化率…

【MSER】基于MSER算法的交通标志分割仿真

1.软件版本 MATLAB2021a 2.本算法理论知识 [1]钱坤. 基于MSER和遗传优化SVM的交通标志识别的研究[D]. 大连理工大学. [2]王斌, 常发亮, 刘春生. 基于MSER和SVM的快速交通标志检测[J]. 光电子.激光, 2016. 3.部分源码 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%…

MSER相关总结

最近做项目用到了MSER&#xff0c;特地在这做总结。 以前提到字符检测首先会想到Tesseract&#xff0c;但是tesseact对图像的二值化要求过高&#xff0c;比较适合于白底黑字的字符识别&#xff0c;对于复杂情况就无能为力了&#xff1b; 于是就想到用轮廓检测&#xff0c;这种…

最大稳定极值区域(MSER)检测

Lowe和Bay提出的SIFT和SURF算法高效实现了具有尺度和旋转不变性的特征检测&#xff0c;但这些特征不具有仿射不变性。 区域检测针对各种不同形状的图像区域&#xff0c;通过对区域的旋转和尺寸归一化&#xff0c;可以实现仿射不变性。 MSER&#xff08;Maximally Stable Extr…