当前位置: 首页 > news >正文

当当网的网站建设目标是/网站营销

当当网的网站建设目标是,网站营销,杭州建设网站的公司,想做网站制作运营注册什么公司核实STM32F103 USB实现虚拟串口 最近买了一个STM32F103C8T6最小核心板,使用CubeIDE无法识别该芯片,发现该芯片的flash是128Kbytes,ST的标准库是64Kbytes,奇怪啊!也许是国产替代的,国产化太先进了,导…

STM32F103 USB实现虚拟串口

最近买了一个STM32F103C8T6最小核心板,使用CubeIDE无法识别该芯片,发现该芯片的flash是128Kbytes,ST的标准库是64Kbytes,奇怪啊!也许是国产替代的,国产化太先进了,导致原厂落后了,不认识先进的东西了。
只好又在某宝买了5.5元的STM32F103C6T6最小核心板,CubeID环境下正常工作和调试。感谢万能的某宝!最便宜的东西才能工作正常,好无语啊!

实验环境

STM32F103C6T6A最小系统板, CubeIDE 1.10.1, ST-LINK;在这里插入图片描述

实验目的

实现USB的串口数据传输;

操作步骤

  1. cubeIDE建立工程并生成代码。
  2. 设置晶振RCC在这里插入图片描述
  3. 设置SYS, 调试方式在这里插入图片描述
  4. 设置USB,激活USB在这里插入图片描述
  5. 设置Middleware, USB vitrual port, 在这里插入图片描述
  6. 保存并generate code,进行编译一遍,通常是不能编译通过的。
  7. 修改usb_cdc_if.h 文件
/* USER CODE BEGIN INCLUDE */#define USB_REC_LEN   256 //定义USB串口接收字节数extern uint8_t USB_RX_BUF[USB_REC_LEN];//接收缓冲extern uint16_t USB_RX_STA;//接收标记/* USER CODE END INCLUDE */`
  1. 设修改usb_cdc_if.c文件 在这里插入图片描述
/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/uint8_t USB_RX_BUF[USB_REC_LEN];//接收缓冲,�?大USB_REC_LEN个字�?.uint16_t USB_RX_STA=0;//接收状�?�标记(接收到的有效字节数量�?
/* USER CODE END PV */

修改接收函数代码

static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{if(*Len<USB_REC_LEN)//判断收到数据量是否小于寄存器上限{uint16_t i;USB_RX_STA = *Len;//将数据量值放入标志位for(i=0;i<*Len;i++)//循环USB_RX_BUF[i] = Buf[i];//将数据内容放入数据寄存器}USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);  //将接收数组buff清空USBD_CDC_ReceivePacket(&hUsbDeviceFS);  //再次虚拟串口接收return (USBD_OK);/* USER CODE END 6 */
}

修改发送函数代码

uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
{uint8_t result = USBD_OK;/* USER CODE BEGIN 7 */uint32_t TimeStart = HAL_GetTick();USBD_CDC_HandleTypeDef *hcdc =  (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData;//if (hcdc->TxState != 0) return  USBD_BUSY;while(hcdc->TxState){if(HAL_GetTick()-TimeStart > 10)return USBD_BUSY;elsebreak;}USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf,  Len);result =  USBD_CDC_TransmitPacket(&hUsbDeviceFS);TimeStart = HAL_GetTick();while(hcdc->TxState){if(HAL_GetTick()-TimeStart > 10)return USBD_BUSY;}/* USER CODE END 7 */return result;
}

添加输出函数

#include <stdarg.h>
void USB_printf(const char *format, ...)//USB模拟串口的打印函�?
{va_list args;uint32_t length;va_start(args, format);length = vsnprintf((char  *)UserTxBufferFS, APP_TX_DATA_SIZE, (char  *)format, args);va_end(args);CDC_Transmit_FS(UserTxBufferFS, length);
}
  1. 修改main.c
    添加include文件
	/* USER CODE BEGIN Includes */
#include "../../USB_DEVICE/App/usbd_cdc_if.h"/* USER CODE END Includes */ 

修改main函数的while循环

  /* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 *///USB模拟串口的查寻接收处理if(USB_RX_STA!=0)//判断是否有{//USB_printf("USB_RX:");//向USB模拟串口发字符串CDC_Transmit_FS(USB_RX_BUF,USB_RX_STA);//USB串口:将接收的数据发回给电脑端//USB_printf("\r\n");//向USB模拟串口发(回车)USB_RX_STA=0;//数据标志位清0memset(USB_RX_BUF,0,sizeof(USB_RX_BUF));//USB串口数据寄存器清0}}/* USER CODE END 3 */
  1. 修改堆栈和堆;在这里插入图片描述

11.修改编译优化在这里插入图片描述

设置编译优化: Properties for F10****/ C/C++ Build / Settings / MCU GCC Compiler / Optimization \ Optimization level = “Optimize for size(-Os)”
否则会出现错误如下:

\tools\arm-none-eabi\bin\ld.exe: F103C6T6Atest.elf section .text' will not fit in region FLASH’ \tools\arm-none-eabi\bin\ld.exe: region
`FLASH’ overflowed by 1656 bytes collect2.exe: error: ld returned 1
exit status make: *** [makefile:68: F103C6T6Atest.elf] Error 1 “make
-j8 all” terminated with exit code 2. Build might be incomplete.

运行测试

1.设备管理器可以看到串口;
2.使用串口工具,发送接收数据正常。
在这里插入图片描述
CubeIDE1.10.1 环境下的源代码:https://download.csdn.net/download/qq_23313467/87824117

注意事项:STM32F103C6T6的存储容量比较小,实现USB的虚拟串口基本上用完了内存和flash,如果再添加别的复杂功能,估计存储就不够了。参看了一下生成的hex文件,已经达到38k了!

参考链接

http://www.jmfq.cn/news/4860973.html

相关文章:

  • 东莞做网站it s/网络营销成功案例介绍
  • 凡科的网站做seo比较难/淘宝关键词搜索
  • 武汉做网站seo/百度网盘客服人工电话95188
  • 菏泽做企业网站/百度网站排名优化价格
  • 网站开发主流/杭州龙席网络seo
  • b2c电子商务网站源码/廊坊百度快照优化哪家服务好
  • 为离职员工做的网站/app拉新平台哪个好佣金高
  • 重庆网站建设排名/seo营销推广
  • 临漳seo整站排名/杭州百度推广
  • 山西建设官方网站/找个免费的网站
  • axure怎么做优酷网站/企业网站设计欣赏
  • 用花生做网站/聚名网域名注册
  • 南京 网站制作公司哪家好/潍坊网站开发公司
  • 企业网站建设课程体会/百度贴吧官网首页
  • 锦州做网站多少钱/怎样做网站平台
  • 西安网站建设服务价格信息/百度营销推广官网
  • 建设威客网站/西安网站seo技术
  • 做网站的细节/那种网站怎么搜关键词
  • vps如何做网站步骤/百度快照投诉中心官网
  • 政府网站建设招标文件/seo综合查询是什么意思
  • 怎么自己开发一个app软件/整站优化系统厂家
  • 个人做外贸网站/seo初学教程
  • 排名优化网站/网络营销出来可以干什么工作
  • 沙河企业做网站/广州网络推广公司排名
  • 网站文件保护怎么做/帮收款的接单平台
  • 亳州做网站的公司/百度seo在哪里
  • wordpress自定义筛选/seo实战培训教程
  • 沈阳企业网站建设/南宁百度seo排名
  • 晨旭东方网站建设/网页推广怎么收取费用
  • wordpress footer copyright/山西seo基础教程