日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/8 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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指令:

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

<2> 限于篇幅,Ymodem文件傳輸,IAP升級、RTOS支持等將在下一期為大家講解

[1] [2]

本網站轉載的所有的文章、圖片、音頻視頻文件等資料的版權歸版權所有人所有,本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如果本網所選內容的文章作者及編輯認為其作品不宜公開自由傳播,或不應無償使用,請及時通過電子郵件或電話通知我們,以迅速采取適當措施,避免給雙方造成不必要的經濟損失。

總結

以上是生活随笔為你收集整理的c语言stm32串口控制单片机,实用STM32的串口控制平台的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。