本帖最后由 单片小菜 于 2022-5-25 17:26 编辑
#申请原创# @21小跑堂
引:
项目需求:将主机数据通过串口写到外部U盘中,主机只有一个串口可以使用,无法扩展别的接口。
项目周期:一周完成。
项目预算:20元以内
一、方案确定:
针对这个需求以及时间,想到了沁恒。或许有类似的芯片可以使用,寻求技术支持之后,推荐使用CH376来实现,申请了开发板、三个样片,第二天就拿到手。配合需要的东西。
二、开发板验证
拿到开发板之后,先把几个关键的资料搞到手,最好的方式就是官网直接下载,绝对是一手资料,原理图、PCB、丝印图、上位机验证软件、芯片手册、开发板说明。
开发板原理图:
丝印图:
工具包:
三、动手开做
使用上位机软件进行仿真串口,直接写到U盘中数据。跳线帽要选择正确,按照手册上的指引进行选择。
打开上位机软件
选择串口按步骤进行选择,查看COM口号,打开串口,然后获取版本号,第一部分很重要,由于CH376有多种模式,串口方式、SPI方式、U盘方式、SD卡方式等等。在这里需要设置模式6,属于外接U盘方式。
发送指令之后,我们会看见开发板的红灯亮了。
磁盘初始化部分,检测磁盘是否就绪,发送检测磁盘就绪指令,在信息栏返回如下指令:
- 16:55:19 磁盘就绪:0x14 磁盘信息: SanDisk Cruzer Blade 1.00
证明磁盘状态良好。我们对文件操作。这里有创建文件,打开文件,设置偏移写数据等等;
下面都有很好的说明性的文字。我们试着创建\AABBCC.TXT文件,然后写入123456.
可以看到下面写入成功了,只要返回值为0x14,证明成功了。
- 16:55:19 磁盘就绪:0x14 磁盘信息: SanDisk Cruzer Blade 1.00
- 16:58:23 创建文件名: \AABBCC.TXT 返回值:0x14
- 16:58:27 请输入文件名 8+3格式 字母必须大写
- 16:58:33 打开文件名: \AABBCC.TXT 返回值:0x14
- 16:58:41 写文件长度:6 返回值:0x14
我们将U盘接到电脑中,查看是否真的建立文件,并写入了内容。
打开AABBCC.TXT文件
实验成功。
四、抓包
由于项目紧急,上位机实现的功能,正是项目所需要的,可以用最简单的方式进行。安装虚拟串口软件(VSPD)。模拟串口发出的数据。
设置为COM4和COM5端口,然后打开软件和串口调试助手
波特率设置一样9600,8,N,1
我们逐条进行解析操作,初始化部分是必不可少的。
创建文件
- 57 AB 2F 5C 41 41 42 42 43 43 2E 54 58 54 00 57 AB 34
打开文件
- 57 AB 2F 5C 41 41 42 42 43 43 2E 54 58 54 00 57 AB 32
关闭文件
五、进行单片机串口代码编写
这里以沁恒的CH32F103C8T6为例进行书写:
串口初始化
- static void NVIC_Configuration(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
-
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- }
- void USART2_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- USART_InitTypeDef USART_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
-
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
- USART_InitStructure.USART_BaudRate = 9600;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_No ;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- USART_Init(USART2, &USART_InitStructure);
-
- NVIC_Configuration();
-
- USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
-
- USART_Cmd(USART2, ENABLE);
- }
数据发送代码编写,可以参考开发包里面的51例程进行改写。这里就不赘述了。
六、打板、加急、焊接、验证
按照提供的封装、原理图、PCB图进行CH376的PCBA制作,加急,项目完结,总共用了4天时间。包括调试,提前完成任务。
|