ZC·Shou
深入研究,分享最纯粹的技术干货
展开
-
STM32 之十六 深入了解 ADC 工作原理及参考电压变动的影响
缘起 最近项目中用到了终端在仅有电流的情况下启动并正常工作的需要。此时需要先给系统充电,充电时间是毫秒级别。而 MCU 在 2V 基本就可以工作了,此时的 ADC 的基准电压也在 2V(使用的基准电压芯片只能保证在 2.5V ~ 3.3V 内是准确的),这就造成了 ADC 在这段时间内工作采样数据不准确。问题就是想搞明白此时基准电压低了,采样值会如何变化?知其然,也要知其所以然!国内基本找不到太有效的讲解 ADC 原理的资料(至少我是没找到),在 TI、ADI 等公司官网倒是有不少资料可供参考!原创 2021-09-17 09:43:41 · 10865 阅读 · 7 评论 -
STM32 之十五 奇怪问题处理及驱动库 BUG 汇总(持续更新中)
在使用 STM32 的 MCU 开发过程中,难免遇到各种各样的奇葩问题。或许是开发环境的问题,或许是 MCU 使用的问题,也或许是驱动库的BUG 等等。这些问题可能不局限于某一种具体型号的 MCU,特此把遇到的问题记录一下!注意,如果没有特殊说明,默认的开发环境为 Win10 Pro 20H2 ,Keil uVision5 5.32!STM32F103 在 KEIL 调试时部分寄存器不显示数据现象进入调试状态,观察某些外设的寄存器,发现有些寄存器不显示配置的值,而是始终显示 0。如下图:为原创 2020-11-15 08:44:46 · 1404 阅读 · 0 评论 -
STM32 之十四 System Memory、Bootloader
由于工作的需要,最近学习了一下 STM32F4 MCU 中的 BootLoader。对比了 ST 的其他系列的的 MCU,关于 Bootloader 这部分原理基本都是一样的,无非就是配置项多少的区别。下面记录一下以 STM32F411 为例的学习历程。引导模式 每个芯片对应的参考手册中都有这部分的介绍,在对应的翻译的中文手册中被称为自举模式。在 STM32F4xx 中,可通过 BOOT[1:0] 引脚选择三种不同的自举模式,如下图所示:从 Main memory 引导: Main memo原创 2020-10-24 15:29:47 · 4121 阅读 · 4 评论 -
STM32 之十三 看门狗(WDG)及低功耗下的处理
最近在做低功耗项目时,遇到了看门狗不好处理的问题。在 ST 的各系列 MCU 中,看门狗应该算是使用配置起来最简单的一个外设了。我们通常仅需要配置很少的配置项,但是,一旦要配合低功耗模式则配置就比较麻烦了。MCU 中有两只狗,一只叫 Independent watchdog (IWDG);另一只叫 System window watchdog (WWDG)。下面是这两只狗的简单介绍!IWDG IWDG 基本就等同于我们独立使用的看门狗芯片。最适合那些要求看门狗作为一个完全独立的进程在主应用程序之外原创 2020-06-22 21:11:28 · 6378 阅读 · 8 评论 -
STM32 之十二 FLASH 使用详解 及 LL 库 FLASH 驱动实现
最新项目中需要使用 STM32L476 的片子。在选择片子时,资源的多少成为了一个比较重要的考量。在斟酌一番之后,我决定采用 LL 库来实现本次的功能。但是在使用 LL 库的时候发现其中并没有处理 FLASH 的驱动 stm32l4xx_ll_flash.h 和 stm32l4xx_ll_flash.c。同样去其他系列芯片中,也没有发现 LL 库的 FLASH 驱动。于是决定自己来实现一下!FLASH 特性 ST 众多 MCU 中,FLASH 并不是一样的,而且差别很大!我们在使用 FLASH 的原创 2020-05-31 09:32:41 · 7754 阅读 · 0 评论 -
STM32 之十一 LL 库(low-layer drivers)详解 及 移植说明
最新项目中需要使用 STM32L476 的片子。在选择片子时,资源的多少成为了一个比较重要的考量。在斟酌一番之后,我决定采用 LL 库来实现本次的功能。下面就以 STM32L476 为例来介绍一下 LL 库。文档 LL 库一直是与 Cube HAL 库捆绑发布的。我们可以自己从 ST 官网下载对应的 Cube 包 STM32CubeL4 ,也可以直接在 CubeMX 中下载。对应的文档也...原创 2020-02-05 20:12:13 · 16791 阅读 · 1 评论 -
STM32 之十 供电系统及内部参照电压(VREFINT)使用及改善ADC参考电压
问题今天在使用 STM32F407的ADC时遇到一个问题:ADC的参考电压都是通过Vref+提供的并作为ADC转换器的基准电压。当我们使用的Vref+是直接取自用VDD电压时,当VDD电压波动比较大时或稳压性能比较差时,转换结果自然就不准确了!供电方案MCU的参考手册都会有一章节单独介绍MCU的电源管理,针对不同的MCU(封装不同等)其外部电源如何连接也是有要求的,我们在MCU上一般都会发现...原创 2018-12-21 10:50:33 · 53907 阅读 · 7 评论 -
STM32 之九 HAL 库串口(USART/UART)驱动 BUG 及解决方法
介绍 在使用HAL库的串口部分时,发现了有以下Bug,严重影响正常使用!特此备注说明。如果在DMA发送过程中,出现串口错误(可能是发送错误,也可能是接收错误),将进入HAL的中断处理函数,但是处理函数中只处理了DMA的接收部分(将DMA关闭,清除串口的接收标志CR3->DMAR),而对于发送的DMA标志(CR3->DMAT)则没有处理,这样重新初始化后,CR3->原创 2018-12-03 15:37:58 · 18367 阅读 · 7 评论 -
STM32 之八 在线升级(IAP)超详细图解 及 需要注意的问题解决
IAP 是啥 IAP( In Application Programming)即在应用编程,也就是用户可以使用自己的程序对MCU的中的运行程序进行更新,而无需借助于外部烧写器。其实ST官网也给出了IAP的示例程序,感兴趣的可以直接去官网搜索。 这里有一点需要特殊注意,就是在MCU中,有一个特殊区域被称为 System memory。在这块区域中存放了ST公司自己的 bootloader 程...原创 2018-11-06 20:32:58 · 18254 阅读 · 10 评论 -
STM32 之七 备份域(备份寄存器、备份SRAM)详解及数据丢失问题处理
某些STM32芯片提供了备份SRAM,例如STM32F系列芯片有4K的备份SRAM。然而在使用过程中发现备份区域数据丢失!下面从STM32系列芯片提供的整个备份域来看看啥情况。电池备份域 首先,这部分在参考手册的电源(PWR)章节有详细的介绍。器件的工作电压 (VDD) 要求介于 1.8 V 到 3.6 V 之间。嵌入式线性调压器用于提供内部 1.2 V数字电源。当主电源 VDD 断电时,可...原创 2018-09-29 14:22:35 · 18721 阅读 · 2 评论 -
STM32 之六 USB IP(USB模块)、官方驱动版本 详解
USB 模块 在 STM32 众多系列的 MCU 中,USB模块并不是相同的。总的来说可以分文两大类:USB IP、OTG IP。这两种 IP又可以进行更进一步的细分,如下图: USB IP: 仅可作为全速或低速的USB设备;USB+ IP: 是针对USB IP的扩展版本,同样仅可作为全速或低速的USB设备,但是ST针对这部分的USB模块进行了扩展,例如添加了USB低功耗管理等F...原创 2018-07-28 10:37:37 · 25813 阅读 · 8 评论 -
STM32 之五 Core Coupled Memory(CCM)内存
写在前面今天在搞STM32F4时,用到了一部分特殊内存——CCM。搜了搜网上没多少介绍,索性自己查手册。基本架构 废话少说,先看看这块内存特殊在哪里。官方的基本架构说明如下: The main system consists of 32-bit multilayer AHB bus matrix that interconnects: Eight masters:原创 2018-01-26 21:02:41 · 25257 阅读 · 0 评论 -
STM32 之四 标准外设版 USB 驱动 + MSC(Host) + Fatfs 移植
写在前面现在,网上关于STM32的USB的文章数不胜数。写这篇文章仅仅是对于自我学习的一个记录。主要是对实际学习中遇到的一些棘手问题做个备忘录。使用的芯片为STM32F407VG 。目前,ST的USB驱动有两套,一套是早期的独立版USB驱动,最新版为2.2.0;一套为针对其Cube系列的驱动,根据芯片不同可能有区别,具体见对应芯片的Cube驱动包 。 本文使用的为独立版USB驱动。即:HA原创 2018-01-01 08:56:35 · 26213 阅读 · 0 评论 -
STM32 之三 标准外设版USB驱动库详解(架构+文件+函数+使用说明+示例程序)
写在前面目前,ST的USB驱动有两套,一套是早期的独立版的驱动,最新版为2.2.0;一套为针对其Cube系列的驱动,根据芯片不同可能有区别,具体见对应芯片的Cube驱动包 。 本文使用的为独立版的USB驱动本文多出自于ST的官方文档 及 2016~2017的培训文档,读者也可以直接去ST官网查阅相关文档。稍有涉及USB 2.0 规范的内容,关于USB规范去官网或自行Google。本文不...原创 2017-12-30 10:51:09 · 78500 阅读 · 20 评论 -
STM32 之二 HAL库详解 及 手动移植
2018.1.19 更新其中的错误部分HAL库结构 说到STM32的HAL库,就不得不提STM32CubeMX,其作为一个可视化的配置工具,对于开发者来说,确实大大节省了开发时间。STM32CubeMX就是以HAL库为基础的,且目前仅支持HAL库及LL库!首先看一下,官方给出的HAL库的包含结构:stm32f2xx.h主要包含STM32同系列芯片的不同具体型号的定义,是否原创 2017-02-15 18:41:23 · 106807 阅读 · 32 评论 -
STM32 之一 HAL库、标准外设库、LL库(STM32 Embedded Software)
2018.1.19 HAL库详解见STM32之HAL库详解 及 手动移植STM32 Embedded Software 工作以来一直使用ST的STM32系列芯片,ST为开发者提供了非常方便的开发库。到目前为止,有标准外设库(STD库)、HAL库、LL库 三种。前两者都是常用的库,后面的LL库是ST最近才添加,随HAL源码包一起提供,目前支持的芯片也偏少。各库如下所示: 其原创 2017-01-19 10:21:25 · 115314 阅读 · 9 评论