单片机基础

MCU(Microcontroller Unit,微控制器),将CPU、内存(RAM/ROM)、外设(GPIO、UART、ADC等)集成在单一芯片上的微型计算机系统,专为嵌入式控制设计。例如:STM32(ARM Cortex-M)、ESP32(Wi-Fi/BLE)

SoC(System on Chip,片上系统),在单芯片上集成完整的系统功能,包括CPU、GPU、内存控制器、高速接口(USB/PCIe)、甚至AI加速器等,类似一台微型电脑。例如:高通骁龙、苹果A系列、华为麒麟

1. 芯片摘要

当我们拿到一款处理器时,或者说在芯片选型的过程中,我们需要对芯片的主要性能参数有一定的了解。这时候芯片手册是最重要的参考资料,我们可以快速的从中提取关键信息,来判断芯片是否符合我们的需求。

一般芯片厂商通常会提供以下几类文档(一般官网获取):

  • 《xx系列数据手册》 数据手册包含单片机的主要参数信息,如串口数量、引脚定义、电气特性等,是获取关键信息的首要资料。
  • 《xx系列参考手册》 参考手册(有时称为硬件手册)详细描述了单片机的体系结构、寄存器、地址映射、电源管理、复位机制等,主要面向开发者。
  • 《xx系列MCU开发工具用户手册》 该手册介绍开发工具和环境的使用方法,提供示例程序和操作说明,帮助开发者快速上手。
  • 《xx系列勘误表》 勘误表列出了芯片已知的问题和修正建议,是开发和调试过程中不可忽视的参考资料。

通过芯片摘要,我们可以从数据手册中快速了解其主要特性和适用场景。

重点信息包括:

  • 内核类型与主频:如 ARM Cortex-M4,最高主频200MHz。
  • 存储资源:如512KB Flash,256KB SRAM。
  • 外设接口:如多路UART、SPI、I2C、CAN、USB、ADC、DAC等。
  • 引脚数量与封装形式:如LQFP100、LQFP64等,决定了可用I/O数量和布局。
  • 电气特性:工作电压范围(如2.7V~3.6V)、I/O口驱动能力等。
  • 功耗参数:如待机功耗、运行功耗,影响应用场景(低功耗/高性能)。
  • 工作温度范围:如-40℃~85℃,决定是否适用于工业环境。

以华大 HC32F460 系列为例,数据手册摘要如下:

参数 说明
内核 ARM Cortex-M4(带FPU)
主频 最高200MHz
Flash 512KB
SRAM 256KB
外设 4×UART, 4×SPI, 3×I2C, 1×CAN, 2×ADC, 2×DAC, PWM等
封装 LQFP100, LQFP64等
工作电压 2.7V~3.6V
工作温度 -40℃~85℃

通过这些关键信息,可以初步判断该芯片是否满足项目需求,并为后续详细选型和开发打下基础。

2. AMR单片机启动流程分析

启动单片机机是我们的第一步。我们常用的单片机内核基本上都采用ARM架构,对AMR架构有一定的理解,也许有助于我们后续开发过程中问题的定位与分析?

咱也不过是拾人牙慧,只能浮于表面罢。

2.1 ARM架构

简单理解就是,ARM架构是芯片厂商基于ARM内核设计的CPU核。其中ARM内核负责执行指令,具体功能由芯片外设实现。芯片厂商在ARM内核外集成硬件模块(如GPIO、UART、ADC等),这些外设才是实际控制LED、串口通信、ADC采样的部分。我们需要通过寄存器编程或厂商提供的库函数(如STM32的HAL库)来操作这些外设,ARM内核只是帮我们运行这些代码。

待办_跳转链接

2.2 启动流程分析

这里是从网上抄来的ARM单片机(如 Cortex-M 系列)的典型启动流程:

上电复位:系统上电后,处理器复位,跳转到复位向量执行启动代码。 硬件初始化:初始化堆栈指针,设置程序计数器,禁用中断。 启动代码执行:启动代码完成基本的系统初始化,如内存初始化、堆栈指针设置、数据段和 BSS 段处理等。 系统时钟和外设初始化:设置系统时钟源,初始化关键外设,为主程序提供支持。 跳转到主程序:启动代码完成后,跳转到主程序(main()函数),开始执行用户代码。 中断处理与系统运行:系统在主程序中运行,处理器根据中断请求响应外部或内部事件。

此处参考[赤诚Xie]《MCU的启动到bootloader原理详解》1

正如[作者B]所述:

“这里是引用的原文内容……” ——《文章标题》1

graph TD
    A[开始] --> B{判断}
    B --> C[是]
    B --> D[否]
    C --> E[结束]
    D --> E
@startuml
left to right direction

actor 用户 as A
component  "测试工装线控器" as B
rectangle "测试工装板" as C
rectangle "待测主板" as D

A --> B
B <--> C  : 485通信
C --> D : 弹性顶针
@enduml
@startmindmap
+ <&flag>OS
++ Unix
++ Linux
++ MacOS
** Windows
*** Windows 95
*** Windows 98
*** Windows 7
*** Windows 8
*** Windows 10
++ FreeBSD
++ Other
@endmindmap

2. 时钟系统

3. 复位电路

4. 中断系统

5. GPIO复用

6. DMA控制器

低功耗模式

电源控制

flash编程

ESD和锁存保护

7. 其他常见基本外设

2. I/O口

I/O口既可用作输入,也可用作输出。

本质上单片机就是对I/O口的控制,无论单片机对外界进行何种控制,都是通过I/O口进行的。接受外部的控制,通过I/O来感受外部的电压。

1.1. I/O口结构

推完输出:可以直接输出高电平或低电平,无需外部上拉电阻。本质上由两个MOS管(PMOS和NMOS)组成,一个负责拉高,一个负责拉低。

开漏输出:依赖上拉电阻输出高电平,如果不接上拉电阻,就是高阻态。只有下拉NMOS管,无上拉PMOS管。高电平需依赖外部上拉电阻。

浮空输出:电平状态不确定,易受噪声干扰。输入引脚既不接上拉也不接下拉,处于高阻态(无驱动能力)。

PS:上拉电阻就是将不确定的信号通过一个电阻拉到高电平,同时此电阻起到一个限流的作用,下拉就是下拉到低电平。

常见问题&解决办法

单片机程序烧录过程中“串电压”问题

像JLink、STLink这类仿真器一般有提供供电引脚给单片机供电。但是仿真器和目标设备(如MCU开发板)分别独立供电时,两者之间的电源系统因电势差或共地问题导致的电压异常,轻则通信失败、重则器件烧毁。

解决办法:所以在程序烧录过程中需要注意电源供电问题,确保统一供电(优先使用目标板为仿真器供电,或关闭目标板电源,仅通过仿真器供电。 )、或共地。

“ARM仿真器”问题

公司用的ARM仿真器,本来正常使用结果今天这个烧录器一直闪绿灯,我也识别不到JLink,看了下网上的说法,以为是驱动出问题了?尝试重新装了驱动,没有效果。最后换了一个仿真器,能够正常识别。

但是问题来了,重装驱动后,发现程序Keil烧录按钮灰掉了,并且设置JLink会弹出,不能加载JL2CM3.dll驱动!

尝试改了环境变量,无果。

参考 https://zhuanlan.zhihu.com/p/656208641 这篇文章解决。

解决方法:是由于装Jlink驱动的时候,勾选了JLinkARM.dll装进Keil MDK里面去了导致。可以下载老版的Keil,把“Keil安装目录\ARM\Segger”里的库都替换。但是我发现网上下载下来的JLink库太老了,找不到我现在用的芯片,于是直接从新版JLink,找到对应的库替换进去,解决。

不过JLink提示更新的弹窗,更新了就不弹了。

参考资料

results matching ""

    No results matching ""