OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 576|回复: 0

《M144Z-M3最小系统板使用指南——STM32F103版》第五十六章 USB虚拟串口(Slave)实验

[复制链接]

1117

主题

1128

帖子

2

精华

超级版主

Rank: 8Rank: 8

积分
4667
金钱
4667
注册时间
2019-5-8
在线时间
1224 小时
发表于 2024-5-29 16:45:53 | 显示全部楼层 |阅读模式
本帖最后由 正点原子运营 于 2024-5-28 17:04 编辑

第五十六章 USB虚拟串口(Slave)实验
1)实验平台:正点原子 M144Z-M3 STM32F103最小系统板

2) 章节摘自【正点原子】M144Z-M3最小系统板使用指南——STM32F103版


4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boar ... _mini_sysboard.html

5)正点原子官方B站:https://space.bilibili.com/394620890

6)正点原子STM32技术交流QQ群:725095144

155537c2odj87vz1z9vj6l.jpg

155537nfqovl2gg9faaol9.png

本章将介绍使用STM32F103作为USB从设备,虚拟出串口与PC进行通信。通过本章的学习,读者将学习到STM32F103作为USB从设备虚拟出串口的使用。
本章分为如下几个小节:
56.1 硬件设计
56.2 程序设计
56.3 下载验证

56.1 硬件设计
56.1.1 例程功能
1. 回显虚拟串口接收到的数据
2. 每间隔一定时间,虚拟串口发送一段提示信息
3. LED0闪烁,提示程序正在运行

56.1.2硬件资源
1. LED
       LED0 - PB5
2. 正点原子2.8/3.5/4.3/7/10寸TFTLCD模块
3. USB
       USB_DM - PA11
       USB_DP - PA12

56.1.3 原理图
请见第60.1.3小节中USB接口与MCU的连接原理图的相关内容。

56.2 程序设计
56.2.1 ST的USB设备驱动库
请见第60.2.1小节中ST的USB设备驱动库的相关内容。

56.2.2 实验应用代码
本章实验的应用代码,如下所示:
  1. int main(void)
  2. {
  3.     /* 仅保留关键代码,其余代码省略 */
  4.    
  5.     /*初始化USB */
  6.    USBD_Init(&USBD_Device, &VCP_Desc, 0);
  7.     /* 添加类 */
  8.    USBD_RegisterClass(&USBD_Device, USBD_CDC_CLASS);
  9.     /* 为CDC类添加回调函数 */
  10.    USBD_CDC_RegisterInterface(&USBD_Device, &USBD_CDC_fops);
  11.     /* 开启USB */
  12.    USBD_Start(&USBD_Device);
  13.    
  14.     while(1)
  15.     {
  16.          /* 连接状态改变 */
  17.          if (device_sta != g_device_state)
  18.          {
  19.              if (device_sta == 1)
  20.              {
  21.                  lcd_show_string(30, 110, 200, 16, 16, "USB Connected   ", RED);
  22.                  LED1(0);
  23.              }
  24.              else
  25.              {
  26.                  lcd_show_string(30, 110, 200, 16, 16, "USB Disconnected ", RED);
  27.                  LED1(1);
  28.              }
  29.              device_sta = g_device_state;
  30.          }
  31.          
  32.          /* 接收到数据 */
  33.          if (g_usb_usart_rx_sta & 0x8000)
  34.          {
  35.              len = g_usb_usart_rx_sta & 0x3FFF;
  36.              usb_printf("\r\n您发送的消息为:\r\n");
  37.              cdc_vcp_data_tx(g_usb_usart_rx_buffer, len);
  38.              usb_printf("\r\n\r\n");
  39.              g_usb_usart_rx_sta = 0;
  40.          }
  41.          else
  42.          {
  43.              if ((times % 5000) == 0)
  44.              {
  45.                  usb_printf("\r\n正点原子 \
  46.                              M144Z-M3最小系统板STM32F103版 \
  47.                              USB虚拟串口实验\r\n");
  48.                  usb_printf("正点原子@ALIENTEK\r\n\r\n\r\n");
  49.              }
  50.              if ((times % 200) == 0)
  51.              {
  52.                  usb_printf("请输入数据,以回车键结束\r\n");
  53.              }
  54.              if ((times % 30) == 0)
  55.              {
  56.                  LED0_TOGGLE();
  57.              }
  58.              times++;
  59.          }
  60.          
  61.          delay_ms(10);
  62.     }
  63. }
复制代码
从上面的代码中可以看出,在调用完USB设备驱动库中相关的初始化函数后便等待USB虚拟串口接收数据,若接收到数据变通过函数usb_printf()将数据发送出去,usb_printf()的实现如下所示:
  1. /**
  2. *@brief   通过 USB 格式化输出函数
  3. *@note    通过USB VCP实现printf输出
  4. *          确保一次发送数据长度不超USB_USART_REC_LEN字节
  5. *@param   格式化输出
  6. *@retval  无
  7. */
  8. void usb_printf(char *fmt, ...)
  9. {
  10.     uint16_t i;
  11.    va_list ap;
  12.    va_start(ap, fmt);
  13.    vsprintf((char *)g_usb_usart_printf_buffer, fmt, ap);
  14.    va_end(ap);
  15.     i = strlen((const char *)g_usb_usart_printf_buffer);   /* 此次发送数据的长度 */
  16.    cdc_vcp_data_tx(g_usb_usart_printf_buffer, i);         /* 发送数据 */
  17. }
复制代码
56.3 下载验证
在完成编译和烧录操作后,可以看到LCD上显示了本实验的相关实验信息,此时可以将开发板通过USB接口与PC进行连接,待PC自动完成驱动安装后,便可看到PC上多出了一个端口设备,此时可以通过串口调试助手与该端口进行通信,可以看到无论串口调试助手发送任何数据,都会在串口调试助手的接受区看到发送出去的数据,这是因为STM32F103将虚拟串口接收到的数据通过虚拟串口发送回去,实现了“回显”的效果。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 18:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表