首页 > 其他分享 >CH57x/CH58xUART3收数据并校验修改MAC地址

CH57x/CH58xUART3收数据并校验修改MAC地址

时间:2023-08-04 10:35:34浏览次数:41  
标签:CH57x uart R8 UART3 UART MAC CH58xUART3 add

前言:

UART1中断例程中达到触发点或超时接收串口数据会立马发送出去。本博客实现的是接收数据保存在数组中,同时校验数据内容是否为修改MAC帧。

接收数据不需要在UART_II_RECV_RDY中接收数据,可以都在UART_II_RECV_TOUT中收数据,直接读取RBR寄存器即可。

程序参考:

 基于BLE_UART例程修改。蓝牙连接后串口接收数据保存在环形缓冲区中;蓝牙未连接时,串口接收数据并保存在数组里面。

enum uart_return_result
{
    ADD_REC_SUCCESS = 0,
    ADD_REC_ERROR,
};

typedef enum       //定义与声明
{
    changemac_enable = 0,
    changemac_disable = !changemac_enable,
}changemac;

struct uart_t
{
    uint8 staticRfcLen;
    uint8 connectflag;
    uint16 x;
    uint8 judgeBuff[100];
    uint8 RxBuff[1000]; //接收最大长度
    char judgeMac[4];
};

__HIGH_CODE
uint8 REC_UART3(uint8 len, changemac enable){
    static uint32_t rxlen;
    uart_add = &uart_add_t;
    if(len >= 4)
    {
        for(uart_add->x = 0; uart_add->x < (4 - 1); uart_add->x++)
        {
            uart_add->RxBuff[uart_add->x] = R8_UART3_RBR;
            uart_add->judgeBuff[rxlen++] = uart_add->RxBuff[uart_add->x];
        }
    }
    else
    {
        uart_add->staticRfcLen = len;
        for( uart_add->x = 0; uart_add->x < uart_add->staticRfcLen; uart_add->x++)
        {
            uart_add->RxBuff[uart_add->x] = R8_UART3_RBR;
            uart_add->judgeBuff[rxlen++] = uart_add->RxBuff[uart_add->x];
        }
        if(!(R8_UART3_LSR & RB_LSR_DATA_RDY))                   //数据接收完成
        {
            printf("rxlen = %d, ", rxlen);                      //接收的总长度
            printf("judgeBuff = %s\n ", uart_add->judgeBuff);   //接收的数据
            printf("REC OVER\n");
            if(enable == 0)
            {
                strcpy(uart_add->judgeMac,"MAC");
                if(strstr(uart_add->judgeBuff, uart_add->judgeMac))         //判断是否为"MAC="
                {
                    printf("Rec MAC ADDR\r\n");
                    tmos_memcpy(NewMacAddr, &(uart_add->judgeBuff[4]), 6);  //前四个字节固定为"MAC=",否则无法识别,因此此处从第五个字节开始计数
                    tmos_start_task(Peripheral_TaskID, rst_evt, 8000);      //MAC地址设置完成后,5s复位,进行重新广播,用手机再搜索,发现MAC地址会改变。
                    EEPROM_ERASE(0, EEPROM_PAGE_SIZE);                      //将MAC保存到DataFlash,下次上电可以获取
                    EEPROM_WRITE(0, NewMacAddr, 6);
                }
                else
                {
                    printf("ENABLE changemac but not rec MACADDR\r\n");
                }
            }
            memset(uart_add->judgeBuff, 0, rxlen);              //开启串口接收并修改MAC地址,将清0放在更改地址后面
            rxlen = 0;                                          //长度清0,防止溢出
            return ADD_REC_SUCCESS;
        }
        else
        {
            printf("REC FAIL\n");
            return ADD_REC_ERROR;
        }rxlen = 0;                                             //长度清0,防止溢出
    }
    return 0;
}

switch(UART3_GetITFlag())
{
    case UART_II_LINE_STAT:
        UART3_GetLinSTA();
        break;

    case UART_II_RECV_RDY:
    case UART_II_RECV_TOUT:
        if(uart_add->connectflag)   //蓝牙连接,执行环形缓冲区的处理(即执行原本例程的操作)
        {
            error = app_drv_fifo_write_from_same_addr(&app_uart_rx_fifo, (uint8_t *)&R8_UART3_RBR, R8_UART3_RFC);
            if(error != APP_DRV_FIFO_RESULT_SUCCESS)
            {
                for(uint8_t i = 0; i < R8_UART3_RFC; i++)
                {
                    //fifo full,put to fifo black hole
                    for_uart_rx_black_hole = R8_UART3_RBR;
                }
            }
            uart_rx_flag = true;
        }
        else if(!uart_add->connectflag) //蓝牙未连接,通过串口3透传数据(可选择是否修改MAC使能)
        {
            REC_UART3(R8_UART3_RFC, changemac_enable );
        }
            break;

    case UART_II_THR_EMPTY:
        break;
    case UART_II_MODEM_CHG:
        break;
    default:
        break;
}

 

标签:CH57x,uart,R8,UART3,UART,MAC,CH58xUART3,add
From: https://www.cnblogs.com/gscw/p/17605235.html

相关文章

  • Macmini安装Ubuntu
    关闭sip下载并解压refind重启commmand+r进入恢复模式进入终端,找到刚刚解压的文件夹。然后chmod+xrefind-install&&./refind-install安装完refind之后,插入提前制作好的U盘启动神器(制作教程)重启,按住option选择EFI启动(⚠️注意:仅测试非M芯片的Macmini,M芯片的可以看一下As......
  • 一款Mac专用极具创意的绘图软件—Sketch
    Sketchmac是一款极具创意的绘图软件,它可以让您像玩游戏一样使用鼠标在屏幕上拖动来实现各种形状的效果,并创建有无数种效果。它还具有强大的绘制能力和功能,如图形、线条、网格等。该软件也是Sketch软件家族中比较独特的一款绘图软件。它不仅可以绘制文本,图像,音乐图标和文字,而且还......
  • 化学绘图软件ChemDraw Mac版,绘制简单的化学元素
    ChemDraw是一款化学绘图软件,在化学领域中,它可以绘制简单的化学物质的结构,属性和数据,甚至是一些数据图表。它在绘制过程中所展现出来的强大功能是非常适合做精细研究的,并且操作非常简单,它只需要点击一下鼠标就可以进行简单的操作,一步操作就可以完成它。可以制作简单的颜色,形状,图表(......
  • Mac中使用Keytool生成证书以及获取公钥方案实现
    Keytool是java中提供的一个证书管理工具如何生成证书?首先在Mac中新建一个文件夹,名为jks,如下图所示:新建jks文件夹然后在聚焦搜索里面搜索终端,打开terminal相当于windows中的cmd命令窗口,打开之后输入以下命令cdjkskeytool-genkeypair-aliastest-keyalgRSA-keypasstes......
  • 盘点一个初学者Python库安装的问题(Mac系统)(下篇
    大家好,我是皮皮。一、前言前几天在Python私教群【Emma】问了一个Python库安装的基础问题,一起来看看吧。上一篇文章讲到【Emma】的远程环境不给力,需要继续本地指导。二、实现过程针对导包失败的问题,这里【狂吃山楂片】给了一个解决方法,如下图所示:右下角可以设置环境,你点一下,......
  • mac 开发环境常用技巧
    话说Mac一般来讲不需要什么重装啊,不过世事无绝对啊,有时候人就是喜欢作死!!!比如前几天的我~~~算了,具体情况就不说了,反正就是作死,Mac系统出了问题。本来想着用TimeMachine恢复一下就得了,也省事。不过仔细想了一想,很想自己安装一遍(博主的折腾精神有时候很是让自己“佩服”),然后就开始了M......
  • 米哈游游戏《原神》如何在苹果电脑 MacOS 系统上运行?
    作者最近购买了一台新的Mac电脑,我平时喜欢玩原神想着能不能在Mac上玩原神呀,最初以为Mac能够像在Windows上一样直接从官方网站上下载mac版直接安装原神,但却发现原神根本就没有Mac版本。后来作者了解到可以通过playCover在Mac上安装IOS版本的原神,小试了一下,歪瑞的nice~......
  • SnapGene - DNA序列生物分析 5.3.1 mac/win版
    SnapGene是一款用于DNA序列分析和生物学实验设计的专业软件。它提供了强大的功能和直观的界面,帮助科学家和研究人员在分子生物学领域进行高效的实验规划和分析。下面将为您详细介绍SnapGene的特点和功能。点击获取SnapGenemac/win版 DNA序列编辑:SnapGene提供了易于......
  • Native Instruments Kontakt 7 - 专业音频采样器mac/win版
    NativeInstrumentsKontakt7是一款专业音频采样器,被广泛用于音乐制作、音频设计和声音效果制作等领域。它提供了丰富的采样库和强大的编辑功能,使用户可以创建出高质量的音频效果和音乐作品。下面将详细介绍Kontakt7的特点和功能。点击获取Kontakt7 大量采样库:Kontak......
  • docker部署项目,涉及springboot\tomacat\nginx\es
    sudoapt-getinstalldocker-ce=5:20.10.6~3-0~debian-bullseyedocker-ce-cli=5:20.10.6~3-0~debian-bullseyecontainerd.iodocker部署项目信息:--172.17.0.1   172.16.22.401、docker部署tomcatdockerrun-d --namestock-admin--restartalways-p81:8080-e"TZ......