自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

EXP

学习、探索、分享、进步

原创 LoRa 之一 旧版驱动(sx12xxDrivers-V2.1.0)移植及驱动架构详解

  在之前的项目中,一直使用 LoRa 通信。很早之前就想写写文章记录一下学习过程。怎奈一直是一知半解的状态,想写不敢写!LoRa 这个东西在国内用的貌似不是太多。   对于无线通信,各个国家或者地区都有严格的限制。例如,我们国家就有<<中华人民共和国无线电频率划分规定>>...

2020-11-26 15:19:59 26 0

原创 华大 MCU 之二 USB 驱动 + FatFs 的移植使用详解

  继上一篇 华大 MCU 之一 HC32F460 替换 STM32F411 移植记录 完成之后,领导要求启用 USB 相关功能(硬件在设计时已经设计了 USB 接口)。之前的 ST MCU 中 USB 用的还是挺多的,对于 USB 有一些了解!对于 ST 的 USB 驱动库也写过几篇博文!   ...

2020-11-23 16:10:31 110 2

原创 STM32 之十五 奇怪问题处理及驱动库 BUG 汇总(持续更新中)

  在使用 STM32 的 MCU 开发过程中,难免遇到各种各样的奇葩问题。或许是开发环境的问题,或许是 MCU 使用的问题,也或许是驱动库的BUG 等等。这些问题可能不局限于某一种具体型号的 MCU,特此把遇到的问题记录一下! 注意,如果没有特殊说明,默认的开发环境为 Win10 Pro 20...

2020-11-15 08:44:46 90 0

原创 STM32 之十四 System Memory、Bootloader

  由于工作的需要,最近学习了一下 STM32F4 MCU 中的 BootLoader。对比了 ST 的其他系列的的 MCU,关于 Bootloader 这部分原理基本都是一样的,无非就是配置项多少的区别。下面记录一下以 STM32F411 为例的学习历程。 引导模式   每个芯片对应的参考手册中...

2020-10-24 15:29:47 196 2

原创 华大 MCU 之一 HC32F460 替换 STM32F411 移植记录

  目前,部分产品需要国产化,首当其冲的就是 MCU。在经过几番研究之后,最终决定使用华大的 MCU 来代替(STM32F411 -> HC32F460)。工作的重点就是如果将现有项目代码,一点点移植到 HC32F460。以下就是一些在移植过程中的记录。 首先从官网 https://www....

2020-10-19 13:26:36 583 0

原创 王爽 16 位汇编语言学习记录

以下为汇编学习记录,内容全部出自王爽的16位《汇编语言》,如有错误,可直接去查看原书。 汇编语言   机器语言是机器指令集的集合,机器指令是一列二进制数字,计算机将其翻译成高低电平,从而使器件收到驱动。而程序员很难看懂!例如:8086 CPU 完成运算 s = 768 + 12288 – 1280...

2020-09-22 09:50:29 183 0

原创 STM32 之十三 看门狗(WDG)及低功耗下的处理

  最近在做低功耗项目时,遇到了看门狗不好处理的问题。在 ST 的各系列 MCU 中,看门狗应该算是使用配置起来最简单的一个外设了。我们通常仅需要配置很少的配置项,但是,一旦要配合低功耗模式则配置就比较麻烦了。MCU 中有两只狗,一只叫 Independent watchdog (IWDG);另一...

2020-06-22 21:11:28 892 6

原创 ARM 之十一__weak 和 __attribute__((weak)) 关键字的使用

  今天在使用 Keil (主要是 armcc 编译器)编译代码的时候遇到了有 __weak 关键字的函数不起作用的问题,甚是奇怪。之前对于 __weak 关键字一直是一个简单的认知:编译器自动使用没有 __weak 的同名函数(如果有的话)替换有 __weak 关键字的同名函数,__weak 函...

2020-06-17 19:53:19 828 0

原创 STM32 之十二 FLASH 使用详解 及 LL 库 FLASH 驱动实现

  最新项目中需要使用 STM32L476 的片子。在选择片子时,资源的多少成为了一个比较重要的考量。在斟酌一番之后,我决定采用 LL 库来实现本次的功能。但是在使用 LL 库的时候发现其中并没有处理 FLASH 的驱动 stm32l4xx_ll_flash.h 和 stm32l4xx_ll_fl...

2020-05-31 09:32:41 1258 0

原创 Gitee 使用问题记录

提交代码时,显示的提交记录不是自己的名字 现象: 如下图,我提交的代码显示的是 ZCShou(管理员)提交的: 原因 1: 提交者的邮箱和 Gitee 上默认的提交邮箱不一致。例如把我自己本地的 Git 配置的默认邮箱换成了 ZCShou 的。则提交后 Gitee 就会认为代码是 ZCShou ...

2020-03-14 18:36:27 359 0

原创 Git 之三 常用命令:仓库创建、提交、分支等

常用命令   虽然 Git 同时提供了 GUI 界面 和 Bash,但是,GUI 界面的功能相对来说还是有点简陋的。要想熟练掌握 Git 的使用,还是需要了解 Git 一系列的命令!   Git 命令还是比较多的,后面我们以实际用到的功能来介绍。有个需要注意的地方就是命令的参数:参数分为简写和全称...

2020-02-19 09:36:26 394 0

原创 STM32 之十一 LL 库(low-layer drivers)详解 及 移植说明

  最新项目中需要使用 STM32L476 的片子。在选择片子时,资源的多少成为了一个比较重要的考量。在斟酌一番之后,我决定采用 LL 库来实现本次的功能。下面就以 STM32L476 为例来介绍一下 LL 库。 文档   LL 库一直是与 Cube HAL 库捆绑发布的。我们可以自己从 ST 官...

2020-02-05 20:12:13 4586 0

原创 Git 之五 通信协议(HTTPS、SSH、Git)、使用远程仓库(GitHub、GitLab、Gitee等)

  Git 通常也会有个远程仓库。用来协调各个参与者的工作!这与上一代集中式版本控制系统的作用基本类似。一个远程仓库通常只是一个裸仓库(bare repository),即一个没有当前工作目录的仓库。 因为该仓库仅仅作为合作媒介,不需要从磁盘检查快照;存放的只有 Git 的资料。 简单的说,裸仓库...

2019-09-13 19:35:33 819 0

原创 Git 之四 分支管理

  使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。 Git 的一大特点就是对于分支的支持!Git 的分支可谓是难以置信的轻量级,它的新建操作几乎可以在瞬间完成,并且在不同分支间切换起来也差不多一样快。 远程分支   在了解分支之前,必须要先了解远程分支。因为在分支管理命令 ...

2019-09-13 19:25:01 501 0

原创 Git 之二 架构、工作流程、.git 目录文件

前一篇文章介绍了 Git 的起源、安装、配置等等,接下来介绍一下 Git 的架构。 架构 原理   Git 和其它版本控制系统(包括 Subversion 和近似工具)的主要差别在于 Git 对待数据的方法。 概念上来区分,其它大部分系统以文件变更列表的方式存储信息。 这类系统(CVS、Subve...

2019-09-13 18:51:01 255 0

原创 Git 之一 起源、安装、配置

什么是 Git   Git 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。   Linus 个人对于集中式版本控制系统并不感兴趣,在 Git 出来之...

2019-09-07 18:19:42 400 0

原创 版本控制系统 之一 概念、分类、常见版本控制系统(CVS、SVN、BitKeeper、Git 等)

是什么   版本控制系统(Version Control System,VCS)是一种软件,可以帮助软件团队的开发人员协同工作,并存档他们工作的完整历史记录。 为什么 在我们的实际开发过程中,经常会有这种需求或问题 我们需要在已经发布的程序中添加新的功能,如果测试验证后没有问题,才会使用新的代码...

2019-09-07 11:01:22 1274 0

原创 ARM 之十 ARMCC(Keil) map 文件(映射文件)详解

map 文件是什么   map 文件对应的中文名应该是映射文件,用来展示(映射)项目构建的链接阶段的细节。通常包含程序的全局符号、交叉引用和内存映射等等信息。目前,大多数编译套件(主要是其中的链接器)都可以生成 Map 文件。常见的 gcc、VC、IAR 都可以输出 map 文件。   在 ARM...

2019-08-24 15:05:57 2422 0

原创 ARM 之一 ELF文件、镜像(Image)文件、可执行文件、对象文件 详解

ELF 文件规范   ELF(Executable and Linking Format)是一个二进制文件规范。用于定义不同类型的对象文件(Object files)中都放了什么东西、以及都以什么样的格式去放这些东西。   现在流行的可执行文件格式 (Executable File Format)...

2019-08-24 08:27:35 4377 4

翻译 FatFs 之三 FAT文件系统基础、FAT 数据格式、引导、编码

  注意:本文章主要是翻译自 FatFs 官网的 The basics of FAT filesystem。但是,原文大多都是文字说明,因此在翻译时,添加了大量的图片示例以及一些额外的章节。因此,以下翻译与原文有些差别。具体表现为下文中的英文部分全部是原文,没有任何更改;中文部分添加了一些额外内容...

2019-07-28 08:53:13 3314 1

原创 FatFs 之二 路径规则、字符编码、编码页、卷管理详解

路径名称的格式   FatFs 中路径名的格式类似于 DOS/Windows 的文件名规格:[drive#:][/]directory/file。FatFs 支持长文件名(LFN)和 8.3 格式文件名(SFN)。 当 FF_USE_LFN >= 1 时,可以使用 LFN。与 DOS/Win...

2019-07-20 13:46:55 1634 0

原创 FatFs 之一 R0.13c版源码目录文件、函数、全配置项详解及移植说明

源码目录文件   目前,最新版本为 R0.13c。相比于之前的版本,源码有了一定的变化。FatFs 的源码包中,文件非常简单。其源码目录结构如下所示(对于简单的文件以注释的形式给出,核心源码下文会详细说明): FatFs R0.13c │ LICENSE.txt // ├─docume...

2019-07-18 18:48:36 2564 0

原创 常用算法 之五 数据校验(CRC 原理、LRC、奇偶校验、校验和)详解

  循环冗余校验(Cyclic Redundancy Check,CRC)是数据通讯中很常用的一种校验方式。尤其是在嵌入式软件开发中,经常要用到 CRC 算法对各种数据进行校验。生成的数字在传输或者储存之前计算出来并且附加到数据后面,然后接收方进行检验确定数据是否发生变化。   CRC 是数据流采...

2019-07-03 12:12:03 13164 0

原创 SourceInsight 4.0 之四 项目配置(库文件引入、配置宏添加、快捷键修改等)

问题 在创建完成 Source Insight 工程后,我们还需要进行以下两步的配置,才可以完整的体验 Source Insight 的强大功能! 添加编译器使用的库文件。如果不添加,Source Insight 将找不到一些库函数的定义,例如:memcpy 函数 添加自己代码中使用的各种宏值。...

2019-06-28 13:51:23 3138 0

原创 CAN 总线 之七 BOSCH CAN 位时序 和 同步

  CAN 网络上的所有节点必须运行在相同的标称比特率下,但噪音、相移、振荡频率容差和振荡频率漂移导致实际的比特率可能与标称比特率不同。由于没有使用一个单独的时钟信号,因此需要一个同步节点方法。同步在仲裁机制中十分重要,因为仲裁中的节点需要能够同时看到它们传输的数据和其他节点的传输数据。 同步在确...

2019-06-23 14:27:15 3213 0

原创 CAN 总线 之六 BOSCH CAN 比特位填充(编码规则)、归零编码(RZ)和不归零编码(NRZ)

位填充   BOSCH CAN2.0 规范规定,DATA FRAME 或 REMOTE FRAME 中的位字段 START OF FRAME,ARBITRATION FIELD,CONTROL FIELD,DATA FIELD 和 CRC SEQUENCE 都需要通过比特填充的方法编码。 每当发送...

2019-06-13 19:55:25 3120 0

原创 CAN 总线 之五 BOSCH CAN2.0 Part B(标准格式消息 和 扩展格式消息)

前言   随着越来越多的应用程序接受和引入串行通信,这就要求对特定应用程序的通信功能分配消息标识符以进行标准化。如果将原来由11个标识符位定义的地址范围扩大,则可以更方便地使用can实现这些应用程序。因此,引入了第二种消息格式(“扩展格式”),其提供由29位定义的更大的地址范围。   The ac...

2019-06-07 16:21:57 1336 0

原创 CAN 总线 之四 BOSCH CAN2.0 Part A

随着越来越多的应用程序接受和引入串行通信,这就要求对特定应用程序的通信功能分配消息标识符以进行标准化。如果将原来由 11 个标识符位定义的地址范围扩大,则可以更方便地使用 CAN 实现这些应用程序

2019-06-05 21:49:36 849 0

原创 CAN 总线 之三 CAN 国际标准 ISO 11898 解读

  目前,从网上可以找到的 BOSCH 官方发布的 CAN 文档,最低也是 CAN2.0 版本,之前的 CAN1.0、CAN1.1 和 CAN1.2 已经绝迹了!再有就是 ISO 发布的国际标准文件了! ISO 11898   从2003年开始,ISO 将原先的 ISO 11898 CAN标准的数...

2019-05-29 15:10:22 11401 1

翻译 CAN 总线 之二 CAN 技术的历史

History of CAN technology   In February of 1986, Robert Bosch GmbH introduced the Controller Area Network (CAN) serial bus system at the Society of A...

2019-05-26 18:24:33 798 0

原创 CAN 总线 之一 总线拓扑、物理电平、发展史 详解

未出现前:汽车ECUs依靠越来越复杂的点对点布线。 Ø 1986年:Bosch公司开发了CAN总线协议作为汽车电子解决方案,并在SAE大会上发布。 Ø 1991年:Bosch公司发布了CAN2.0,包涵CAN 2.0A (11 位) 和CAN 2.0B (29 位)。 Ø 1993年:CAN总线列...

2019-05-26 15:45:35 2780 0

原创 排序算法 之四 分类、时间/空间复杂度、如何选择

写在前面   现在网上关于排序算法的文档不计其数,为什么要写这篇文章呢?主要是因为一些算法虽然在平时有用到,但是从来没有细细整理过,没有个统一、整体的认识。写这篇文章一来是进行一下总结,二来趁机在学一下各算法! 分类   排序算法可以说是一项基本功,是《数据结构与算法》中最基本的算法之一。实际工作...

2019-05-19 10:39:04 358 0

原创 ARM 之九 Cortex-M/R 内核启动过程 / 程序启动流程(基于ARMCC、Keil)

内核规范   ARM Cortex-M/R 内核的复位启动过程也被称为复位序列(Reset sequence)。ARM Cortex-M/R内核的复位启动过程与其他大部分CPU不同,也与之前的ARM架构(ARM920T、ARM7TDMI等)不相同。大部分CPU复位后都是从 0x00000000 处...

2019-05-05 14:18:42 3016 2

原创 ARM 之八 Cortex-M/R 内核启动过程 / 程序启动流程(基于IAR)

  在前面的文章《ARM 之 Cortex-M/R 内核启动过程 / 程序启动流程(基于ARMCC)》中已经介绍过了 Cortex-M/R 内核相关内容。这里基于 IAR 的启动流程与之前的并没有太大区别,因为这是 Cortex-M/R 内核规定好的。无论是 ARMCC 还是 IAR 都需要遵循内...

2019-05-04 19:19:11 4111 4

原创 ARM 之七 主流编译器(armcc、iar、gcc for arm)详细介绍

比较 目前,针对于 ARM 平台的主流编译器主要有以下三者: 比较 ARMCC IAR GCC for ARM 命令行工具 IDE中,独立提供 仅随其IDE发布,不独立提供 独立提供 开发商 ARM IAR GNU(目前由ARM维护) 支持的平台 Windows、Linux...

2019-04-27 12:04:10 22420 0

原创 USB 之四 USB 发展(更名)史 / USB 规范变化

  从网上盗了个图(出处不知道哪里,如果谁看到本文知道出处或者有侵权,请点击左侧的小企鹅联系删除!),先上个图看看当前众多的 USB 接口 众多的 USB 接口可谓眼花缭乱!最主要的是,USB 的命名会给一些人造成误解。   随着 USB 规范的不断更新,规范对于这些接口的支持情况也是有变化的,...

2019-04-26 09:38:26 1781 0

转载 .NET Core 3 and Support for Windows Desktop Applications

At Microsoft Build Live today, we are sharing a first look at our plans for .NET Core 3. The highlight of .NET Core 3 is support for Windows desktop ...

2019-01-04 14:32:06 488 0

原创 STM32 之十 供电系统及内部参照电压(VREFINT)使用及改善ADC参考电压

问题 今天在使用 STM32F407的ADC时遇到一个问题:ADC的参考电压都是通过Vref+提供的并作为ADC转换器的基准电压。当我们使用的Vref+是直接取自用VDD电压时,当VDD电压波动比较大时或稳压性能比较差时,转换结果自然就不准确了! 供电方案 MCU的参考手册都会有一章节单独介绍MC...

2018-12-21 10:50:33 22712 1

转载 C/C++ 之 C++强制类型转换(static_cast、dynamic_cast、const_cast、reinterpret_cast)

文章转载自:https://www.cnblogs.com/chenyangchun/p/6795923.html 。在了解这块时,发现了这篇文档,感觉写的很不错! c强制转换与c++强制转换 c 语言强制类型转换主要用于基础的数据类型间的转换,语法为: (type-id)expression ...

2018-12-19 13:19:13 1952 0

原创 Node.js 之 新手安装详解 及 npm 配置说明

简介   Node.js 是一个基于Chrome V8 的 JavaScript运行时的平台,可轻松构建快速,可扩展的网络应用程序。 Node.js使用事件驱动的非阻塞I/O模型,使其轻量级和高效,非常适合在分布式设备上运行的数据密集型实时应用程序。 优缺点 优点: 高并发(最重要的优点)。N...

2018-12-18 09:47:33 1194 0

提示
确定要删除当前文章?
取消 删除