增加串口例子

master
高宏宇 12 months ago
parent e5e5bef955
commit b1f2fb3fa7

@ -1,6 +1,6 @@
>我们用的开发板和书上的不一样,另外开发环境不太一样,因此这一章内容我们主要介绍开发板和开发环境。
> 我们用的开发板和书上的不一样,另外开发环境不太一样,因此这一章内容我们主要介绍开发板和开发环境。
[TOC]
[toc]
# 1. STM32微处理器概述
@ -8,13 +8,13 @@
![image-20240831110223219](./img/image-20240831110223219.png)
使用ARM Cortex-M 内核由意法半导体生产的STM32F1系列。STM32被广泛应用于各种消费电子产品、工业控制、汽车领域有完善的产品线和开发工具。
使用ARM Cortex-M 内核由意法半导体生产的STM32F1系列。STM32被广泛应用于各种消费电子产品、工业控制、汽车领域有完善的产品线和开发工具。
## 1.2. STM32F103C8T6
- Arm® 32-bit Cortex ®-M3 CPU core
- Memories
- 64 or 128 Kbytes of Flash memory
- 64 or 128 Kbytes of Flash memory
- 20 Kbytes of SRAM
- 2x 12-bit, 1 μs A/D converters (up to 16 channels)
- DMA
@ -50,11 +50,9 @@
- 调试JATG下面分析开发板时会标出
- 通用GPIO
参考资料:
- [如何在STM32中获得最佳ADC精度](<../../STM32官方手册/AN2834 - 如何在STM32中获得最佳ADC精度.pdf>)
- [如何在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)
@ -64,8 +62,6 @@
- [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)。
@ -120,18 +116,27 @@ VBUS是TYPE-C的5VVSWD是调试接口SWD的5V通过防倒灌电路使得
![image-20240831143931440](./img/image-20240831143931440.png)
时钟电路P20
时钟电路与书上的开发板不一致但是也分为4个时钟。请注意频率和书上的不同
1. LSI内部低速时钟40k
2. HSI内部高速时钟 8M
3. LSE外部低速时钟 32.768k
4. HSE外部高速时钟 8M。
1的位置是两个时钟低速32.768k)和高速(8M)。其中32.768k 是为计时提供精确的脉冲8M高速通过MCU内部倍频后可以为MCU内部提供高达72M的核心时钟。
> 为什么需要32.768k的时钟?
复位电路:
2位置是复位电路低有效很简单该端口有个电容为MCU上电的瞬间提供一个低电位使得MCU复位如果按下按钮该端口被拉低MCU强制复位。
> 复位电容的工作原理是什么?
>
> 为什么复位会用低电位,而不用高电位复位?
上述是开发板的主要核心电路分析,后面的课程当中对用到的电路进行分析。要学会看电路的原理图。
# 3. 开发环境
@ -164,8 +169,6 @@ VBUS是TYPE-C的5VVSWD是调试接口SWD的5V通过防倒灌电路使得
> 注意,虽然下载不需要用户,但是使用需要登录!否则无法下载相应的芯片资源,无法进行编译!在下图中 MyST 菜单中登录后才能进行相应的开发。
STM32CubeIDE集成了STM32CubeMX芯片选型、配置、代码生产等生成的框架可以供多种IDE使用基于Eclipse的集成开发环境。安装完成后界面如下
![image-20240831152413351](./img/image-20240831152413351.png)
@ -190,8 +193,6 @@ STLink 调试器版本需更新,否则可能无法下载程序和进行调试
3. Refresh Device List 的左边应该出现 ST-LINK/V2 的选项然后点击1所示的位置出现2位置的信息最后点击3位置更新固件。
## 3.4. 示例LED闪烁
### 3.4.1. 新建项目
@ -220,8 +221,6 @@ File->New->STM32 Project 出现以下界面:
查看RGB硬件的端口暂时使用PA6作为需要闪烁的LED。鼠标点击PA6 选择“GPIO_Output”让PA6作为输出端口接下来鼠标右键点击PA6选择Enter User Label。注意User Label 是给端口起一个更清晰的别名这个别名在编程的时候被当成是常量因此名字需要符合C语言常量的规则。
![image-20240831160214958](./img/image-20240831160214958.png)
好了,目前我们的芯片看起来是这样:
@ -314,7 +313,7 @@ Stm32CubeIDE 其实是由多个工具所构成:
在IDE中双击后缀为ioc的文件就会打开 Stm32CubeMX 的界面,如果进行了修改,保存的时候会询问是否重新生成代码框架。
这个工具还有一个功能是维护 MCU Packages 就是不同系列MCU的底层框架代码和一些附加功能代码网络、USB、操作系统等。通过 Help 菜单中的 Manage Embedded Software Packages 功能可以打开。可以看到支持的MCU系列的相关软件包。
这个工具还有一个功能是维护 MCU Packages 就是不同系列MCU的底层框架代码和一些附加功能代码网络、USB、操作系统等。通过 Help 菜单中的 Manage Embedded Software Packages 功能可以打开。可以看到支持的MCU系列的相关软件包。(P48)
![image-20240901084639078](./img/image-20240901084639078.png)
@ -370,8 +369,6 @@ main.h 中重点看看 60 行左右:
生成的代码对PA5端口进行了初始化。以上的代码都是自动生成的一般不用去关心框架简化了我们的开发工作。
用户逻辑代码在main.c 大约100行左右
```c
@ -396,10 +393,12 @@ HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); 两个参数,第一个代表端口
> 其实框架还生成了很多工作包括MCU的时钟初始化、总线初始化、内存初始化等工作。这些工作都使用 Stm32CubeMX 的配置进行代码是自动生成的一般不用关心。在后续的工作当中我们还会用到很多Stm32CubeMX的配置功能。
## 4.4. Stm32CubeMX 基本功能
## 4.4. Stm32CubeMX 的使用P59
![image-20240901123125992](./img/image-20240901123125992.png)
![image-20240902154317946](./img/image-20240902154317946.png)
该工具四大功能:
1. Pinout & Configuartion端口外设和中间件操作系统、网络协议栈、USB驱动等配置
@ -409,7 +408,96 @@ HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); 两个参数,第一个代表端口
一般最常用的就是 Pinout Configuartion 和 Clock Configuration
# 5. 实践任务
# 5. 串口通信演示p83
> 注意书上使用的开发环境是Keil而我们使用的是 STM32CubeIDE另外开发板也不一样下面会说明。
上一个LED的演示很简单很多地方其实没有进行配置在串口通信中我们会更详细的学习如何进行开发。
## 5.1. 硬件连接
![image-20240902160946444](./img/image-20240902160946444.png)
这次使用1和2两个接口
1. 通过一条type-c连接线接入开发机的USB用于在开发机上虚拟一个串口。可能需要安装[驱动](../../%E9%A9%B1%E5%8A%A8/CH343SER%E4%B8%B2%E5%8F%A3%E9%A9%B1%E5%8A%A8.EXE)。
2. 和ST-Link连接后接入开发机的另外一个USB用于程序下载和调试。
查看1对应的端口说明
![image-20240902162048016](./img/image-20240902162048016.png)
知道串口的两个引脚是 PA2和PA3这个等一下使用。
## 5.2. 项目设置
请参考[示例LED闪烁](#3.4. 示例LED闪烁)建立一个项目命名为uart。
### 5.2.1. 时钟设置p66
如果我们打开时钟配置界面会发现:
![image-20240902165325358](./img/image-20240902165325358.png)
LSE和HSE全部都是灰色而LSI和HSI都是蓝色这表示目前芯片的配置使用芯片内部的时钟如果我们要使用外部时钟需要在 Pinout & Congiguration 中使能相应的配置。
![image-20240902162558093](./img/image-20240902162558093.png)
首选选择 Pinout & Congiguration 功能在左边的列表2位置中选择 RCC然后右边出现的选单3位置下拉列表中把HSE和LSE全部选择成外部晶体如上图所示。这时右边的芯片图相应的引脚成绿色表示被占用。
![image-20240902162840075](./img/image-20240902162840075.png)
回到 Clock Configuration ,进行一下设置:
![image-20240902165643477](./img/image-20240902165643477.png)
这样就可以使用外部时钟了,外部时钟的好处是更精确。这里的图叫做时钟树,我们先不关心时钟树的具体内容,先就这么设置,后面用到的时候会详细讲解。
### 5.2.2. 设置调试模式
在 Pinout & Congiguration 的左边,选择 System Core 中的 SYS修改以下配置
![image-20240902170021422](./img/image-20240902170021422.png)
调试方式选择 Serial Wire。其实不用设置也可以缺省的调试方式就是 Serial Wire这个就是我们 ST-Link 使用的调试方式。
### 5.2.3. USART2 配置
通过开发板提供的资料我们知道串口使用PA2和PA3但是这两个引脚对应哪个串口
在芯片视图中点击PA2
![image-20240902170331065](./img/image-20240902170331065.png)
看到了吗使用的是USART2这个串口接下来对串口进行配置。
![image-20240902170531628](./img/image-20240902170531628.png)
在 Pinout & Congiguration 的左边选择Connectivity 的 USART2并在右边的 Mode 选项中选择 Asynchronous (异步)看看下面的串口参数4的位置我们知道
- 波特率115200
- 数据位长度8位
- 校验:无
- 停止位1
记住这些参数,在开发机中的串口监视也需要采用同样的参数才能收到数据。当设置完成后,使用 ctl+s 保存,会提示是否需要生成代码,当然要生成。
## 5.3. 软件编写
在 main.c 函数的大约 100 行左右修改代码如下:
```c
while (1) {
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_Delay(1000);
HAL_UART_Transmit(&huart2, msg, strlen(msg), 100);
}
```
# 6. 实践任务
1. 按照本章的介绍,独自完成 Blink 点亮小灯的程序;
2. Eclipse 对 C语言的代码解析和语法分析没有 clion 好,有能力的同学可以尝试使用 clion 和 stm32cube 来进行开发和调试。
2. Eclipse 对 C语言的代码解析和语法分析没有 clion 好,有能力的同学可以尝试使用 clion 和 stm32cube 来进行开发和调试。

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Loading…
Cancel
Save