You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

229 lines
9.6 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

> [!CAUTION]
>
> 我们用的开发板和书上的不一样,另外开发环境不太一样,因此这一章内容我们主要介绍开发板和开发环境。
# 1. STM32微处理器概述
## 1.1. Cortex-M 家族
![image-20240831110223219](./img/image-20240831110223219.png)
使用ARM Cortex-M 内核由意法半导体生产的STM32F1系列。STM32被广泛应用于各种消费电子产品、工业控制、汽车领域有完善的产品线和开发工具。
## 1.2. STM32F103C8T6
- Arm® 32-bit Cortex ®-M3 CPU core
- Memories
- 64 or 128 Kbytes of Flash memory
- 20 Kbytes of SRAM
- 2x 12-bit, 1 μs A/D converters (up to 16 channels)
- DMA
- 7-channel DMA controller
- Peripherals supported: timers, ADC, SPIs,
- I2Cs and USARTs
- Up to 80 fast I/O ports
- Debug mode Serial wire debug (SWD) and JTAG
- Seven timers
- Three 16-bit timers, each with up to 4 IC/OC/PWM or pulse counter and quadrature (incremental) encoder input
- 16-bit, motor control PWM timer with dead-time generation and emergency stop
- Two watchdog timers (independent and window)
- SysTick timer 24-bit downcounter
- Up to nine communication interfaces
- Up to two I2C interfaces (SMBus/PMBus®)
- Up to three USARTs (ISO 7816 interface,
- LIN, IrDA capability, modem control)
- Up to two SPIs (18 Mbit/s)
- CAN interface (2.0B Active)
- USB 2.0 full-speed interface
### 1.2.1. 封装
![image-20240831135822412](./img/image-20240831135822412.png)
### 1.2.2. 芯片引脚p17
![image-20240831135846786](./img/image-20240831135846786.png)
- 电源VDD、VSSVDDA、VSSA
- 复位NRST
- 时钟OSC高速和低速高速8M低速32.768K,主要用于时钟
- 调试JATG下面分析开发板时会标出
- 通用GPIO
参考资料:
- [如何在STM32中获得最佳ADC精度](<../../STM32官方手册/AN2834 - 如何在STM32中获得最佳ADC精度.pdf>)
- [STM32中文参考手册](../../STM32%E5%AE%98%E6%96%B9%E6%89%8B%E5%86%8C/STM32%E4%B8%AD%E6%96%87%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C.pdf)
- [STM32CubeIDE入门指南](../../STM32%E5%AE%98%E6%96%B9%E6%89%8B%E5%86%8C/STM32CubeIDE%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97.pdf)
- [STM32CubeMX用户手册](../../STM32%E5%AE%98%E6%96%B9%E6%89%8B%E5%86%8C/STM32CubeMX%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C.pdf)
- [STM32F1xxHAL库与LL库手册(英文)](../../STM32%E5%AE%98%E6%96%B9%E6%89%8B%E5%86%8C/STM32F1xxHAL%E5%BA%93%E4%B8%8ELL%E5%BA%93%E6%89%8B%E5%86%8C(%E8%8B%B1%E6%96%87).pdf)
- [STM32F10xx硬件开发应用笔记](../../STM32%E5%AE%98%E6%96%B9%E6%89%8B%E5%86%8C/STM32F10xx%E7%A1%AC%E4%BB%B6%E5%BC%80%E5%8F%91%E5%BA%94%E7%94%A8%E7%AC%94%E8%AE%B0.pdf)
- [STM32F103中文参考手册](../../STM32%E5%AE%98%E6%96%B9%E6%89%8B%E5%86%8C/STM32F103%E4%B8%AD%E6%96%87%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C.pdf)
- [STM32F103C8规格书](../../STM32%E5%AE%98%E6%96%B9%E6%89%8B%E5%86%8C/STM32F103C8%E8%A7%84%E6%A0%BC%E4%B9%A6.pdf)
- [STM32国产替代者](https://www.eeworld.com.cn/mcu/eic676433.html)
# 2. KeysKing开发板
两个刚毕业的大学生做的项目,非常适合教学使用,有丰富的扩展。[有视频教材](https://www.bilibili.com/video/BV12v4y1y7uV/?spm_id_from=333.999.0.0&vd_source=3c8e333d6657680a469ddf0238f01d6a)。
![Alt text](../../%E5%BC%80%E5%8F%91%E6%9D%BF%E8%B5%84%E6%96%99/%E6%8A%98%E9%A1%B5%E5%B0%81%E9%9D%A2%E5%B0%81%E5%BA%95.png)
- 自己负责自己的硬件,损坏需要赔偿
- 每个盒子中有一张表格,请核对表格仔细检查附件
- 领用与归还都需要在表格签字
- 大多情况下不需要使用附件,如果要使用附件,请确保电源不要接错烧板子
- B站有视频有兴趣的朋友可以看视频做更多的实验
![Alt text](../../%E5%BC%80%E5%8F%91%E6%9D%BF%E8%B5%84%E6%96%99/%E6%8A%98%E9%A1%B5%E5%86%85%E9%9D%A2.png)
## 2.1. 开发板硬件简单解析
[学习板原理图](../../%E5%BC%80%E5%8F%91%E6%9D%BF%E8%B5%84%E6%96%99/%E5%AD%A6%E4%B9%A0%E6%9D%BF%E5%8E%9F%E7%90%86%E5%9B%BE.pdf)
如何看懂电路图?简单,标号一样的就是一样的,或者是相连接的。
### 2.1.1. 供电
![image-20240831141714077](./img/image-20240831141714077.png)
AP2112是一个线性稳压器件把5V降压成3.3V为MCU供电。因此开发板有两套电压5V和3.3V请注意区分。5V电压哪里来
通过TYPE-C接口接计算机的USB接口其中的VBUS就是5V
![image-20240831142937858](./img/image-20240831142937858.png)
TYPE-C连接到 CH343P USB转串口为计算机提供了一个串口该串口与MCU的PA2、PA3连接为计算机和开发板的串口建立了通信。
![image-20240831142857969](./img/image-20240831142857969.png)
另外调试接口的SWD中的VSWD也是计算机USB的5V。
![image-20240831143434835](./img/image-20240831143434835.png)
最后看一下电流防倒灌电路:
![image-20240831143539169](./img/image-20240831143539169.png)
VBUS是TYPE-C的5VVSWD是调试接口SWD的5V通过防倒灌电路使得这两路电源都进入AP2112线性稳压的5V端口为开发板提供3.3V电压。防倒灌电路等效为一个二极管使得两个5V电源可以不干扰同时供电
### 2.1.2. 时钟和复位
![image-20240831143931440](./img/image-20240831143931440.png)
1的位置是两个时钟低速32.768k)和高速(8M)。其中32.768k 是为计时提供精确的脉冲8M高速通过MCU内部倍频后可以为MCU内部提供高达72M的核心时钟。
> 为什么需要32.768k的时钟?
2位置是复位电路低有效很简单该端口有个电容为MCU上电的瞬间提供一个低电位使得MCU复位如果按下按钮该端口被拉低MCU强制复位。
> 复位电容的工作原理是什么?
>
> 为什么复位会用低电位,而不用高电位复位?
上述是开发板的主要核心电路分析,后面的课程当中对用到的电路进行分析。要学会看电路的原理图。
# 3. 开发环境
[视频:安装stm32CubeIDE](https://www.bilibili.com/video/BV1HM411b78E/?spm_id_from=333.788&vd_source=3c8e333d6657680a469ddf0238f01d6a)
书上介绍的开发环境是Keil开发环境这个在51中也使用过但是该软件是属于商业软件需要购买。因此我们使用意法半导体提供的免费开发环境stm32cubeide其开发过程与书上讲的几乎完全一致且集成度更好更便于使用。
下载 [stm32cubeide](https://www.st.com.cn/zh/development-tools/stm32cubeide.html) 。
另外,后续的开发中会使用到串口,推荐开源的 xtools
下载 [xtools](https://gitee.com/x-tools-author/x-tools) 。
> 注意,虽然下载不需要用户,但是使用需要登录!否则无法下载相应的芯片资源,无法进行编译!在下图中 MyST 菜单中登录后才能进行相应的开发。
STM32CubeIDE集成了STM32CubeMX芯片选型、配置、代码生产等生成的框架可以供多种IDE使用基于Eclipse的集成开发环境。安装完成后界面如下
![image-20240831152413351](./img/image-20240831152413351.png)
一般的开发流程如下:
1. 目标选择
2. 引脚分配
3. 外设配置
4. 时钟配置
5. 工程配置
6. 程序编写
## 3.1. 示例LED闪烁
### 3.1.1. 新建项目
File->New->STM32 Project 出现以下界面:
![image-20240831155148005](./img/image-20240831155148005.png)
在1位置输入 103C8T6 后会在2位置出现芯片选择选择第一个就好然后点击3位置的Next。
![image-20240831155320004](./img/image-20240831155320004.png)
在1位置输入项目名称然后在2位置点击 Next。
![image-20240831155431546](./img/image-20240831155431546.png)
选择开发固件其实就是函数编程的接口版本类似C开发中使用的三方库一般不用更改直接点击2位置的Finish完成。如果遇到下图对话框选择Yes。
### 3.1.2. 硬件配置
![image-20240831155740992](./img/image-20240831155740992.png)
上图是说IDE试图打开设备配置的配置方案询问你是否需要打开。然后下面的界面对芯片进行配置。
![image-20240831160349011](./img/image-20240831160349011.png)
查看RGB硬件的端口暂时使用PA6作为需要闪烁的LED。鼠标点击PA6 选择“GPIO_Output”让PA6作为输出端口接下来鼠标右键点击PA6选择Enter User Label。注意User Label 是给端口起一个更清晰的别名这个别名在编程的时候被当成是常量因此名字需要符合C语言常量的规则。
![image-20240831160214958](./img/image-20240831160214958.png)
好了,目前我们的芯片看起来是这样:
![image-20240831163313326](./img/image-20240831163313326.png)
PA6变绿并且有个图钉表示这个端口已经被配置和占用。使用ctl+s 保存更改IDE会询问是否生成代码框架当然选择Yes。
### 3.1.3. 加入代码
打开 main.c 大约在101 行左右输入以下代码。注意注释代码是IDE自动生成的不要删除
```c
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_Delay(1000);
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
}
/* USER CODE END 3 */
}
```
代码一定需要在 /* USER CODE BEGIN 3 */ 和 /* USER CODE END 3 */ 之间因为IDE自动维护代码否则下一次你重新配置硬件后重新生成代码你自己的代码有可能丢失因此请仔细阅读注释文件。
接下来点击运行按钮:
![image-20240831192436902](./img/image-20240831192436902.png)
可能会出现运行配置的界面:
![image-20240831164008506](./img/image-20240831164008506.png)
注意接口应该是SWD一般不用修改直接OK后观察开发板的效果。
### 3.1.4. 调试