1.2 初识单片机
STM32系列单片机
一张图读懂单片机命名,本次培训使用的是最基础的STM32F103C8T6
.png)
拿到单片机后,最重要的是去搜索其==原理图==和所拥有的外设资源
https://blog.csdn.net/fantastic_sky/article/details/110229474
对于单片机的详细原理构成这里不做详细讲解,初学者只需知道单片机包含的外设资源就可(GPIO,USART,ADC...)
单片机的简单构成(这部分看不懂也没事)
- 核心处理器(CPU)
- 采用32位数据总线和地址总线
- 常见架构如ARM Cortex-M系列、RISC-V等
- 具有更强大的运算能力和指令集
- 存储器
- Flash存储器:用于存储程序代码,掉电不会丢失
- SRAM:用于存储运行时数据,掉电时全部丢失
- ROM:存储引导程序和基本配置
- 时钟系统
- 主时钟(通常为外部晶振)单片机的心跳,每一次跳动都代表数据更新(新陈代谢)。
- 外设接口
- GPIO(通用输入输出口)
- UART/USART(串口通信)
- SPI(串行外设接口)
- I2C(双线串行接口)
- ADC(模数转换器)
- DAC(数模转换器)
- USB接口
- CAN总线接口等
- 中断控制器
- 支持多级中断优先级
- 向量中断控制
- 快速中断响应
我们如何通过代码控制单片机
为了方便,芯片厂商通常会提供一个头文件(Header File),里面已经帮你把所有难记的寄存器地址都用好记的名字(如 GPIOA_ODR)定义好了。你只需要引入这个头文件,就可以直接使用这些名字,而不用去记那些复杂的十六进制地址了。这让编程变得更加简单和直观。
这个就是我们常说的库函数
库函数
常见的库函数包含标准库和HAL库(The hardware abstraction layer)
标准库
ST公司就为每款芯片都编写了一份库文件,也就是工程文件里stm32F1xx.....之类的。在这些.c .h文件中,包括一些常用量的宏定义,把一些外设也通过结构体变量封装起来,如GPIO口时钟等。所以我们只需要配置结构体变量成员就可以修改外设的配置寄存器,从而选择不同的功能。是学习STM32接触最多的一种开发方式,我们这次培训并不使用这类库,我也就不多阐述了。
HAL库
HAL库是ST公司目前主力推的开发方式,全称就是Hardware Abstraction Layer(抽象印象层)。库如其名,很抽象,一眼看上去不太容易知道他的作用是什么。它的出现比标准库要晚,但其实和标准库一样,都是为了节省程序开发的时期,而且HAL库尤其的有效,如果说标准库把实现功能需要配置的寄存器集成了,那么HAL库的一些函数甚至可以做到某些特定功能的集成。也就是说,同样的功能,标准库可能要用几句话,HAL库只需用一句话就够了。并且HAL库也很好的解决了程序移植的问题,不同型号的stm32芯片它的标准库是不一样的,例如在F4上开发的程序移植到F3上是不能通用的,而使用HAL库,只要使用的是相通的外设,程序基本可以完全复制粘贴,注意是相通外设,意思也就是不能无中生有,例如F7比F3要多几个定时器,不能明明没有这个定时器却非要配置,但其实这种情况不多,绝大多数都可以直接复制粘贴。而且使用ST公司研发的STMcube软件,可以通过图形化的配置功能,直接生成整个使用HAL库的工程文件,可以说是方便至极,但是方便的同时也造成了它执行效率的低下,在各种论坛帖子真的是被吐槽的数不胜数。
而我们战队主要使用的是HAL库,主要看重其配置方便,而且RM中大多数电控资源也都是HAL库。
.png)
工作流程
.png)