历史上的今天
返回首页

历史上的今天

今天是:2025年03月18日(星期二)

正在发生

2019年03月18日 | STM32f103c8t6作USBCDC的尝试

2019-03-18 来源:eefocus

闲着无聊就倒腾stm32,实验室资源太多也搞不完,前些天搞了一点dsp,fpga,发现这些芯片难免有点无聊,于是又回来搞stm32的东西。倒腾了一天,下午先是弄了个FreeRTOS的例程,看了一点资料,发现一下没那么好上手,于是下午上完课以后就开始折腾USB,一晚上,搞了个USB的CDC。 


本来是想用USB做个模拟串口控制led灯的,后来搞了一下没成功,可能是因为USB进了中断,也就懒得深究,直接就放弃led了,就直接发送接收数据,拿串口助手调试。


也废话少说,直接贴代码


/* Includes ------------------------------------------------------------------*/

#include "main.h"

#include "stm32f1xx_hal.h"

#include "usb_device.h"

#include "gpio.h"


/* USER CODE BEGIN Includes */

#include "usbd_cdc_if.h"

/* USER CODE END Includes */


/* Private variables ---------------------------------------------------------*/


/* USER CODE BEGIN PV */

/* Private variables ---------------------------------------------------------*/

    char My_Txbuffer[]={"First USB Deviece by Versemonger\n"};

/* USER CODE END PV */


/* Private function prototypes -----------------------------------------------*/

void SystemClock_Config(void);


/* USER CODE BEGIN PFP */

/* Private function prototypes -----------------------------------------------*/


/* USER CODE END PFP */


/* USER CODE BEGIN 0 */


/* USER CODE END 0 */


int main(void)

{


  /* USER CODE BEGIN 1 */


  /* USER CODE END 1 */


  /* MCU Configuration----------------------------------------------------------*/


  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

  HAL_Init();


  /* USER CODE BEGIN Init */


  /* USER CODE END Init */


  /* Configure the system clock */

  SystemClock_Config();


  /* USER CODE BEGIN SysInit */


  /* USER CODE END SysInit */


  /* Initialize all configured peripherals */

  MX_GPIO_Init();

  MX_USB_DEVICE_Init();


  /* USER CODE BEGIN 2 */


  /* USER CODE END 2 */


  /* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {

  /* USER CODE END WHILE */


  /* USER CODE BEGIN 3 */

        CDC_Transmit_FS((uint8_t*)My_Txbuffer,sizeof My_Txbuffer);

        HAL_Delay(1000);        

  }

  /* USER CODE END 3 */


}


这是主函数部分,每隔一秒发送My_Txbuffer中的内容到串口,发送倒没什么问题,然后就是发送部分,在usbd_cdc_if.c里找到这个函数CDC_Receive_FS,然后作如下修改


static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len)

{

  /* USER CODE BEGIN 6 */

    char LED[]={"hi"};

    char Welcome[] = {"Really frustrating, why only four letters?!\n"};

  USBD_CDC_SetRxBuffer(&hUsbDeviceFS,Buf);

  USBD_CDC_ReceivePacket(&hUsbDeviceFS);

    if(strcmp(Buf,LED)==0)

    {   

        CDC_Transmit_FS((uint8_t*)&Welcome,sizeof(Welcome));

    }

  return (USBD_OK);

  /* USER CODE END 6 */ 

}


大概功能就是当收到hi时回复一串,这里通过调用 USBD_CDC_SetRxBuffer();函数可以更改rx buffer ,可以自己定义,也可以用cubemx生成时定义好了的一个buffer。 


具体程序编写的时候,参照了很多这篇文章STM32CubeMX系列教程25:USB Device 


过两天继续玩FreeRTOS吧,平时也懒得码字,最近又期末了,还是有点烦。辉光钟也差一点点没焊,辉光钟的程序还是3.5.0版本写的,回头有空传上来。


推荐阅读

史海拾趣

Big-Sun Electronics Co Ltd公司的发展小趣事

面对电子行业的快速变化和市场竞争的加剧,Big-Sun Electronics Co Ltd公司积极实施多元化战略。公司不仅继续深耕电子芯片领域,还逐步拓展至智能家居、物联网等新兴领域。通过产业转型和升级,Big-Sun成功实现了业务的多元化发展,为公司的可持续发展奠定了坚实基础。

Akahane Electronics Ind Corp公司的发展小趣事

随着全球市场的不断扩大,Akahane意识到单打独斗难以为继,于是积极寻求与国际同行的合作。通过与欧美知名电子企业建立战略合作关系,Akahane不仅获得了先进的技术支持,还成功打入国际市场,进一步提升了品牌影响力。同时,公司还积极参与国际电子行业的交流活动,学习借鉴先进的管理经验和市场策略,为公司的长远发展奠定了坚实基础。

CNC Tech公司的发展小趣事

随着科技的不断发展,CNC Tech公司意识到,只有不断创新才能在行业中保持领先地位。因此,公司加大了对研发创新的投入,积极引进和培养高端人才,加强与高校和科研机构的合作。在CNC Tech的努力下,公司成功研发出一系列具有创新性的数控加工技术和产品,不仅提高了生产效率和质量,还降低了生产成本,为客户创造了更大的价值。这些创新成果也引领了行业的技术变革和发展趋势。

Aeroflex Metelics / Hi-Rel Components公司的发展小趣事

随着科技的不断发展,CNC Tech公司意识到,只有不断创新才能在行业中保持领先地位。因此,公司加大了对研发创新的投入,积极引进和培养高端人才,加强与高校和科研机构的合作。在CNC Tech的努力下,公司成功研发出一系列具有创新性的数控加工技术和产品,不仅提高了生产效率和质量,还降低了生产成本,为客户创造了更大的价值。这些创新成果也引领了行业的技术变革和发展趋势。

广东爱晟电子(exsense)公司的发展小趣事

2020年新冠疫情期间,爱晟电子积极响应政府号召,全力支持抗疫工作。公司不仅向抗疫一线捐赠了防疫物资,还组织员工参与志愿服务。同时,公司还利用自身的技术优势,研发出适用于医疗设备的NTC热敏电阻,为抗击疫情提供了有力支持。这些行动彰显了爱晟电子的社会责任感和担当精神。

Catalyst / ON Semiconductor公司的发展小趣事

随着技术的不断进步,Catalyst / ON Semiconductor公司逐渐在半导体领域取得了重要的技术突破。公司投入大量资源进行研发,成功开发出了一系列高性能、低功耗的半导体产品,这些产品在市场上受到了广泛的欢迎。这些技术突破不仅提升了公司的市场竞争力,也为整个电子行业的发展注入了新的活力。

问答坊 | AI 解惑

玩转RP2040之开箱测评与上电运行

RP2040-LCD-1.28板子收到了,感谢EEWorld和微雪电子提供的测评机会。 1 开发板介绍 RP2040-LCD-1.28是一款Waveshare设计的高性能的微控制器开发板, 微控制器芯片为Raspberry Pi研发的RP2040,搭载了双核 ARM Cortex M0 + 处理器,运行频率高 ...…

查看全部问答>

【行空板 Python编程学习主控板】二。行空板图形化编程

行空板目前是符合大势所趋。使用了python的方式进行编程,同时可以控制外设进行工作。如果对其不是很熟悉的话我们还可以只用图形化编程工具,Mind+进行学习。   首先还是要安装应用的,然后我们进去其python模式下。就可以看到我们匹配 ...…

查看全部问答>

开关变换器动态特性:建模、分析与控制

本书介绍了变换器的动态建模以及控制电路设计的方法, 介绍了各种变换器拓扑的动态特性, 以及不同的控制方法和不同工作模式对变换器动态特性的影响。 本书内容丰富、 实用性强, 通过大量开关变换器电路实验, 揭示了各种开关变换器和控制方法的特 ...…

查看全部问答>

完了完了,完成不了了,STM32F103产生1us~80us脉宽的方波,是不是不行啊

STM32F103产生1us~80us脉宽的方波,是不是不行啊,这个是不是用CPLD或者是FPGA更好 …

查看全部问答>

【行空板 Python编程学习主控板】三。行空板安装QT

  其实我在体验这个系统的时候就猜到了这个系统除了python肯定也是能跑QT的。   因为其做的是Debian系统,有了系统我们安装QT就是非常的简单了。   安装QT前还是把我们的源更换下。 # 默认注释了源码镜像以提 ...…

查看全部问答>

关于电流采样的问题

  图片描述:  如图,这是一个4-20mA电流采样电路, 150Ω是采样电阻,负责把4-20mA转化为0.6-3V电压, 区别在于这个10Ω电阻的位置。   我的分析: 第一张图应该是电流在150Ω转化为电压信号 ...…

查看全部问答>

【行空板 Python编程学习主控板】基于行空板的便携式果汁光谱分析仪

本帖最后由 HonestQiao 于 2022-11-21 10:53 编辑 目录: 一、想法起源 二、硬件材料 三、准备工作 四、原理图与实物连线 五、逻辑设计与代码编写 六、实测步骤 七、总结 八、花絮   一、想法起源 最近在行 ...…

查看全部问答>

Matter 正式发布 你该做什么呢?

在刚过去的十月,智能家居产业发生了一件里程碑事件。 由 550 家科技公司组成并致力于开发物联网开放标准的国际组织 CSA 连接标准联盟在十月初宣布,Matter 1.0 技术规范正式发布,认证程序同时开放。自此以后,来自物联网生态各个环节的联 ...…

查看全部问答>

室内非视频方式测量体温

如何在酒店室内使用非视频的方式精准的测量多人的体温 …

查看全部问答>

智能家居2.0 - Matter 1.0 标准和受益者

智能家居的协议标准有很多,Zigbee,Thread,6LowPan,Wifi,Z-wave,Bluetooth Mesh等等。在过去十年,没有一个协议标准能一统智能家居低功耗局域网,也没有一个协议标准能使得不同厂家的产品真正做到互联互通。纵观2010-2020的十年,是国内短距离 ...…

查看全部问答>