c语言stm32串口控制单片机,实用STM32的串口控制平台的实现

假设我要编写一个自己的指令脚本, 来读取MCU的关键信息,关键字为mcu, 文件命名为shell_mcu.c; 当输入“mcu rd 0”时显示MCU的FLASH大小,输入“mcu rd 1”时读取MCU的唯一ID信息。

shell_mcu.c源代码:

/*********************************Copyright (c)*********************************

**

**                                 FIVE工作组

**

**---------------------------------File Info------------------------------------

** File Name:               shell_mcu.c

** Last modified Date:      2017/9/17 15:13:57

** Last Version:            V1.0

** Description:             shell测试

**

**------------------------------------------------------------------------------

** Created By:              wanxuncpx

** Created date:            2017/9/17 15:14:08

** Version:                 V1.0

** Descriptions:            none

**------------------------------------------------------------------------------

** HW_CMU:                  STM32F103

** Libraries:               STM32F10x_StdPeriph_Lib_V3.5.0

** version                  V3.5

*******************************************************************************/

/******************************************************************************

更新说明:

******************************************************************************/

/******************************************************************************

*********************************  编 译 控 制 ********************************

******************************************************************************/

#define MCU_SHELL               //注释掉时屏蔽iap shell功能

#include "xc_shell.h"       //Shell支持文件,含bool,uint8_t..以及串口数据收发操作

/******************************************************************************

********************************* 文件引用部分 ********************************

******************************************************************************/

/*---------------------*

*     模块驱动引用

*----------------------*/

//#include "net_w5500.h"

#ifdef MCU_SHELL

/******************************************************************************

********************************** Shell实例 **********************************

******************************************************************************/

/*---------------------*

*      CLI指令服务

*----------------------*/

extern bool Shell_MCU_Service(void * pcBuff, uint16_t len );

/*---------------------*

*       CLI 结构

*----------------------*/

const Cmd_Typedef_t CLI_McuMsg=

{

//识别关键字

"mcu",

//帮助内容

"[mcu contorls]\r\n"

" mcu rd \t\t- Read FLASH information.\r\n"

"\r\n",

//处理函数

&Shell_MCU_Service,

//附带数据

0,

#ifdef SHELL_USE_YMODEM

//存储介质

NULL,

#endif

};

/*---------------------*

*     CLI链表节(输出)

*----------------------*/

Cmd_List_t  McuList  = {&CLI_McuMsg      ,NULL}; //IAP指令链表

/******************************************************************************

********************************* 函 数 声 明 *********************************

******************************************************************************/

/******************************************************************************

/ 函数功能:STM32F103控制函数

/ 修改日期:2015/7/14 20:22:02

/ 输入参数:none

/ 输出参数:none

/ 使用说明:需要执行约10s

******************************************************************************/

static bool FLASH_ioctl(uint8_t cmd,void * param)

{

#define UID_ADDR            0x1FFFF7E0  //闪存容量寄存器,值对应KB单位

#define MAC_ADDR            0x1FFFF7E8  //MCU的唯一ID号,共12个字节

#define UID_SIZE            2           //UID的字节数

#define MAC_SIZE            12          //MAC的字节数

//step1: 检查参数

if(!param)return false;

//step2: 处理数据

switch(cmd){

case 0 : {       //获取FLASH的的UID

uint16_t * ptDst = (uint16_t *)((uint32_t)param+1);

*ptDst = *(uint16_t *)UID_ADDR;

*(uint8_t  *)param =  UID_SIZE;

return true;

}

case 1 : {       //获取芯片的MAC地址

uint32_t * ptDst = (uint32_t *)((uint32_t)param+1);

uint32_t * ptSrc = (uint32_t *)MAC_ADDR;

*ptDst++ = *ptSrc++;

*ptDst++ = *ptSrc++;

*ptDst++ = *ptSrc++;

*(uint8_t  *)param = MAC_SIZE;

return true;

}

default:return false;

}

}

/******************************************************************************

/ 函数功能:文件系统Shel指令处理

/ 修改日期:2013/9/10 19:04:15

/ 输入参数:输入当前的程序版本

/ 输出参数:none

/ 使用说明:none

******************************************************************************/

bool Shell_MCU_Service(void * pcBuff, uint16_t len )

{

uint8_t    *ptRxd;          //用于接收指令处理

int         i;

uint16_t    retval;

uint8_t     buff[32];

//处理指令

//--------------------------------------------------------------------------

ptRxd = (uint8_t *)pcBuff;

if(StrComp(ptRxd,"rd ")) //读取FLASH信息

{

int wval;

if(1 != sscanf((void *)ptRxd,"%*s%d",&wval) )return false;

if( wval>2 )return false;

if(0==wval) {

FLASH_ioctl(0,buff);

retval = *(uint16_t *)(buff+1) ;

printf("->Flash:\t%dKB\r\n",retval);

return true;

}

else if(1==wval) {

FLASH_ioctl(1,buff);

printf("->MAC:\t ");

for(i=0; iprintf("%02X\r\n",buff[i+1]);

return true;

}

else return false;

}

else if(StrComp(ptRxd,"help\r\n"))      //指令帮助

{

shell_SendStr((void *)CLI_McuMsg.pcHelpStr);

return true;

}

else return false;

}

/******************************************************************************

***********************************   END  ************************************

******************************************************************************/

#endif

5.2 实现步骤

1) 将该文件添加到工程下。

2) 在main.c中用extern 引用McuList,源代码为:

/*---------------------*

*     Shell指令链表

*----------------------*/

extern Cmd_List_t  McuList;

3)在main.c初始化时添加:

//----------------------------------------------------------

//step1: shell初始化

shell_Init(115200,ledx_cfg);        //初始化shell接口

CLI_AddCmd(&McuList);     //添加模块指令到链表

4)编译工程文件。

5)下载到开发板运行即可在终端下看到新支持的CLI指令:

9de552adeef792672e8936db7c780188.png

<1> 大家可根据此模板和方法,添加许多自己的指令和功能

<2> 限于篇幅,Ymodem文件传输,IAP升级、RTOS支持等将在下一期为大家讲解

c2c9ed493cd281aa86d8a6f5178c4c01.gif [1] [2] 610626052e95c7fbe3d254abc769d9ad.gif

本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529801.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

time_t c语言 2038,什么是2038问题?

什么是2038问题不知道你有没有听过2038问题?无论你是否听过&#xff0c;本文将带你认识什么是2038问题。Unix时间戳定义为从格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。而在C语言中&#xff0c;常用time_t来表示。举个例子…

c 语言 readline,如何用C实现一个readLine()函数- 该函数每次读入文本文件的一行并打印到屏幕...

如何用C实现一个readLine()函数- 该函数每次读入文本文件的一行并打印到屏幕(2012-04-13 00:23:41)标签&#xff1a;打印文本文件如何杂谈如何用C实现一个readLine()函数? 该函数每次读入文本文件的一行并打印到屏幕以前看到过这方面的讨论http://bbs.chinaunix.net/viewthrea…

c4droid语言游戏,c4droid手机编程软件下载

c4droid可以说是手机端最好的编程软件&#xff0c;没有之一&#xff0c;软件可以帮助大家在手机上进行编写C代码,让各位程序员们随时随地都能编程。操纵简单&#xff0c;功能强大。c4droid软件介绍c4droid是款Android设备上的C/C程序编译器&#xff0c;默认以tcc(tiny c compil…

创业冲突的五种解决方法是_不会说话,不懂处理人际冲突怎么办?《沟通的艺术》5步教会你...

关注“夏娃蓝空间”&#xff0c;陪你成长为更好的自己。想要良好地解决冲突&#xff0c;一定要有“这是我们两个人共同的事”的态度。今年夏天最热门的电视剧非《三十而已》莫属了&#xff0c;而撑起了这部剧的流量的广大观众&#xff0c;基本都是集中在逐步靠近中青年阶段的90…

android gsensor 坐标,MTK Android G sensor 原理,配置,调试

原理图&#xff1a;g_sensor的驱动目录在mediatek/custom/common/kernel/accelerometer下。一、g_sensor 的移植步骤1、在ProjectConfig.mk中配置相关的g_sensor例如 CUSTOM_KERNEL_ACCELEROMETER kxtf92、在mediatek/custom/common/kernel/accelerometer目录中添加 g_sensor的…

网贷大数据什么时候会好_如果人类把地球钻穿了,会发生什么?大数据分析告诉你多可怕...

很多科研人员在做实验的时候&#xff0c;少不了被旁人嘲笑或者蔑视的情况&#xff0c;因为常人往往是无法理解他们的想法的。例如曾经就有科研人员想要对地球进行钻探&#xff0c;看看能够在地表上钻多深&#xff0c;是否能够将地球给钻穿了。很多人都会认为这种做法没有意义而…

android h5 有广告,那些H5在Android上显示的丧心病狂的坑

首先得强调一下&#xff0c;H5和移动设备的交互遇到的问题真的是各种丧心病狂&#xff01;&#xff01;但是本主依然还是耐着极大的兴致(无奈)的做了下去。H5页面在Android或者IOS上运行出现问题(这里的运行指的是h5的页面运行在App里的webview里)&#xff0c;测试人员或者上级…

小米9android q测试版,基于Android Q的MIUI来了 小米9尝鲜

01基于Android Q的MIUI来了中关村在线消息&#xff1a;谷歌在今年五月份发布了最新的Android Q系统&#xff0c;虽然很多国产手机还没有升级到Android P&#xff0c;但是还是有不少厂家开始对旗下的手机升级到最新的Android Q系统&#xff0c;根据小米最新的官方的消息&#xf…

android layerlist bitmap,android shape类似的 另一个 高端用法:layer-list

android shape类似的 另一个 高端用法&#xff1a;layer-list&#xff1a;简介&#xff1a;将多个图片或上面两种效果按照顺序层叠起来” 《?xml version"1.0" encoding"utf-8"?>《layer-listxmlns:android"http://schemas.android.com/apk/res/…

nedc和epa续航里程什么意思_400公里已成续航新起点,纯电动车的实用性到底怎样...

对于购买纯电动汽车的用户来说&#xff0c;续航里程是非常重要的参考因素&#xff0c;毕竟如果续航里程太短&#xff0c;实用性将会大打折扣&#xff0c;跑个长途都心惊胆战的&#xff0c;生怕路上遇到堵车了、没电了、中途没有加油站之类的。就算是不考虑长途&#xff0c;市区…

java class类_关于创建java中的class类的对象的方法

1.由于Class类没有公共构造方法&#xff0c;所有创建Class的对象的方法有以下几种&#xff1a;①通过Class.forName()静态方法返回Class类的一个实例Class cls Class.forName("test.dog - 这个网站可出售。 - 最佳的test 来源和相关信息。");②通过类名.class来获取…

linux 正则查找email_Hello Iris简易微博类App开发教程3-查找用户和用户登录

用户邮箱地址有效性验证在上一节中&#xff0c;我们编写了用于用户注册的代码。但是当时并没有为用户的Email添加有效性验证&#xff0c;导致Email被设置为任何字符串都能注册成功。所以在本节初&#xff0c;我们首先来为Email添加一个有效性验证。首先还是来编写测试数据&…

原生的html组件,如何创建HTML5与原生UI组件混合的移动应用程序

本文将介绍如何使用Trigger.io创建原生的顶部栏、标签栏、以及HTML/CSS/JavaScript的混合型移动应用程序。以后我们将添加更多的原生UI组件到Trigger.io&#xff0c;但现在你只需要使用web技术就可以在IOS和Android上创建漂亮而流畅的移动应用。这是一个简单的菜谱应用程序的屏…

c语言不会可以学好java吗_有人说学了C语言,两天就能学会Java,两个星期就可以找工作?...

作为一个过来人来说&#xff0c;编程如果真的那么简单就不会导致现在各大公司还喊着招不到人的情况了&#xff0c;虽然编程领域里面有触类旁通的说法&#xff0c;但这个说法只是针对于对于一种编程已经掌握到一定程度了&#xff0c;不是简单的学过或者做过就可以轻松的转向别的…

wps合并所有sheet页_WPS里面如何批量打印(WPS2019)

WPS里面如何批量打印&#xff08;WPS2019&#xff09;分四步&#xff1a;1. 创建WPS表格获奖名单2. 创建WPS文字的获奖模板3. 将WPS表格名单内容调入到WPS文字奖状模板中4. 批量打印&#xff08;或保存&#xff09;&#xff08;注&#xff1a;我在这里用了别人的office版本的表…

keepalived mysql双主架构图_基于MySQL双主的高可用解决方案理论及实践

MySQL在互联网应用中已经遍地开花&#xff0c;但是在银行系统中&#xff0c;还在生根发芽的阶段。本文记录的是根据某生产系统实际需求&#xff0c;对数据库高可用方案从需求、各高可用技术特点对比、实施、测试等过程进行整理&#xff0c;完善Mysql高可用方案&#xff0c;同时…

小爱同学100个奇葩回复_小米小爱音箱Pro开箱评测,看到的不仅是全面升级更是小米loT的高速发展...

Hello&#xff0c;大家好&#xff0c;这里是科技能量站&#xff0c;今天有何大家见面了&#xff0c;本期小编给大家带来的是小米最新推出的小爱同学“小米小爱音箱Pro”&#xff0c;小米在前两年推出了自家的小米AI音箱&#xff0c;那一刻起&#xff0c;智能语音人工助手在小米…

你了解的继承方式html,法定继承、遗嘱继承、遗赠,这三种房产过户方式你了解多少?...

在房产过户的中&#xff0c;与继承相关的方式有三种&#xff1a;法定继承、遗嘱继承和遗赠。这三种过户方式其实是有较大不同的&#xff0c;下面我们就来具体分析下&#xff0c;希望能对需要的朋友有帮助。过户在房产过户中&#xff0c;与继承相关的有三种&#xff0c;分别是法…

wedo2.0编程模块介绍_福特福克斯TCM重新编程操作

适用范围支持车型/年款&#xff1a;新福克斯 2011 – 2018 1.6L/2.0L DPS6变速箱 车型嘉年华 2013 1.5L DPS6变速箱 车型翼博 2013 – 2016 1.5L DPS6变速箱 车型功能介绍升级ECU版本或者对空白ECU写入数据, PAD Ⅲ请使用有线连接进行编程, 测试时保证车辆电瓶电压充足条件要求…

必须重启计算机才能关闭用户账户控制,Win10系统怎么彻底关闭用户帐户控制?...

大多是win10系统用户都知道&#xff0c;微软所推出的用户帐户控制能够限制一些病毒程序启动&#xff0c;从而较好的保护我们的电脑安全&#xff0c;以达到降低win10系统中毒的风险。可是每当我们运行一个程序的时候系统总会出现提示&#xff0c;感觉很烦&#xff0c;那么怎么永…