首页 > 其他分享 >【CC2640R2F】香瓜CC2640R2F之串口

【CC2640R2F】香瓜CC2640R2F之串口

时间:2025-01-16 09:33:36浏览次数:3  
标签:GUA UART CC2640R2F nGUA 香瓜 串口

本文最后修改时间:2021年09月09日 10:36

一、本节简介

本节以simple_peripheral工程为例,介绍如何使用串口。

二、实验平台

1)CC2640R2F平台

①协议栈版本:CC2640R2 SDK v1.40.00.45

②编译软件:CCS7.3.0.00019

③硬件平台:香瓜CC2640R2F开发板

④仿真器:香瓜XDS100V3下载器

2)PC端平台

①串口调试工具:SSCOM3.2

三、版权声明

1)作者:甜甜的大香瓜

2)声明:喝水不忘挖井人,转载请注明出处。

3)纠错/业务合作:897503845@qq.com

4)香瓜BLE之CC2640R2F群:557278427

5)本文出处:原创连载资料《简单粗暴学蓝牙5》

6)完整开源资料下载地址(电脑端打开):

opengua.taobao.com

7)香瓜CC2640R2F开发板购买链接:

https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4023-16963296339.8.21bfc58419sWKt&id=558653143169

四、实验前提

1、在进行本文步骤前,请先阅读以下章节:

1)《简单粗暴学蓝牙5》的“第一章至第四章”章节​。

2)《UARTCC26XX.h File Reference》:

C:\ti\simplelink_cc2640r2_sdk_1_40_00_45\docs\tidrivers\doxygen\html\_u_a_r_t_c_c26_x_x_8h.html

2、在进行本文步骤前,请先实现以下章节:

1)《简单粗暴学蓝牙5》的“第三章 软件的安装及使用”章节。

2)《简单粗暴学蓝牙5》的《香瓜CC2640R2F之LED》。

3)《简单粗暴学蓝牙5》的《香瓜CC2640R2F之自定义按键》。

4)《简单粗暴学蓝牙5》的《香瓜CC2640R2F之自定义周期事件(从机)》。

5)《简单粗暴学蓝牙5》的《香瓜CC2640R2F之有源蜂鸣器》。

6)《简单粗暴学蓝牙5》的《香瓜CC2640R2F之LCD》。

五、基础知识

暂无

六、硬件原理

1、原理图

/i/?i=20171104110409713

/i/?i=20171104110414352

上图可知:

串口引脚

香瓜CC2640R2F开发板引脚

TXD

DIO_2

RXD

DIO_3

2、开发板对应位置

/i/?i=20171104110909891

需将拨码开关的右11(TXD)、右12(RXD),共2个按键上拨。

七、实验步骤

1、编写并添加自定义的串口驱动

1)写一个串口驱动GUA_UART.c(存放在“……\simplelink_cc2640r2_sdk_1_40_00_45\examples\rtos\CC2640R2_LAUNCHXL\ble5stack\simple_peripheral\src\app\GUA”路径下)

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

//name:         GUA_UART.c

//introduce:    香瓜的串口驱动

//author:       甜甜的大香瓜

//email:        897503845@qq.com

//QQ group:     香瓜BLE之CC2640R2F(557278427)

//shop:

//shop:         opengua.taobao.com

//changetime:   2021.09.09

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

#include <xdc/runtime/Assert.h>

#include <xdc/runtime/Types.h>

#include <xdc/runtime/Log.h>

#include <ti/sysbios/BIOS.h>

#include "board.h"

#include <ti/drivers/power/PowerCC26XX.h>

#include <ti/drivers/UART.h>

#include <ti/drivers/uart/UARTCC26XX.h>

#include "GUA_Uart.h"

/*********************宏定义************************/

#define GUA_UART_RX                 IOID_2  //接收引脚

#define GUA_UART_TX                 IOID_3  //发送引脚

/*********************内部变量************************/

//串口号

typedef enum{

    GUA_UART0 = 0,

    GUA_UARTCOUNT

}GUA_UARTName;

//流控制所需的配置

const UARTCC26XX_HWAttrsV2 GUA_UART_CC26XXHWAttrs[GUA_UARTCOUNT] = {

    {

        .baseAddr       = UART0_BASE,

        .powerMngrId    = PowerCC26XX_PERIPH_UART0,

        .intNum         = INT_UART0_COMB,

        .intPriority    = ~0,

        .swiPriority    = 0,

        .txPin          = GUA_UART_TX,

        .rxPin          = GUA_UART_RX,

        .ctsPin         = PIN_UNASSIGNED,

        .rtsPin         = PIN_UNASSIGNED

    }

};

//串口目标

static UARTCC26XX_Object GUA_UART_CC26XXObjects[GUA_UARTCOUNT];

static const UART_Config GUA_UART_Config[GUA_UARTCOUNT] = {

    {

        .fxnTablePtr = &UARTCC26XX_fxnTable,

        .object      = &GUA_UART_CC26XXObjects[GUA_UART0],

        .hwAttrs     = &GUA_UART_CC26XXHWAttrs[GUA_UART0]

    },

};

//串口句柄

static UART_Handle stGUA_UART_Handle;

//串口参数

static UART_Params stGUA_UART_Params;

/*********************外部变量************************/

GUA_U8 gaGUA_UART_RxBuf[GUA_UART_MAX_NUM_RX_BYTES] = {0};

GUA_U8 gaGUA_UART_TxBuf[GUA_UART_MAX_NUM_TX_BYTES] = {0};

GUA_U32 gGUA_UART_WantedRxBytes;

GUA_U8 gGUA_UART_Size;

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

//name:         GUA_UART_Init

//introduce:    香瓜串口驱动初始化

//parameter:    none

//return:       none

//author:       甜甜的大香瓜

//email:        897503845@qq.com

//QQ group:     香瓜BLE之CC2640R2F(557278427)

//shop:         opengua.taobao.com

//changetime:   2017.11.09

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

void GUA_UART_Init(GUA_UART_Callback GUA_UART_ReadCallback)

{

    //初始化为默认值

    UART_Params_init(&stGUA_UART_Params);

    //参数设置

    stGUA_UART_Params.baudRate      = 115200;

    stGUA_UART_Params.writeDataMode = UART_DATA_BINARY;

    stGUA_UART_Params.readMode      = UART_MODE_CALLBACK;

    stGUA_UART_Params.readDataMode  = UART_DATA_BINARY;

    stGUA_UART_Params.readCallback  = GUA_UART_ReadCallback;

    //打开串口

    stGUA_UART_Handle = GUA_UART_Config[0].fxnTablePtr->openFxn((UART_Handle)&GUA_UART_Config[0], &stGUA_UART_Params);

    //启动串口局部返回功能

    GUA_UART_Config[0].fxnTablePtr->controlFxn(stGUA_UART_Handle, UARTCC26XX_CMD_RETURN_PARTIAL_ENABLE, NULL);

    //开始第一次的读取等待

    gGUA_UART_WantedRxBytes = GUA_UART_MAX_NUM_RX_BYTES;

    GUA_UART_Receive(gaGUA_UART_RxBuf, gGUA_UART_WantedRxBytes);

}

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

//name:         GUA_UART_Send

//introduce:    香瓜串口的写数据的函数

//parameter:    npGUA_UART_TxBuf:写缓冲区

//              nGUA_UART_Len:数据长度

//return:       none

//author:       甜甜的大香瓜

//email:        897503845@qq.com

//QQ group:     香瓜BLE之CC2640R2F(557278427)

//shop:         opengua.taobao.com

//changetime:   2017.11.09

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

void GUA_UART_Send(GUA_U8* npGUA_UART_TxBuf, GUA_U8 nGUA_UART_Len)

{

    GUA_UART_Config[0].fxnTablePtr->writeFxn(stGUA_UART_Handle, npGUA_UART_TxBuf, nGUA_UART_Len);

}

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

//name:         GUA_UART_Receive

//introduce:    香瓜串口的写数据的函数

//parameter:    npGUA_UART_RxBuf:读缓冲区

//              nGUA_UART_Len:数据长度

//return:       none

//author:       甜甜的大香瓜

//email:        897503845@qq.com

//QQ group:     香瓜BLE之CC2640R2F(557278427)

//shop:         opengua.taobao.com

//changetime:   2017.11.09

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

void GUA_UART_Receive(GUA_U8* npGUA_UART_RxBuf, GUA_U8 nGUA_UART_Len)

{

    GUA_UART_Config[0].fxnTablePtr->readFxn(stGUA_UART_Handle, npGUA_UART_RxBuf, nGUA_UART_Len);

}

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

//name:         *GUA_Hex_To_Str

//introduce:    香瓜十六进制转字符串,默认最多25字节转50个字符串数据

//parameter:    pGUA_Hex:十六进制数据首地址;

//              nGUA_Len:十六进制数据长度

//return:       转换好的字符串数据,默认最多50个字符

//author:       甜甜的大香瓜

//email:        897503845@qq.com

//QQ group:     香瓜BLE之CC2640R2F(557278427)

//shop:         opengua.taobao.com

//changetime:   2021.09.09

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

char *GUA_Hex_To_Str(GUA_U8 *pGUA_Hex, GUA_U8 nGUA_Len)

{

    char nGUA_Hex[] = "0123456789ABCDEF";

    static char aGUA_str[50];

    char *pGUA_Str = aGUA_str;

    for (GUA_U8 i = 0; i < nGUA_Len; i++)

    {

        *pGUA_Str++ = nGUA_Hex[*pGUA_Hex >> 4];

        *pGUA_Str++ = nGUA_Hex[*pGUA_Hex++ & 0x0F];

    }

    return aGUA_str;

}

“启动串口局部返回功能”是为了能在串口接收到数据时及时进回调函数。如果没有这条语句,将会在缓冲区满时才进入。

2)写一个串口驱动头文件GUA_UART.h(存放在“……

\simplelink_cc2640r2_sdk_1_40_00_45\examples\rtos\CC2640R2_LAUNCHXL\ble5stack\simple_peripheral\src\app\GUA“路径下)

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

//name:         GUA_UART.h

//introduce:    香瓜的串口驱动头的文件

//author:       甜甜的大香瓜

//email:        897503845@qq.com

//QQ group:     香瓜BLE之CC2640R2F(557278427)

//shop:         opengua.taobao.com

//changetime:   2021.09.09

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

#ifndef _GUA_UART_H_

#define _GUA_UART_H_

/*********************宏定义************************/

//类型宏

#ifndef GUA_C

typedef char GUA_C;

#endif

#ifndef GUA_U8

typedef unsigned char GUA_U8;

#endif

#ifndef GUA_8

typedef signed char GUA_8;

#endif

#ifndef GUA_U16

typedef unsigned short GUA_U16;

#endif

#ifndef GUA_16

typedef signed short GUA_16;

#endif

#ifndef GUA_U32

typedef unsigned long GUA_U32;

#endif

#ifndef GUA_32

typedef signed long GUA_32;

#endif

#ifndef GUA_U64

typedef unsigned long long GUA_U64;

#endif

#ifndef GUA_64

typedef signed long long GUA_64;

#endif

//缓冲区数据长度

#define GUA_UART_MAX_NUM_RX_BYTES   60      //最大接收字节

#define GUA_UART_MAX_NUM_TX_BYTES   60      //最大发送字节

/*********************外部变量************************/

extern GUA_U8 gaGUA_UART_RxBuf[GUA_UART_MAX_NUM_RX_BYTES];

extern GUA_U8 gaGUA_UART_TxBuf[GUA_UART_MAX_NUM_TX_BYTES];

extern GUA_U32 gGUA_UART_WantedRxBytes;

extern GUA_U8 gGUA_UART_Size;

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

typedef void (*GUA_UART_Callback) (UART_Handle nGUA_Handle, void *npGUA_Buf, size_t nGUA_Count);

extern void GUA_UART_Init(GUA_UART_Callback GUA_UART_ReadCallback);

extern void GUA_UART_Send(GUA_U8* npGUA_UART_TxBuf, GUA_U8 nGUA_UART_Len);

extern void GUA_UART_Receive(GUA_U8* npGUA_UART_RxBuf, GUA_U8 nGUA_UART_Len);

extern char *GUA_Hex_To_Str(GUA_U8 *pGUA_Hex, GUA_U8 nGUA_Len);

#endif

2、工程中添加驱动文件GUA_UART.c和GUA_UART.h

注:拖拽至CCS工程的Application文件夹下

/i/?i=20171104111615194

添加文件过程中,选项选择如下

/i/?i=20171104111631910

/i/?i=20171104111642969

3、应用层调用

1)添加头文件(simple_peripheral.c中)

//GUA 

#include “GUA_UART.h” 

//GUA 

2)添加初始化代码(simple_peripheral.c的SimpleBLEPeripheral_init函数末尾中)

//GUA

    //串口初始化

    GUA_UART_Init(GUA_UART_ReadCallback);

    //串口字符串示例

    GUA_UART_Send("opengua\r\n", 9);

    GUA_UART_Send("QQ Group:55727827\r\n", 19);

    //串口十六进制转字符串示例

    uint8 nGUA_Temp = 0x31;

    GUA_UART_Send("GUA Age:", 8);

    GUA_UART_Send((uint8 *)(GUA_Hex_To_Str(&nGUA_Temp, 1)), 2);

    GUA_UART_Send("\r\n", 2);

    uint8 aGUA_Buf[6] = {0x12, 0x34, 0x56, 0x78, 0x90, 0x12};

    GUA_UART_Send("GUA Tel:", 8);

    GUA_UART_Send((uint8 *)(GUA_Hex_To_Str(&aGUA_Buf, 6)), 11);

    GUA_UART_Send("\r\n", 2);

    //串口处理定时器初始化

    Util_constructClock(&GUA_UART_Clock, SimpleBLEPeripheral_clockHandler,

                        0, 0, false, SBP_GUA_UART_EVT);

//GUA

初始化时传入应用层的串口回调函数,以便串口接收到数据时能传到应用层中。

3)修改按键处理函数(替换simple_peripheral.c的GUA_HandleKeys函数)

//GUA 

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

//name:         GUA_HandleKeys 

//introduce:    应用层按键处理函数 

//parameter:    GUA_Keys:键值 

//return:       none 

//author:       甜甜的大香瓜 

//email:        897503845@qq.com 

//QQ group:     香瓜BLE之CC2640R2F(557278427) 

//shop: 

//https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i 

//changetime:   2017.11.04 

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

static void GUA_HandleKeys(uint8 GUA_Keys) 

  //UP按键 

  if(GUA_Keys & GUA_KEY_UP_VALUE) 

  { 

//LED1亮 

GUA_Led_Set(GUA_LED_NO_1, GUA_LED_MODE_ON); 

 

//蜂鸣器响 

GUA_Beep_Set(GUA_BEEP_MODE_ON); 

 

//LCD显示 

GUA_LCD_WriteString(“UP is pressed”, GUA_LCD_LINE7); 

 

//串口发送数据 

GUA_UART_Send(“UP is pressed\r\n”, 15); 

 

//启动定时器 

Util_startClock(&GUA_periodicClock); 

  } 

 

  //DOWN按键 

  if(GUA_Keys & GUA_KEY_DOWN_VALUE) 

  { 

//LED2亮 

GUA_Led_Set(GUA_LED_NO_2, GUA_LED_MODE_ON); 

 

//蜂鸣器响 

GUA_Beep_Set(GUA_BEEP_MODE_ON); 

 

//LCD显示 

GUA_LCD_WriteString(“DOWN is pressed”, GUA_LCD_LINE7); 

 

//串口发送数据 

GUA_UART_Send(“DOWN is pressed\r\n”, 17); 

 

//启动定时器 

Util_startClock(&GUA_periodicClock); 

  } 

 

  //LEFT按键 

  if(GUA_Keys & GUA_KEY_LEFT_VALUE) 

  { 

//LED3亮 

GUA_Led_Set(GUA_LED_NO_3, GUA_LED_MODE_ON); 

 

//蜂鸣器响 

GUA_Beep_Set(GUA_BEEP_MODE_ON); 

 

//LCD显示 

GUA_LCD_WriteString(“LEFT is pressed”, GUA_LCD_LINE7); 

 

//串口发送数据 

GUA_UART_Send(“LEFT is pressed\r\n”, 17); 

 

//启动定时器 

Util_startClock(&GUA_periodicClock); 

  } 

 

  //RIGHT按键 

  if(GUA_Keys & GUA_KEY_RIGHT_VALUE) 

  { 

//LED4亮 

GUA_Led_Set(GUA_LED_NO_4, GUA_LED_MODE_ON); 

 

//蜂鸣器响 

GUA_Beep_Set(GUA_BEEP_MODE_ON); 

 

//LCD显示 

GUA_LCD_WriteString(“RIGHT is pressed”, GUA_LCD_LINE7); 

 

//串口发送数据 

GUA_UART_Send(“RIGHT is pressed\r\n”, 18); 

 

//启动定时器 

Util_startClock(&GUA_periodicClock); 

  } 

 

  //SELECT按键 

  if(GUA_Keys & GUA_KEY_SELECT_VALUE) 

  { 

//LED全亮 

GUA_Led_Set(GUA_LED_NO_ALL, GUA_LED_MODE_ON); 

 

//蜂鸣器响 

GUA_Beep_Set(GUA_BEEP_MODE_ON); 

 

//LCD显示 

GUA_LCD_WriteString(“SELECT is pressed”, GUA_LCD_LINE7); 

 

//串口发送数据 

GUA_UART_Send(“SELECT is pressed\r\n”, 19); 

 

//启动定时器 

Util_startClock(&GUA_periodicClock); 

  } 

//GUA 

每个按键都有对应的串口显示。

4)定义串口处理事件

①修改串口处理事件的宏(simple_peripheral.c中)

//GUA 

#define SBP_GUA_PERIODIC_EVT                  Event_Id_02           //香瓜周期事件 

#define SBP_GUA_ALL_EVENTS                    SBP_GUA_PERIODIC_EVT  //所有事件的集合 

//GUA 

修改为

//GUA 

#define SBP_GUA_PERIODIC_EVT                Event_Id_02                             //香瓜周期事件 

#define SBP_GUA_UART_EVT                    Event_Id_03                             //香瓜串口处理事件 

#define SBP_GUA_ALL_EVENTS                  SBP_GUA_PERIODIC_EVT | SBP_GUA_UART_EVT //所有事件的集合 

//GUA 

②添加串口处理事件的处理(simple_peripheral.c的SimpleBLEPeripheral_taskFxn中)

//GUA 

      //香瓜串口处理事件 

      if (events & SBP_GUA_UART_EVT) 

      { 

          //再次启动定时器 

          //Util_startClock(&GUA_periodicClock); 

 

          //香瓜串口处理函数 

          GUA_UART_PerformTask(); 

      } 

//GUA 

5)定义定时器结构体数据(simple_peripheral.c中)

//GUA 

static Clock_Struct GUA_UART_Clock; 

//GUA 

6)添加串口回调函数和串口事件处理函数

①添加串口回调函数和串口事件处理函数(simple_peripheral.c中)

//GUA 

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

//name:         GUA_UART_ReadCallback 

//introduce:    香瓜串口的读数据的回调函数 

//parameter:    nGUA_UART_Handle:句柄 

//              npGUA_UART_RxBuf:接收缓冲区 

//              nGUA_UART_Size:接收的数据大小 

//return:       none 

//author:       甜甜的大香瓜 

//email:        897503845@qq.com 

//QQ group:     香瓜BLE之CC2640R2F(557278427) 

//shop: 

//https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i 

//changetime:   2017.11.09 

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

static void GUA_UART_ReadCallback(UART_Handle nGUA_UART_Handle, void *npGUA_UART_RxBuf, size_t nGUA_UART_Size) 

//保存数据 

gGUA_UART_Size = nGUA_UART_Size; 

memcpy(gaGUA_UART_RxBuf, npGUA_UART_RxBuf, gGUA_UART_Size); 

 

//启动定时器 

Util_startClock(&GUA_UART_Clock); 

 

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

//name:         GUA_UART_PerformTask 

//introduce:    香瓜串口事件的处理函数 

//parameter:    none 

//return:       none 

//author:       甜甜的大香瓜 

//email:        897503845@qq.com 

//QQ group:     香瓜BLE之CC2640R2F(557278427) 

//shop: 

//https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i 

//changetime:   2017.11.09 

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

static void GUA_UART_PerformTask(void) 

//发送数据 

GUA_UART_Send(gaGUA_UART_RxBuf, gGUA_UART_Size); 

 

//开始新一次的读取等待 

GUA_UART_Receive(gaGUA_UART_RxBuf, gGUA_UART_WantedRxBytes); 

//GUA 

串口接收到数据后,会从底层发送数据到应用层的回调函数GUA_UART_ReadCallback中。

在回调函数GUA_UART_ReadCallback中保存数据、启动串口处理事件的定时器。

随后会在GUA_UART_PerformTask函数中做处理。

②添加串口回调函数的声明和串口处理函数的声明(simple_peripheral.c中)

//GUA 

static void GUA_UART_ReadCallback(UART_Handle nGUA_UART_Handle, void *npGUA_UART_RxBuf, size_t nGUA_UART_Size); 

static void GUA_UART_PerformTask(void); 

//GUA 

4、配置中的预编译修改

/i/?i=20171104113140157

修改预编译宏为上图红框所示(要一样)

注:改动之前协议栈的串口宏是打开的,但与香瓜使用的串口方式是冲突的,因此需要关闭。

八、注意事项

1、实测如果直接在串口回调函数中做处理,会导致“收发一段时间后无法发出数据”的现象。

2、主机端添加串口时,下图红框处略有不同。

九、实验结果

用USB数据线将香瓜CC2640R2F开发板与电脑USB接口连接,打开电脑端的串口调试工具。

仿真并全速运行,然后电脑端发送“大家好,我是甜甜的大香瓜。大家好,我是甜甜的大香瓜。”,再分别按下香瓜CC2640R2F开发板上的5个多向按键。串口调试工具显示如下:

其中,红框的为上电后收到,蓝框的为电脑端发出数据后接收到的,黄框为按下按键后接收到的。

因此,实验成功。

标签:GUA,UART,CC2640R2F,nGUA,香瓜,串口
From: https://blog.csdn.net/feilusia/article/details/145170687

相关文章

  • 【CC2640R2F】香瓜CC2640R2F之自定义服务
    本文最后修改时间:2023年09月06日12:19一、本节简介本节以simple_peripheral工程为例,介绍如何添加自定义服务。二、实验平台1)CC2640R2F平台①协议栈版本:CC2640R2SDKv1.40.00.45②编译软件:CCS7.3.0.00019③硬件平台:香瓜CC2640R2F开发板④仿真器:香瓜XDS100V3下载器2......
  • qt通信:串口通信
    好久没有使用串口通信,所以有些数据老是忘记,所以找了个时间总结一下,下次可以直接复制,不用再写了。1.在工程文件.pro文件中加入QT+=serialport2.之后点击构建,执行一次qmake在窗口类的头文件中,加入串口通信用到的头文件#include<QtSer......
  • 【花雕学编程】Arduino动手做(246)---设置ESP8266 V3 通过串口输出软AP的IP、MAC和WiFi
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来——小小的......
  • 【树莓派5】香瓜树莓派5之Home Assistant(ZHA+ Zigbee2MQTT)控制zigbee开关(有线+无线)
    本文最后修改时间:2024年07月04日一、本节简介本节以树莓派5为例,安装HomeAssistant系统并且进行配置,通过两种协议方式(ZHA+Zigbee2MQTT)控制zigbee网关,连接zigbee开关(有线+无线)来控制灯的亮灭。二、实验平台1、硬件平台1)树莓派5开发板套件①树莓派5开发板②SD卡(32G)③mir......
  • STM32单片机芯片与内部75 USB虚拟串口 标准库 HAL库 配置实现
    目录一、标准库工程1、USB初始化2、USB中断配置3、中断服务函数与回调接收4、USB连接5、时钟配置6、数据发送二、HAL库工程1、USB初始化2、中断服务函数与回调接收4、USB连接5、时钟配置6、数据发送一、标准库工程1、USB初始化    由官方进行适配。v......
  • 手戳usb转串口芯片cp2102模块——理论知识
    一、简介 CP2102是一个USB转串行通信接口的芯片,常用于将USB接口转换为常见的串口接口(RS-232、TTL等)。它通常用于嵌入式系统、数据传输以及外设控制等领域。以下内容基于电脑通过cp2102与esp32进行串口通信(比如烧录程序、数据发送与接受)的情景讲述。二、讲述以上......
  • 51单片机——串口通信(重点)
    1、通信通信的方式可以分为多种,按照数据传送方式可分为串行通信和并行通信;按照通信的数据同步方式,可分为异步通信和同步通信;按照数据的传输方向又可分为单工、半双工和全双工通信1.1通信速率        衡量通信性能的一个非常重要的参数就是通信速率,通常以比特率(B......
  • 串口通信(CH340+CH9329)基础代码()
    //  串口向9329发送  键盘和鼠标信息==================//      BOOLOpenCom()打开串口//      voidSet_Com() 初始化串口参数//   intRead_Com()读串口数据// intWrite_Com()  写串口数据HANDLEhCom;//全局变量,串口......
  • 如何用串口调试助手ComTone调试串口?附安装包
    前言大家好,我是小徐啊。我们在调试应用的时候,有时候是需要进行串口通信的。但并不是每次都有实时的串口数据供我们去测试,这个时候就需要一个模拟生成串口数据的工具来帮助我们了。今天,小徐就来介绍下串口调试助手ComTone的用法。文末附获取方式。如何使用串口调试助手ComTone首......
  • day2-串口调制及相关参数设置
    自定义串口通信协议包头|数据4(1+1+2)2地址码(1byte)|功能码(1byte)|数据长度(2byte)|数据(不定长)|校验码(2byte)总线通信:        一条信号线上挂载了很多主机,地址码标识给谁发的SPI、串口、I2C给下位机发送消息,可能不仅仅一个功能,标识功能256(0-255)数据长......