使用UART串口下调试CH376芯片

2023-05-16

CH376是文件管理控制芯片,用于单片机系统读写U 盘或者SD 卡中的文件。CH376支持USB设备方式和USB主机方式,并且内置了USB通讯协议的基本固件,内置了处理Mass-Storage海量存储设备的专用通讯协议的固件,内置了SD卡的通讯接口固件,内置了FAT16和FAT32以及FAT12文件系统的管理固件,支持常用的USB存储设备(包括U盘/USB硬盘/USB闪存盘/USB读卡器)和SD卡(包括标准容量SD卡和高容量HC-SD卡以及协议兼容的MMC卡和TF卡)。
有关U 盘和SD 卡文件读写的例子主要由以下文件组成:
① 硬件抽象层,即I/O 接口子程序,由单片机与CH376 芯片之间的通讯接口方式决定
HAL.H 硬件抽象层头文件
HAL_BASE.C 硬件抽象层基本子程序,包括延时子程序,需要根据单片机实际速度修改I/O 接口子程序,必须根据实际的通讯方式选择以下其中一种并按实际硬件和参数进行修改:
UART_HW.C 是硬件异步串口连接方式,支持波特率从9600bps 到3Mbps。
② 文件系统层,将常用命令进行打包,提供了常用的文件管理子程序和一些不太常用的子程序
FILE_SYS.H 文件系统层头文件,子程序声明等;
FILE_SYS.C 文件系统层子程序,子程序源程序等,在第5 节有详细说明。
③ 辅助调试子程序,用于打印输出调试信息,以便检查程序运行结果,正式产品中必须删除之
DEBUG.H 辅助调试子程序头文件;
DEBUG.C 辅助调试子程序源程序等。
正常使用的主要是硬件抽象层和文件系统层,并且要做相应的修改。对于辅助调试子程序,主要是对几个程序段的监视,但是必须要有两个及以上的通讯串口,只有一个串口需要禁用调试输出。
在硬件层,HAL_BASE.c中需要根据单片机的频率修改延时的设置,粗略设置即可。
在UART_HW.C中,需要修改以下几个地方:
//#defineCH376_INT_WIRE P1_0 /假定CH376的INT#引脚,如果未连接那么也可以通过查询串口中断状态码实现 /如果在评估板上没有使用INT端口,直接注释掉,使用查询即可。

#define    UART_INIT_BAUDRATE   9600   /*默认通讯波特率9600bps,建议通过硬件引脚设定直接选择更高的CH376的默认通讯波特率 */
//#define  UART_WORK_BAUDRATE   57600  /*正式通讯波特率57600bps */若不修改波特率,建议使用初始波特率,调试成功后再修改通讯波特率。
void   CH376_PORT_INIT( void )  /*由于使用异步串口读写时序,所以进行初始化*/
{
/* 如果单片机只有一个串口,那么必须禁止通过串口输出监控信息 */
    SCON = 0x50;
    PCON = 0x80;
    TL2 = RCAP2L = 0 -11059200/32/UART_INIT_BAUDRATE;
    TH2 = RCAP2H = 0xFF;
    T2CON = 0x34;  /*定时器2用于串口的波特率发生器 */
    RI = 0;
}   

设定单片机的UART串口通讯配置,对于51,只需修改频率即可,其他单片机根据使用串口的数据手册指导,修改该文件内的所有的查询位。直到可以正常通讯。
在FILE_SYS.C中,注释掉所有的 xEndCH376Cmd( );函数,定义

#define    EN_DIR_CREATE,定义 EN_DIR_CREATE用于提供新建多级子目录的子程序,默认是不提供 。
在主函数中写如下代码:
#include"string.h"
#include"reg52.h"
#include"HAL.H"
#include"FILE_SYS.h" 
UINT8 idata buf[64];
sbit P1_2 = P1^2;       //定义IO口,便于调试中的监视程序运行状态
sbit P1_3 = P1^3;
sbit P1_4 = P1^4;
sbit P1_5 = P1^5;
sbit P1_6 = P1^6;
sbit P1_7 = P1^7;



void main()
{
    UINT8  s= 0;
    UINT32 i=0;

UINT8 FileCreate(UINT8 mFileName[],UINT8mFileType);
UINT8 ReadStatus();

P1_2 = 1;
P1_3 = 1;
P1_4 = 1;
P1_5 = 1;
P1_6 = 1;
P1_7 = 1;

s = mInitCH376Host();   //初始化
if(CH376DiskConnect() == USB_INT_SUCCESS)
   P1_2 = 0;

s = CH376DiskMount();    //挂载磁盘
if( s == USB_INT_SUCCESS)
   P1_4 = 0;
CH376FileClose(FALSE);
CH376FileCreatePath("/ABX.TXT");
if(s == USB_INT_SUCCESS)
   P1_5 = 0;
strcpy( buf, "lkokl" );
s = CH376ByteWrite( buf, strlen(buf), NULL);  /*以字节为单位向当前位置写入数据块 */
s = CH376FileClose( TRUE );  /*关闭文件,对于字节读写建议自动更新文件长度 */
if(s == USB_INT_SUCCESS)
   P1_6 = 0;

/**指令集操作文件段**


CH376_PORT_INIT( );
xWriteCH376Cmd( CMD11_CHECK_EXIST );
xWriteCH376Data( 0x22 );
s = xReadCH376Data( );
if ( s != 0xdd ) P1_4 = 0;  //出错

xWriteCH376Cmd( CMD11_SET_USB_MODE );  //设备USB工作模式
xWriteCH376Data( 0x06 );
s = xReadCH376Data( );
if ( s != CMD_RET_SUCCESS ) P1_4 = 0;  //出错

while(1)
{

   while(1)
   {
       if(Query376Interrupt())
       {  
          xWriteCH376Cmd( CMD01_GET_STATUS);
          s = xReadCH376Data( );

          if(s==USB_INT_CONNECT)
          {
              P1_5 = 0;
              break;
          }
       }

       mDelaymS(50);
   }

   mDelaymS(600);

   s = CH376DirCreate("/TTXX");    //创建目录
   if(s == USB_INT_SUCCESS)
       P1_2 = 0;
   CH376FileCreate("POI.TXT");     //创建文件
   strcpy( buf, "lkokl" );
   s = CH376ByteWrite( buf, strlen(buf),NULL );  //以字节为单位向当前位置写入数据块
   s = CH376FileClose( TRUE );  //关闭文件,对于字节读写建议自动更新文件长度
*/
   while(1);

}
建议使用指令进行基本的创建文件,选择USB模式等操作,了解芯片对U盘的操作模式,便于以后的使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用UART串口下调试CH376芯片 的相关文章

  • Jetson nano串口的使用——UART

    UART串口使用两条杜邦线就可以实现数据发送和接收 xff0c 可以很方便的与其他扩展进行数据连接 xff0c 比如微雪的L76X GPS HAT就可以直接连接40Pin的GPIO接口通过UART串口进行数据传递 接下来具体说明Jetson
  • STM32串口接受和发送数据的程序(USART/UART)

    本实验中 STM32通过串口1和串口2上位机对话 xff0c STM32通过串口1在收到上位机发过来的字符串 以回车换行结束 后 xff0c 通过串口2原原本本的返回给上位机 串口 xff08 USART UART xff09 通信配置详解
  • 总线协议一(UART/RS232/RS485/IIC/SPI)

    目录 基础概述 xff1a 一 UART xff08 为串口通信方式 xff09 二 RS232协议 三 RS485协议 四 I2C总线协议 五 SPI总线 六 I2C和SPI的区别 基础概述 xff1a 总线的本质就是一根导线 xff0c
  • (十三)STM32——串口通信(UART)

    目录 学习目标 内容 通信方法 并行通信 串行通信 通信方向 通信方式 UART 特点 串口参数 通信流程 寄存器 USART SR USART DR USART BRR 过程 代码 运行结果 运行结果 遇到的问题 总结 学习目标 本节我们
  • WK2114(一个异步串口UART 扩展为4个串口UART)

    WK2114是UART接口的4通道UART器件 WK2114将一个标准3线异步串口 xff08 UART xff09 扩展成为4个增强 功能串口 xff08 UART xff09 主接口UART在数据传输时主接口的UART可以通过引脚配置为
  • 1、串口(UART/COM/TTL/RS232/RS485)

    目录 串口简介 串行通讯制式 UART 2 1 简介 2 2 电平标准 TTL RS232 RS485 2 3 电平转换 xff08 重点讲解RS232 TTL xff09 USB转TTL USB转RS232 USB转RS485 RS232
  • UART

    一 S3C2410内置的UART控制器 S3C2410内部具有3个独立的UART控制器 xff0c 每个控制器都可以工作在Interrupt xff08 中断 xff09 模式或DMA xff08 直接内存访问 xff09 模式 xff0c
  • UART, IIC, SCI, SPI, 232, 485, 422, CAN, SDIO, GPIO, MODBUS, TCP/IP汇总简介

    UART IIC SCI SPI 232 485 422 CAN SDIO GPIO MODBUS TCP IP汇总简介 UART xff1a Universal Asynchronous Receiver Transmitter xff1
  • UART详解

    UART 通用异步收发传输器 xff08 Universal Asynchronous Receiver Transmitter xff0c 通常称作UART xff09 是一种串行异步收发协议 xff0c 应用十分广泛 UART工作原理是
  • 串口通信协议---UART

    串口通信的分类 UART属于串行 异步 全双工通信 串行通信与并行通信 根据传输数据的位宽 xff0c 串口通信可分为串行通信与并行通信 xff0c 串行通信是指设备之间通过少量数据信号线 一般是 8 根以下 xff0c 地线以及控制信号线
  • HAL_UART_IRQHandler(UART_HandleTypeDef *huart)里面的中断接收函数(作者自己生成的函数代码,中间有关闭接收中断,但是原子教程中没有关闭中断的语句注意区别)

    前言 1 UART Receive IT 2 HAL UART Receive 3 HAL UART Receive IT 前言 看了很长时间串口中断的HAL库 xff0c 最容易混淆的就是函数的名称 xff0c 主要集中在UART Rec
  • UART波形分析

    1 逻辑分析仪解码配置 波特率 xff1a 9600 2 逻辑分析仪结果 3 波特率计算 1除以9600 xff0c 结果如下 xff08 e 4表示10的负4次方 xff09 表示 0 00010416秒 61 104 16 微秒 找到发
  • UART串口通信协议概述

    1 UART协议介绍 UART是一种通用串行数据总线 xff0c 用于异步通信 UART能实现双向通信 xff0c 在嵌入式设计中 xff0c 常用于主机与辅助设备通信 UART包括RS232 RS449 RS423等接口标准规范和总线标准
  • 串口发送通信---UART发送---STM32F4实现

    串口发送程序配置过程 xff08 HAL库 xff09 初始化串口相关参数 xff0c 使能串口 HAL StatusTypeDef span class token function HAL UART Init span span cla
  • STM32—UART中断收发 Day4

    软件 xff1a STM32CubeMX xff0c MDK ARM 硬件 xff1a 蓝桥杯物联网Lora开发板 xff0c 板载芯片STM32L071 一 STM32CubeMX配置 1 先在连接 xff08 Connectivity
  • GD32E23x的USART被断点打断后重新运行,会一直进入中断的问题

    GD32E23x的USART被断点打断后重新运行 会一直进入中断的问题 GD32E230K8单片机USART0连接一个从机芯片 该芯片每100ms发来一串16Bytes的数据 MCU中断接收 没有开启FIFO 只开启了RBNE 接收缓存非空
  • 【UART】Verilog实现UART接收和发送模块

    目录 写在前面 UART 工作原理 UART 接收部分 UART RX 模块图 UART RX 时序图 Verilog 实现 UART RX 模块 UART 发送部分 UART TX 模块图 UART TX 时序图 Verilog 实现 U
  • 使用HAL库开发STM32:UART基础使用

    文章目录 目的 基础说明与初始化 基础说明 初始化 数据接收和发送 轮询方式 中断方式 DMA方式 其它说明 总结 目的 UART 异步串口 是单片机非常常用的一个功能 一般用作设备或模块间通讯的一种方式 通常所说的232或是485通讯从写
  • 启用 DMA 的 UART Tx 模式

    我已经为 UART 在传输模式下编写了一个简单的设备驱动程序 并启用了 DMA 和中断 我使用的硬件是 omap 4460 pandaboard 其中加载了 Linux 3 4 下面我分享一下相关部分的代码 在开放阶段 dma map io
  • 英特尔伽利略裸机 UART

    我想编写一些 hello world 程序裸机申请于英特尔伽利略木板 当然 使用 UEFI 打印文本 到 UART 1 效果很好 但我想 手动 访问 UART 而不需要 UEFI 的任何帮助 在 QEMU 中我的代码运行良好 h file

随机推荐

  • 利用ROS实现PX4 offboard板外控制

    基于ROS Melodic xff0c 以px4开发者手册实例程序为例 xff0c 实现gazebo下无人机起飞两米悬停 xff0c 具体操作分为三步 xff1a 1 创建工作空间 xff0c 建立offboard包 2 构建mavros
  • Jetson TX2开发板配置Intel T265环境的必要解决方式

    在Jetson TX2配置T265相关依赖时会发生错误 xff0c 因此需要提前对相关参数进行设置 xff0c 主要要将网络设置里面的相关参数改成下图的配置 xff1a
  • pixhawk日志ulg格式转matlab数据csv格式

    1 windows下打开Anconda Prompt xff0c 执行pip install pyulog安装pyulog包 2 在日志文件所在文件夹下执行ulog2csv 文件名 ulg即可生成相关的csv文件
  • 悲催的秋招之路

    个人情况 双非工科硕 民办本 专科起点 基础不行 专业知识不扎实 无技术无论文无项目 投递记录 企业名称 投递时间 岗位1 岗位2 岗位3 岗位4 国电南自 2021 5 19 嵌入式软件研发工程师 民生银行 2021 5 26 金融科技方
  • Matlab读取EXCEL文本中的数据并绘制二维三维曲线图脚本

    Matlab读取EXCEL文本中的数据并绘制二维三维曲线图需要将EXCEL保存为CSV格式 xff0c 然后取数据成矩阵进行处理 转CSV的方式 xff1a pixhawk日志ulg格式转matlab数据csv格式 1 导入文件 span
  • 零基础教会你用github创建个人博客网站

    1 创建账号 进入github网站 xff0c 在网站首页右上角进行用户注册 2 填写相关信息 按照提示填写相关信息完成用户注册 3 搭建个人博客库 进入个人主页 xff0c 在右上角选择 43 好 xff0c 进入 new reposit
  • SV2-4G移动终端使用配置与使用

    一 硬件连接 1接位置天线 xff0c 2接方向天线 xff0c 3接4G天线 xff0c 4接GPS配置专用线 xff0c 5接4G配置专用线 二 运行状态识别 1处为指示灯 xff08 运行 SIM卡 网络 电源 xff09 xff0c
  • yapi插件开发及安装的一些备注

    yapi官方文档有些缺失 xff0c 这里做一下补充 xff0c 官方文档地址 xff1a https hellosean1025 github io yapi documents redev html 插件开发需要调试 xff0c 这个需
  • VSCode修改编辑器(代码窗口)背景色

    VSCode 的背景色是放在主题里面定义的 xff0c 所以在vscode的设置中无法修改到编辑器也就是代码窗口的背景色 xff0c 对应想要自定义编辑器背景的同志们来说 xff0c 可以通过修改主题文件来实现 xff0c 操作起来也并不复
  • ros下tcp通信的过程

    ros框架下的tcp通信的过程 博主在编写一个需要通过wifi传输两个整数和一个状态的问题中 xff0c 通过构建ros xff08 Ubuntu16 04 框架下的tcp c 43 43 通信过程解决了问题 一 ros串口通信的实现 首先
  • Ecos操作系統查看进程信息

    由于最近公司用到了ecos操作系统 xff0c 所以简单的了解了一下这个RTOS xff0c 其相关的社区资源较少 xff0c 国内基本不用 xff0c 这里结合手册整理了一部分的内容 本文章主要两部分 xff0c 一是建立基本的测试进程
  • 在vmware上运行ecos

    目前关于在vmware虚拟机上运行ecos的文章应该是有 xff0c 我会放到文章最后面的资源链接 xff0c 所以写这篇文章的目的有两点 xff0c 一是补充原有文章的不足 xff0c 在实际操作中遇到的困难 二是提供其中相关的资源链接
  • PROFINET协议解析-DCP

    目录 一 设置 Set xff08 请求 xff09 二 设置Set xff08 应答 xff09 三 识别 Identify xff08 请求 xff09 四 识别 Identify xff08 应答 xff09 DCP全称Discove
  • PROFINET协议-DCP实践

    这里就上篇文章 Profinet协议解析 DCP 内容进行实践 xff0c 通过实验验证各操作的准确性 xff0c 并且也介绍一些基本的通信分析方法 xff0c 不必使用昂贵的抓包工具 xff08 某东200左右 xff09 xff0c 使
  • Profinet协议解析-过程数据

    新的一篇文章 xff0c 开始讲下一个点 过程数据 过程数据 xff0c 顾名思义 xff0c 就是一直循环传输的数据 xff0c 在整个过程中不间断的传输 xff0c 其每次传输的时间称为同步周期 这点类似于Ethercat中的PDO数据
  • 无题

    漫无目的的写点东西 很多事情在文字面前显得特别无力 xff0c 又不得不用它来描述记录 记得读本科那会儿 xff0c 机械专业被称为一个万金油的行业 xff0c 所以宁愿用一本的分数去一个二本学校 xff0c 也要报机械专业 xff0c 谁
  • PROFINET的时钟同步(一)

    最近发现CSDN的编辑工具越来越不好用了 xff0c 直接用word导出PDF转图片 xff0c 发上来 清晰度受CSDN的影响 xff0c 不是很清楚
  • PROFINET 链路简述

    如上为 Profinet 的简易收发链路图 xff0c 其中收发各有四条路径 xff0c 三个中继桥 租用分别如下 xff1a RX 端 xff1a CTRL xff1a 控制管理帧的通道 xff0c 例如 LLDP 的邻居协议相关帧 xf
  • DSP中GPIO位域

    在TMS320F2812中 xff0c 对于程序中寄存器的名称是如何映射到物理地址的 xff0c 这里做一下详细的讲解 主要应用到三个文件 xff1a CMD h DSP28 GLobalVariableDefs c xff0c 其中CMD
  • 使用UART串口下调试CH376芯片

    CH376是文件管理控制芯片 xff0c 用于单片机系统读写U 盘或者SD 卡中的文件 CH376支持USB设备方式和USB主机方式 xff0c 并且内置了USB通讯协议的基本固件 xff0c 内置了处理Mass Storage海量存储设备