学习知识:先广度,后深度
一、应该知道的常识
1.ARM(内核)
- ARM:是一个模糊词,它可以代表ARM公司、ARM内核=ARM处理器。
- 内核和框架:框架像原理图,内核像PCB,一种框架可以画多个版本PCB。
- ARM处理器 :英国ARM公司设计了ARM处理器,我们通常说的ARM就是指ARM处理器。ARM处理器只是众多中央处理器- (CPU)中的一种。
- Cortex 处理器:Cortex是ARM公司一个系列处理器的名称。例如:cortex M0 M3 M4 M7
2.单片机=MCU=微控制器(芯片)
- 单片机:是集成电路芯片。包含了中央处理器CPU(例如32单片机包含了ARM处理器)、RAM、ROM…
- STM32单片机:是意法半导体公司设计的嵌入式单片机。(单片机型号有:STM32 F0 F1 F2 F3 F4 F7 H7)。CPU采用的是ARM处理器。(STM32F1采用cortex-M3内核、F4采用cortex-M4内核、F7采用cortex-M7内核、H7采用双核M7+M4)
3.电路板(板卡)
4.嵌入式系统(应用)
- 嵌入式系统最大的特点是根据产品的需要设计功能,没有过多的功能,最大限度降低成本。低成本+高性能,所以才有那么多低端的单片机,成本低,但能满足产品需求。
- 嵌入式系统 = 单片机板卡 + 嵌入式操作系统 。(不一定非要操作系统,一切都是为了低成本,便开发)
5.CPU性能
- DMIPS、MIPS:都是用来测试CPU的几种不同方法不同程序,仅供参考,不能全信。
8.倍频、分频
- 倍频:把外部晶振频率提升到CPU需要的高频率。
- 分频:把高频降下去,给单品机其他部分提供不同的频率。
- PLL:倍频器。锁相环。
- Prescaler:预分频器。
9.TTL和CMOS电平
- 电平就是人为规定的一种规则,用01逻辑信号代表高低电压信号。
- 常见的电平类型:TTL、CMOS、LVTTL、LVCOMS、RS232、RS485等
- TTL:VCC=5V。
- LVTTL(Low Voltage):VCC=3.3V。VIH>=2V,VIL<=0.8V。
- TTL输入引脚悬空时,默认高电平。
- CMOS:VCC=+5~+15
- 不同系统相连,比如单片机、DSP、FPGA等,需要查下手册,看看电平定义。
10.常见编译错误 ?
11.仿真器
- 程序下载到仿真器里,不是Flash里。没用过
12.精简指令集
- 指令集:软件和硬件转换的点。
- 精简指令集和复杂指令集,电脑是复杂指令集,硬件比较庞大复杂功耗大。
- ARM处理器是32位(兼容16位)精简指令集。
13.ST、ARM官网
- ST官网: link
- 通过看公司官网能看出他是做啥的,面向的客户是谁。
- ST就是面向开发者,官网资料多一些,页面也比较友好。ARM就是面向芯片工厂,官网感觉就不太友好。
14.STM32命名规则
- ST代表公司名。M代表微处理器。32代表ARM32位处理器。F表示性能。103系列。后面几位表示引脚数、内存大小、封装类型、工作温度。
- 总结:STM32F103几位就决定了一款芯片。C8T6几位决定其引脚数和内存大小等。
15.阅读芯片手册
- 先浏览目录标题,看下有些什么东西。
- 主要还是图表
- 11页:单片机内部模块框图
- 12页:时钟树
- 13页及后面:引脚图
- 读图:梯形是选择器、粗线是总线、细线是单引脚、线内为单片机内部。
16.软件和硬件如何联系
- 软件就是指用户程序,目前有寄存器、库函数、HAL库三种。不论哪种,最终都是在操作 地址和状态,最终操作单片机。
- SRAM里有单片机内置的功能配置寄存器,最终去操作硬件。
- 详细查看数据手册 存储器映像、寄存器地址表。
17.程序下载到SRAM还是FLASH
- 一开始,代码、常量、全局变量 都是下载到flash里的。
然后程序开始运行后,全局变量就到sram里了,代码和常量还在flash里 - 参考大佬文章:https://blog.csdn.net/yangkuiwu/article/details/78219995
二、单片机的内部功能
(第一部分的图都放最后,试试第二部分插在文章中间,之前感觉插入图会很乱,现在感觉没有图太抽象)
0.将单片机内部功能划分为三部分
- 核心功能:内核、存储器、时钟。(类似电脑的CPU、内存条、硬盘)
- 重要功能:外设。
- 附加功能:CRC、芯片号。
1.核心功能:内核
- 采用ARM32位处理器,cortex-M3。最高工作频率72MHz。
2.核心功能:存储器
- SRAM和FLASH。STM32F103中等容量系列,64K或128K的FLASH,20K的SRAM。
- 两者主要区别是:掉电能否保存、速度快慢。
3.核心功能:时钟
- HSE外部高速晶振振荡器:4~16MHz,用作系统时钟。
- LSE外部低速晶振振荡器:32khz,用于RTC。
- HSI内部高速RC振荡器:8MHz,用作系统时钟。
- LSI内部低速RC振荡器:40KHz,用于RTC。
- 总结:外接的精准,但贵。
- 时钟分类:内核与外设时钟、独立时钟
4.重要功能:低功耗
5.重要功能:ADC
- 2个12位ADC,共用16个外部通道。
- 可以使用DMA
6.重要功能:DMA
- 7通道DMA,支持外设有定时器、ADC、USART、I2C、SPI。
7.重要功能:GPIO
- I/O:input和output。引脚不等于IO,IO指的是能输入输出的引脚,引脚还包括电源脚之类。C8T6有48个引脚,其中37个IO口。
- GPIO:32里的定义。就是通用IO口。
- 输出电流最大:8ma,输入电流最大:20ma。所以对LED的驱动方式就有推挽驱动和灌电流驱动,关电流驱动就会更亮一点。
- 32里输入输出方式有:
- 四种输入:模拟、浮空、上下拉。
- 四种输出:推挽、开漏,复用推挽、开漏。(推挽是大电流输出,有驱动能力,开漏无驱动能力。)
8.重要功能:调试
- 有SWD和JTAG,是内嵌在ARM内核里的。
9.重要功能:定时器
- 7个定时器,3个普通16位,1个高级16位,2个开门狗12位、7位,1个嘀嗒定时器。
10.重要功能:通信接口
- 9个通信接口,3个USART、2个I2C、2个SPI、一个CAN、一个USB2.0。
- USART1 通信速率4.5M每秒,另外两个2.25。
- I2C通信速度:
- SPI通信速度18M每秒。
- CAN通信速度1M每秒。
- USB通信速度12M每秒。
11.RTC
12.NVIC
13.EXTI
14.自举模式
- 正常情况都是从FLASH启动。ISP下载时从系统启动。调试时从SRAM启动,下载程序快,但是断电丢失。
11.附加功能:CRC
- CRC用于数据正确性的校验。
12.附加功能:芯片号
- 每个芯片有一个唯一的96位的序列号。
三、实际编程
0.软件准备
- keil5、Jlink驱动
1.需要会的C知识
- #if #endif
enum
char8 int16 long float32
typedef
struct - 32位MCU下,字=4字节