0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术WinCE主板与STM32多功能模块通讯介绍

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-02-06 11:12 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

ETA321是英创推出的基于STM32单片机的多功能扩展模块,可为英创现有的WinCE系统增加AD、DA、PWM、脉冲计数等功能。ETA321使用了一片STM32F103RCT6单片机,STM32F103RCT6通过其USB Device接口与英创工控主板连接通讯,STM32在WinCE系统中被当做一个串口设备,英创主板作为上位机已经固化了STM32的USB驱动程序,同时我们封装了一组STM32与英创WinCE系统通讯的API接口函数,客户可以利用我们提供的接口函数,把成熟的实时控制算法移植到ETA321上,快速实现与英创主板的数据通讯。在使用这些API函数时,需要遵从以下约定:

1、通讯以数据包(结构体)作为基本单元,每次通讯收/发一个数据包,每个数据包最大为255字节,数据包第一个字节为本数据包的字节长度,第二个字节为命令码,数据包的其它内容由用户自定义。

2、数据包的第二个命令码字节用于表明本数据包的“身份”。当STM32接收到数据包,得到命令码后,会根据命令码执行相应的操作,当上位机接收到数据包后,根据命令码就可以知道接收到了什么数据。0~127命令码表示常规命令和数据,128~255表示实时数据或实时命令。

3、数据包和命令码的定义在WinCE上位机端和STM32端必须完全一致。STM32必须对接收到的每个命令数据包回复一个相同命令码的应答包,如果没有数据需要回复,可简单回复通用应答数据包。

下面是命令码和数据包定义示例:

/************************* 定义命令代码*************************/

#define MCU_GENERIC_VER_INFO 0

#define MCU_GENERIC_ADC 1

// STM32返回的实时数据命令码

#define MCU_REALTIME_ADC (0 + MCU_REALTIME_DATA)

/*********************** 定义数据包(结构体) **********************/

// 获取单片机固件版本信息

typedef struct

{

BYTE ucSize; // size of the structure < 256

BYTE ucCmd; // = MCU_GENERIC_VER_INFO

WORD wMajor; // major version number

WORD wMinor; // minor version number

char ucName[24]; // name of realtime driver

} MCU_VER_INFO, *PMCU_VER_INFO; // struct for Version Info

// ADC命令

typedef struct

{

BYTE ucSize; // size of the structure < 256

BYTE ucCmd; // = MCU_GENERIC_ADC

BYTE ucCH; // AD通道

DWORD dwSamplingRate; // 采样率

} MCU_ADC, *PMCU_ADC; // struct for Version Info

// STM32通用应答数据包

typedef struct

{

BYTE ucSize; // size of the structure < 256

BYTE ucCmd; //

BYTE ucRerult;

}MCU_GENERIC_REPLY, *PMCU_GENERIC_REPLY;

WinCE上位机API函数

在WinCE上使用我们提供的API函数时,需要在工程中包含以下3个文件

#include "mcu_class.h" // API接口函数定义

#include "mcuCmdInfo.h" // 命令码和数据包定义

#pragma comment(lib, "mcu_class.lib") // 包含库文件

下面是API函数说明:

/**

@brief 打开MCU设备,初始化相关环境

@param None

@retval = 返回true 打开成功

**/

BOOL OpenMCU();

/**

@brief 给STM32发送控制指令

@param *pCmdInfo[in]:符合约定数据结构的命令数据

@param *pBuf[out]: 接收STM32返回数据的数据缓存,此参数可为NULL

@param dwBufSize[in]:数据缓存大小

@retval = true 发送成功,返回true仅表示数据通讯成功,命令执行情况可查看pBuf返回的数据

**/

BOOL SendCmd(BYTE *pCmdInfo, BYTE *pBuf, DWORD dwBufSize = 0);

/**

@brief 关闭MCU,释放相关资源

@param None

@retval = true 关闭成功

**/

BOOL CloseMCU();

/**

@brief 接收STM32实时回传数据的回调函数指针,当接收到128~255命令码时被调用

**/

REPLYPRO MCUReplyPro;

STM32单片机API函数

在编写STM32程序时,同样应该包含和上位机定义一致的"mcuCmdInfo.h"文件。STM32使用API函数定义如下:

/**

* @brief USBD初始化及CDC类初始化

* @param None

* @retval None

**/

void USBCDC_Init(void);

/**

* @brief 查检是否有上位机发来的命令

* @param pBuf:用于接收命令的数据缓存

* @param pBuf:用于接收命令的数据缓存大小

* @retval =0:未接收到命令 >0:接收到数据包的长度(字节数)

**/

uint8_t CheckCommand(uint8_t *pBuf, uint32_t nBufSize);

/**

* @brief 向上位机发送数据

* @param 要发送的数据缓存

* @param 要发送的数据字节数

* @retval 返回发送字节数

**/

uint8_t SendData(uint8_t *pBuf, uint32_t nSendBytes);

STM32应用程序首先需要调用USBCDC_Init初始化USB接口,然后调用CheckCommand函数检查是否接收到上位机发来的命令,再根据命令码执行相应的操作,调用SendData函数发送应答数据或实时数据。

下面是WinCE系统中实现读取ETA321版本信息和实时波形数据采样的示例程序:

#include "stdafx.h"

#include "mcu_class.h" // API接口函数定义

#include "mcuCmdInfo.h" // 命令码和数据包定义

#pragma comment(lib, "mcu_class.lib") // 包含库文件

// 声明实时数据处理回调函数

static void CALLBACK MCUReplyPro(BYTE *buf, DWORD buflen);

int _tmain(int argc, _TCHAR* argv[])

{

MCU_CLASS mcu;

BYTE Buf[MAX_BUF_SIZE];

TCHAR csBuf[MAX_BUF_SIZE];

DWORD dwSize, dwCnt = 0;

MCU_VER_INFO getVerInfo;

MCU_ADC adc;

size_t RetrunSize;

// 打开MCU设备

if(!mcu.OpenMCU()) {

return -1;

}

// 指定MCU实时数据处理回调函数

mcu.MCUReplyPro = MCUReplyPro;

// 调用SenCmd函数之前必须初始化的个变量

getVerInfo.ucSize = sizeof(MCU_VER_INFO); // 发送的命令结构体大小(字节数)

getVerInfo.ucCmd = MCU_GENERIC_VER_INFO; // 命令代码:获取MCU版本信息

dwSize = sizeof(Buf); // 用于接收MCU数据的缓存大小

if(mcu.SendCmd((BYTE *)(&getVerInfo), (BYTE *)&getVerInfo, dwSize)) {

// 窄字符转宽字符

mbstowcs_s(&RetrunSize, csBuf, _countof(csBuf), getVerInfo.ucName, _TRUNCATE);

OutputMessage(TEXT("mcu-ver %x-%x '%s'\r\n"), getVerInfo.wMajor,getVerInfo.wMinor,csBuf);

}

else {

OutputMessage(TEXT("send command:%d failed!!!\r\n"), getVerInfo.ucCmd);

}

// 调用SenCmd函数之前必须初始化的变量

adc.ucSize = sizeof(MCU_ADC); // 发送的命令结构体大小(字节数)

adc.ucCmd = MCU_GENERIC_ADC; // 命令代码:获取MCU版本信息

adc.ucCH = 0; // 设备ADC通道

adc.dwSamplingRate = 10000; // 设置ADC采样率KHz

if(!mcu.SendCmd((BYTE *)(&adc), NULL)) {

OutputMessage(TEXT("send command:%d failed!!!\r\n"), adc.ucCmd);

}

while(1) {

Sleep(1000);

if(dwCnt > 10) // 10S后退出

break;

}

adc.dwSamplingRate = 0; // 停止ADC采集

if(!mcu.SendCmd((BYTE *)(&adc), NULL)) {

OutputMessage(TEXT("send command:%d failed!!!\r\n"), adc.ucCmd);

}

Sleep(1000);

// 关闭MCU设备,释放相关资源

mcu.CloseMCU();

return 0;

}

// 实时数据处理回调函数

void CALLBACK MCUReplyPro(BYTE *buf, DWORD buflen)

{

PMCU_ADC_DATA pADCData;

static DWORD cnt = 0;

pADCData = (PMCU_ADC_DATA)buf;

cnt += pADCData->ucSize;

// 处理实时数据......

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6107

    浏览量

    36935
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    可回收箱控制板关键功能模块详细介绍

    硬件。以下是可回收箱控制板关键功能模块的详细介绍。1.照明系统自动感应照明通过红外或超声波传感器检测用户靠近,触发LED灯带照明,提供投递区域的基础照明。无人时自动
    的头像 发表于 12-04 13:50 20次阅读
    可回收箱控制板关键<b class='flag-5'>功能模块</b>详细<b class='flag-5'>介绍</b>

    龙芯中科助力2025教育信息技术应用创新大赛成功举办

    2025年11月13日-15日,由中国教育技术协会主办、浙江大学与中国教育技术协会网络安全专业委员会联合承办,中国电子工业标准化技术协会信息技术应用创新工作委员会、浙江高校信
    的头像 发表于 11-21 16:23 589次阅读

    新时代的硬核基石:龙芯工控主板助力信产业新基建

    在数字技术重塑产业格局的今天,信产业已成为保障国家信息技术安全的核心战略。作为工业自动化系统的大脑,工控主板的自主可控程度直接决定信创新基建的稳固性。
    的头像 发表于 11-05 13:54 132次阅读

    智慧新核心,龙芯主板助力信体系再升级

    信息技术飞速发展的当下,信体系的自主可控与创新升级已成为国家战略层面的关键任务。作为信产业发展的重要基础硬件支撑,国产工控主板正发挥着日益重要的作用。
    的头像 发表于 08-11 09:14 563次阅读

    佛瑞亚如何通过信息技术推动业务增长

    在数字化、信息化的浪潮下,信息技术已经不仅是后台工具,更成为驱动企业发展的关键力量。本期Women Inspiring Mobility,我们采访了佛瑞亚中国区信息技术总监马瑛,了解她和团队如何将
    的头像 发表于 07-29 14:00 713次阅读

    飞腾主板为信产业发展提高硬实力

    信息技术飞速发展的当下,信产业已成为我国实现科技自立自强、保障国家信息安全的关键领域。信,即信息技术应用创新,其核心目标是实现
    的头像 发表于 07-22 18:20 554次阅读

    浪潮澎湃,国产主板迎来黄金时代!

    2025年7月,表示必须在2027年底前完成信100%替代,覆盖基础硬件、基础软件等核心领域。在信息技术应用创新浪潮席卷下,国产主板作为计算机系统的骨架,正从幕后走向台前。政策加持、技术
    的头像 发表于 07-21 14:00 357次阅读

    DEKRA德凯成为沙特通信和信息技术设备技术法规认证机构

    近日,DEKRA德凯成功获得沙特标准、计量和质量组织(SASO)认可,正式成为沙特通信和信息技术设备技术法规(Technical Regulation for Communications
    的头像 发表于 07-15 14:27 721次阅读

    兴达易控Modbus TCP转Profibus DP网关与安科瑞多功能电表的快速通讯

    在工业自动化领域,不同设备之间的通信连接至关重要。兴达易控Modbus TCP转Profibus DP网关接APM810/MCE安科瑞多功能电表与300plc通讯,这一过程涉及到多个关键技术和环节,下面将对其进行详细
    的头像 发表于 06-24 12:57 349次阅读
    兴达易控Modbus TCP转Profibus DP网关与安科瑞<b class='flag-5'>多功能</b>电表的快速<b class='flag-5'>通讯</b>

    科普|信是什么?一文读懂“信息技术应用创新”战略

    什么是信?信,即“信息技术应用创新”,是国家推动IT系统自主可控、安全可控的重要战略工程。它不仅是技术层面的创新,更承载着保障国家网络安全、推动产业升级和实现数字主权的重任。简单来
    的头像 发表于 06-13 10:06 6270次阅读
    科普|信<b class='flag-5'>创</b>是什么?一文读懂“<b class='flag-5'>信息技术</b>应用创新”战略

    浪潮下,国产主板有什么新的发展机遇?

    信息技术应用创新浪潮的推动下,国产主板迎来了诸多新的发展机遇。信产业旨在实现信息技术领域的自主可控,这一战略目标为国产主板的发展提供了广
    的头像 发表于 05-09 09:24 564次阅读
    信<b class='flag-5'>创</b>浪潮下,国产<b class='flag-5'>主板</b>有什么新的发展机遇?

    比斯特电池组综合性能测试机:关键功能模块剖析

    在电池技术飞速发展的现在,确保电池组的质量与安全是重中之重。比斯特电池组综合性能测试机作为一款专为电池组打造的高性能测试设备,在其中扮演着不可或缺的角色。它通过一系列精心设计的关键功能模块,多方位、精确地对电池组进行测试。下面我们就来深入了解这些关键
    的头像 发表于 04-24 10:45 428次阅读
    比斯特电池组综合性能测试机:关键<b class='flag-5'>功能模块</b>剖析

    芯盛智能荣获2024年信息技术应用创新工作委员会卓越贡献成员单位

    日前,中国电子工业标准化技术协会信息技术应用创新工作委员会(以下简称 “信工委会”)2024 年度总结座谈会于北京隆重举行。此次会议对在信工作中作出突出贡献的成员单位予以表彰。江苏
    的头像 发表于 01-20 09:56 926次阅读

    多功能智慧路灯系统整体解决方案介绍

    多功能智慧路灯系统整体解决方案介绍
    的头像 发表于 01-15 09:12 990次阅读
    <b class='flag-5'>多功能</b>智慧路灯系统整体解决方案<b class='flag-5'>介绍</b>

    飞腾助力首届教育信息技术应用创新大赛圆满落幕

    近日,由中国教育技术协会主办,教育部教育管理信息中心教育信实验室、公安部第三研究所、中国电子工业标准化技术协会信工委会支持,北京航空航天
    的头像 发表于 12-24 09:57 766次阅读