问题:
STM32的 USB CDC 工程使用STM32Cube 生成,编译下载后,插上USB发现如下图问题:
在设备管理器显示黄色感叹号,驱动不正常。
原因:
由于SMT32 USB 部分的代码用到了 malloc 和 free 这种标准库(#include
解决:
将STM32 工程中的startup_stm32fxxxxx.s 启动文件里的 Heap_Size 改大点,我这里设置Heap_Size为 0x400后,USB工作正常,收发数据OK。
这时PC设备管理器中的 USB CDC设备已经枚举成功,如下图:
建议:
在单片机这种不带MMU的平台上编程时,尽量少用 标准库里的 malloc 来动态分配内存,因为会带来内存碎片,可能会导致程序崩溃,如果实在需要动态内存分配,可以自己写个简单的动态内存管理方法。
关键字:STM32 USB CDC 驱动问题
引用地址:
STM32 USB CDC 驱动问题
推荐阅读最新更新时间:2024-03-16 16:26
STM32--低功耗模式
STM32F10xxx有三中低功耗模式: ●睡眠模式(Cortex?-M3内核停止,外设仍在运行) ●停止模式(所有的时钟都以停止) ●待机模式(1.8V电源关闭) 时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz。 上电,默认使用内部HSI时钟8M,经测试10mA左右。待机模式可实现系统的最低功耗。 可将电流消耗降至两微安。 在待机模式下,所有的I/O引脚处于高阻态,除了以下的引脚: ●复位引脚(始终有效) ●当被设置为防侵入或校准输出时的TAMPER引脚 ●被使能的唤醒引脚 /*按钮GPIOB9进入睡眠,WKUP pin(GP
[单片机]
STM32入门学习笔记之STM32F103环境搭建(下)
(3)在工程文件夹中创建四个子文件夹,HE AD ERWARE,OBJECT,USER和SYSTEM,各文件夹内容如下所示。 USER:存放工程文件, 汇编 启动文件与主函数的c文件 SYSTEM:存放系统文件,串口1文件和滴答 时钟 文件 HEADERWARE:存放其他的驱动文件 OBJECT:存放编译过程的链接文件以及最终的HEX文件 (4)新建工程,输入工程保存路径后点击保存。 (5)选择目标 芯片 型号,我们使用的芯片型号是 STM32 F103ZET6 (6)点击工程设置,添加系统文件夹 点击红框选中的位置来新建文件夹,双击新建的文件夹修改名称,创建和步骤3目录一样的文件夹,如下图所示。
[单片机]
STM32F103C8T6中断特征介绍 用按钮为STM32 MCU触发一个中断
中断是MCU的特征之一,STM32F103C8T6也不例外。以下通过STM32F103C8T6 Blue Pill外接一个按钮,向MCU触发外部中断。 STM32F103C8T6中断特征 中断有硬件中断和软件中断两种,当一个中断发生时,相应的中断服务程序(ISR)和中断处理程序就开始运行了。其中,ISR的指令必须尽可能小,ISR中也不能出现delay ()之类的阻塞函数。 STM32 Blue Pill或者STM32F103C8T6 MCU指定NVIC来管理所有外部中断和外设中断,其应用采用了Arduino IDE。因此,我们可使用相同的句法来配置外部中断,这可通过以下称作 “attachInterrupt ()” 的句法
[单片机]
STM32—串口使用总结
一.仅向上位机打印调试信息 单纯利用串口向上位机打印调试信息,程序如下: void USART1_Init( uint32_t btl ) { GPIO_InitTypeDef GPIO_InitStruct; USART_InitTypeDef USART_InitStruct; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1, ENABLE ); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;//Tx
[单片机]
STM32-systick系统定时器
systick系统定时器 系统定时器存在内核中,是24位的定时器,只能向下递减,嵌套在NVIC中 counter 在时钟的驱动下 在reload的初值开始向下递减计时到0,产生中断置位标志然后又从reload值开始重新递减计数,循环 定时时间计算 t=reload*(1/clk) clk=72M时,t=72*(1/72m)=1us clk=72M时,t=72000*(1/72m)=1ms clk=72M时,t=72000000*(1/72m)=1s 1s=1000MS =1000 000US=1000 000 000NS sysTick属于内核中的外设,他的中断优先级和外设的中断优先级相比,哪个
[单片机]
STM32之Core Coupled Memory(CCM)内存
写在前面 今天在搞STM32F4时,用到了一部分特殊内存——CCM。搜了搜网上没多少介绍,索性自己查手册。 基本架构 废话少说,先看看这块内存特殊在哪里。官方的基本架构说明如下: The main system consists of 32-bit multilayer AHB bus matrix that interconnects: Eight masters: – Cortex® -M4 with FPU core I-bus, D-bus and S-bus – DMA1 memory bus – DMA2 memory bus – DMA2 peripheral bus – Ethernet DMA b
[单片机]
锂离子电池充电器LTC4062及其应用
近年来,手机、数码相机、MP3等便携式产品向体积小、厚度薄、重量轻方向发展,新产品推陈出新,产量也猛增。这些新产品中无不采用锂离子(或聚合物)电池,因为它能满足小、薄、轻的要求,并且容量大,能延长两次充电的时间间隔。与此同时,各厂商也开发出各种新型充电器,与产品进行配套销售。为争夺充电器市场的份额,各导体厂商开发许多性能优良、设计灵活、应用方便的充电器芯片,应用到各种新型充电器当中。 凌特公司推出的单节锂离子电池充电器LTC4062应用灵活,可满足不同容量的锂离子电池的需要,也能采用插头式电源及USB端口进行充电,为充电器设计工程师提供了一个很好的选择。 特点及应用范围 LTC4062是一种充单节锂离子电池的线性充电器,由
[电源管理]
Event Recoder调试组件在stm32上的使用
本文目标:Event_Recoder调试组件在stm32上的使用 按照本文的描述,应该可以在你所处的硬件上跑通代码。 先决条件:装有编译和集成的开发环境,比如:Keil uVision5。 板子硬件要求:无,属于调试功能。 起源 因为做产品开发,设计东西有时候考虑得多,mcu的并没有多余的串口供使用调试,在调试一些初期进行验证时,必要的调试的打印信息是需要的。 Event Recoder调试组件简介 嵌入式的Event_Recoder调试组件是一种可以在MDK开发环境下使用的高级调试工具,它可以记录软件运行的一些标志信息,并以图形化的形式显示出来。它可以帮助你了解和分析内部操作,支持Keil RTX操作系统调试以及MDK自带的
[单片机]