[单片机芯片] 【CH32X035评估板测评】+ USB_Serial

[复制链接]
 楼主| 袁胜富 发表于 2023-10-14 22:43 | 显示全部楼层 |阅读模式
本帖最后由 袁胜富 于 2023-11-13 22:59 编辑

一、概述

CH32X035拥有设备控制器(USBFS),可以使用其为USB_Serial设备,即USB转模拟UART设备,直接使用USB模拟UART,直接省去CH340等USB-to-UART。本例程使用官方例程修改而来。
为了和大家分享,于是乎发表了这篇文章。

二、原理分析

定义环形缓冲队列对象和接收Buff:
RingBufferUSB_RX_RingBuff;
uint8_t USB_RX_Buff[1024];
修改ch32x035_usbfs_device.c
修改voidUSBFS_Device_Endp_Init( void )
c11f12651981c00b7195426a0d2fcdd0
修改voidUSBFS_IRQHandler( void )
9d3a22ba57579b387783afc96a44d511


三、代码

USBSerial.h代码:
  1. /*
  2. <font _mstmutation="1" _msttexthash="13354253757" _msthash="361">* USBSerial.h
  3. * * 创建时间:2023年10月14日
  4. *
  5. 作者:jeffery。袁
  6. */

  7. #ifndef BSP_USBSERIAL_H_
  8. #define BSP_USBSERIAL_H_

  9. #include “ch32x035_usbfs_device.h”#include “usb.h”


  10. typedef struct
  11. { void (*begin)(void); uint8_t (*read)(void); uint16_t (*available)(void); void (*writebyte)(uint8_t ch);
  12. void (*writebytes)(uint8_t data[],uint16_t len);




  13. void (*printf)(char *fmt,...);
  14. }USBSerial_Typedef;

  15. 外部USBSerial_Typedef USBSerial;
  16. void USBSerial_Begin(void);
  17. uint8_t USBSerial_ReadByte(无效);
  18. uint16_t USBSerial_Available(无效);
  19. 空隙USBSerial_WriteByte(uint8_t通道);
  20. void USBSerial_WriteBytes(uint8_t *data,uint16_t len);
  21. 无效USBSerial_print(字符 *fmt,...);
  22. #endif /* BSP_USBSERIAL_H_ */</font>


USBSerial.c代码:
  1. /*
  2. <font _mstmutation="1" _msttexthash="53669864885" _msthash="363"><font _mstmutation=“1” _msttexthash=“45974931899” _msthash=“400”>* USBSerial.c
  3. * * 创建于: 2023年10月14日
  4. * 作者: 杰弗里.元
  5. *
  6. /

  7. #ifndef BSP_USBSERIAL_C_#define BSP_USBSERIAL_C_


  8. #include “USBSerial.h”#include “stdarg.h”#include “string.h”#include “stdio.h”#include “ringbuffer.h”#include “ch32x035_usbfs_device.h”





  9. USBSerial_Typedef USBSerial;
  10. void USBSerial_Begin(void)
  11. {
  12. /*初始化ringbuffer相关的配置*/
  13. rbInitialize(&USB_RX_RingBuff, USB_RX_Buff, sizeof(USB_RX_Buff));
  14. USBFS_RCC_Init( );
  15. USBFS_Device_Init( 启用 , PWR_VDD_SupplyVoltage());
  16. }

  17. uint8_t USBSerial_ReadByte(void)
  18. {
  19. return rbPop(&USB_RX_RingBuff);
  20. }

  21. uint16_t USBSerial_Available(void)
  22. {
  23. return rbGetCount(&USB_RX_RingBuff);
  24. }

  25. void USBSerial_WriteByte(uint8_t ch)
  26. {
  27. 静态uint8_t数据[1];
  28. 数据[0]=ch;
  29. if(USBFSConActive == 0)
  30. {
  31. USBFS_Endp_DataUp(DEF_UEP3,Data,1,0);

  32. }

  33. void USBSerial_WriteBytes(uint8_t *data,uint16_t len)
  34. {
  35. if(USBFSConActive == 0)
  36. {
  37. USBFS_Endp_DataUp(DEF_UEP3,data,len,0);

  38. }

  39. /** * 自动格式输出 */
  40. void USBSerial_print(char

  41. *fmt,...)
  42. {
  43. 静态字符 T1_Bufferr[128]; uint16_t len; va_list ap;


  44. va_start(AP,FMT);
  45. vsprintf(T1_Bufferr,fmt,ap);va_end(美联社);len=strlen(T1_Bufferr);if(USBFSConActive == 0)
  46. {
  47. USBFS_Endp_DataUp(DEF_UEP3,T1_Bufferr,len,0);



  48. }}

  49. //结构体初始化
  50. USBSerial_Typedef USBSerial =
  51. {
  52. USBSerial_Begin, USBSerial_ReadByte, USBSerial_Available, USBSerial_WriteByte, USBSerial_WriteBytes,




  53. USBSerial_print
  54. };

  55. #endif /* BSP_USBSERIAL_C_ */</font></font>


Main.c代码:

  1. <font _mstmutation="1" _msttexthash="725334571" _msthash="365"><font _mstmutation="1" _msttexthash="559860535" _msthash="402">#include "USBSerial.h"
  2. uint8_t rx_buff[128];
  3. int main(void)
  4. {
  5.     int i=0;
  6.     char CH;
  7.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  8.     SystemCoreClockUpdate();
  9.     Delay_Init();
  10.     USART_Printf_Init(115200);
  11.     USBSerial.begin();//虚拟串口初始化
  12.     printf("SystemClk:%d\r\n", SystemCoreClock);
  13.     printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );

  14.     while(1)
  15.     {
  16.         if(USBSerial.available())
  17.         {
  18.             CH = USBSerial.read();
  19.             rx_buff[i] = CH;
  20.             i++;
  21.             if(CH == '#')
  22.             {
  23.                 i = 0;
  24.                 USBSerial.printf("%s\r\n",rx_buff);
  25.                 memset(rx_buff,0,128);</font></font>
  26.             }
  27.         }
  28.     }
  29. }




四、展示


cf1d2ef281494640dd5c2a7b90a63b76
e1787a56474127685d893fe7b504a28a
388f9f1a571ad016d6fb7c373cf54b8f
工程源码在附件中 48067655239bd8af6c.png




CH32X035C8T6_USBSerial.zip

599.19 KB, 下载次数: 40

xdqfc 发表于 2023-11-13 17:09 | 显示全部楼层
把这个文件下载后,编译是通不过的,麻烦楼主给一份完整的文件吧。
 楼主| 袁胜富 发表于 2023-11-13 22:58 | 显示全部楼层
xdqfc 发表于 2023-11-13 17:09
把这个文件下载后,编译是通不过的,麻烦楼主给一份完整的文件吧。

你错了,我这儿可以啊
xdqfc 发表于 2023-11-14 16:08 | 显示全部楼层
袁胜富 发表于 2023-11-13 22:58
你错了,我这儿可以啊

又好了,奇怪了,谢谢哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

163

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部

32

主题

163

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部