打印
[AIROC™ 蓝牙]

【英飞凌CYW20829测评】基础任务:串口调试

[复制链接]
462|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 mingxiangjun 于 2024-7-14 15:41 编辑

基础任务:串口调试
一、说明
    在嵌入式领域,在没有GUI情况下,串口调试很重要,如输入“ver”查询版本号,输入“chip”回应芯片信息等等。由于C的可移植性,先简单在PC模拟一下,再移植到MCU:
二、编码
    可直接在例程UART_Transmit_and_Receive基础上进行修改,新建cmd.h:
#ifndef __CMD_H__
#define __CMD_H__
typedef void (*pCmd)(void);
typedef struct{
    char *cmdName;
    pCmd cmdHandler;
}cmdTab_t;
extern cmdTab_tcmdList[];
extern int cmdNum;
#endif
Cmd.c:
#include <stdio.h>
#include "cmd.h"
void verHandler(void);
void chipHandler(void);
cmdTab_t cmdList[]=
{
    {"ver",verHandler},
    {"chip",chipHandler}
};
int cmdNum=sizeof(cmdList)/sizeof(cmdTab_t);
void verHandler()
{
    printf("%s%s\n",__DATE__,__TIME__);
}
void chipHandler()
{
    printf("Infineon CYW20829\n");
}
主函数添加shell指令处理流程:
#include "cmd.h"
#include <string.h>
#defineBUFF_SIZE                  (64)
char txBuff[BUFF_SIZE];
char rxBuff[BUFF_SIZE];
volatile bool rxEnd = 0;
volatile int txBuffIndex= 0;
volatile int rxBuffIndex= 0;
主循环:
    for (;;)
    {
        if (CY_RSLT_SUCCESS == cyhal_uart_getc(&cy_retarget_io_uart_obj,
                                              (uint8_t *)&rxBuff[rxBuffIndex],0))
        {
         if(rxBuff[rxBuffIndex]=='\r'||rxBuff[rxBuffIndex]=='\n')
         {
            rxEnd=1;
         }
         else
            rxBuffIndex++;
         if(rxEnd==1&&rxBuffIndex!=0)
         {
            rxBuff[rxBuffIndex]='\0';
            inti=0;
            for(;i<cmdNum;i++)
            {
                if(strcmp(rxBuff,cmdList.cmdName)==0)
                {
                    printf("%s\n",rxBuff);//回显
                    cmdList.cmdHandler();
                    break;
                }
            }
                if (i==cmdNum)
                {
                   printf("Cmd not found\n");
                }
               rxBuffIndex=0;
         }
         rxEnd=0;
        }
        else
        {
           handle_error();
        }
    }

三、效果
    可以看到单线程死循环能很好执行指令并返回结果,和PC上效果一致:

使用特权

评论回复
评论
mingxiangjun 2024-7-15 22:36 回复TA
@qintian0303 :都是基于eclipse,有类似STM32CubeMX的图形化初始代码生成工具、工程生成器、烧录器等等,用过就知道了 
qintian0303 2024-7-15 15:18 回复TA
英飞凌的开发环境特殊吗? 
沙发
louyj| | 2024-7-15 09:47 | 只看该作者
不错,学习一下。

使用特权

评论回复
板凳
逢dududu必shu| | 2024-8-17 01:01 | 只看该作者
cmd.h: 头文件定义了命令处理器的结构体和全局变量。

使用特权

评论回复
地板
Amazingxixixi| | 2024-10-30 16:37 | 只看该作者
串口调试好了基本上就可以实现互通了

使用特权

评论回复
5
地瓜patch| | 2024-10-30 18:25 | 只看该作者
不错,用的查询接收

使用特权

评论回复
6
中国龙芯CDX| | 2024-10-30 19:06 | 只看该作者
单线程死循环能很好执行指令并返回结果

使用特权

评论回复
7
小夏天的大西瓜| | 2024-10-30 20:14 | 只看该作者
串口调试非常方便

使用特权

评论回复
8
小小蚂蚁举千斤| | 2024-10-30 22:39 | 只看该作者
UART_Transmit_and_Receive串口基础通讯案例

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

36

帖子

0

粉丝