第二节:单片机开发模式介绍(黄老师)

本文提供了一个快速入手STM32F103C8T6芯片的实用步骤,包括搜索资料、阅读数据手册、参考开发板、理解外设和寄存器、存储结构、编程示例和使用库开发。详述了如何通过最小系统配置、控制GPIO和LED灯,以及不同开发方式的对比和STM32CubeMX的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、上手思路

假如在实际开发过程中,我们拿到一个没有接触过或者不是很熟悉的芯片,我们应该如何去快速上手这个芯片呢?

以我们本次使用的芯片STM32F103C8T6为例,思路如下:

1.上网搜索一下芯片型号

现在其实很多常规的芯片别人都已经使用过了,并且可能对其进行了总结并发在网上,所以我们可以在百度上直接搜索芯片的型号,往往可以看到很多相关文章,有的甚至都有百度百科,例如举例的这款。
在这里插入图片描述
除了百度百科,还可以看到很多优快云的文章,都是别人总结整理的,通过看这些内容,我们可以快速建立起对于这款芯片的一些基本概念。

2.去芯片原厂官网,下载资料

通过第一步的搜索,我们可以看到这款芯片是ST公司推出的芯片,所以我们去原厂的官网搜索这款芯片,找到相关资料。
在这里插入图片描述
可以看到,相关的文件资源有很多,这里我们重点要看的是 《数据手册》《参考手册》。中文翻译可能不一样,这里产品规格也就是数据手册。我们也根据英文去找,分别是Product SpecificationsReference Manuals
除了这些文档资源,我们还可以在官网上看到很多工具软件资源等等,根据自己的需要下载即可。
数据手册(产品规格):包含该芯片型号的整体描述、引脚描述、内存映射、电气特性、封装信息、订购信息等。在芯片选型、原理图设计、PCB设计、代码编程等开发环节,都会需要该文档,总结来说就是硬件部分会使用到;
参考手册:包含该芯片型号各种外设寄存器的详细描述,软件编程时会用到。

3.下载公板或者其他开发板配套资料

根据上面的两个手册,让我们从0开始去设计,其实是一件很麻烦的事情,在实际开发中可能时间上不允许,这时候我们可以去找公板,公板就是官方原厂根据这款芯片设计的开发板,公板价格昂贵并且不好购买,所以我们一般是在淘宝上搜索其他人利用该款芯片设计的开发板。
在这里插入图片描述
Boards即为开发板。可以看到,共有两款公板。
一般我们是直接在网上搜素其他开发板。例如本型号的芯片我们就可以搜索到韦老师设计的开发板,同样的,像STM32F1系列的开发板,像野火,正点原子都有做,当然,其他型号的一般也可以搜到。

找到别人设计的开发板后,我们就可以参考别人的原理图

4.根据《原理图》分析硬件

那么,有了原理图后,要怎么用呢?

我们要参考原理图中的最小系统
在这里插入图片描述
这里就要介绍到最小系统的概念了。

最小系统:
在这里插入图片描述
注:这个最小系统其实也没有明确的定义,像调试下载部分和启动选择部分,对于51单片机,是不需要的。所以一般是指电源,时钟,和复位电路。

参考其他开发板的原理图,设计自己的最小系统,然后再根据自己的需求设计出外围电路即可。最小系统中电子元件的规格选择可以不必照搬,我们可以在芯片手册中找到规定的规格范围,再根据自己的实际情况设计即可。

5.根据示例程序和《参考手册》编写程序

最后就是根据别人提供的示例程序或者参考手册中的示例代码,编写所需程序。

总结:
在这里插入图片描述

二、外设和寄存器

在单片机编程中,我们要做的其实就是用软件编程去操控芯片的外设寄存器。
在这里插入图片描述
在一个芯片中,除了ARM公司设计的内容,其他就是芯片厂商根据自己需求开发的外设,我们需要熟练掌握这些外设的软件控制方法。

下面是黄老师根据重要性和难度划分的外设图,我们可以根据自己的情况去逐步学习。
在这里插入图片描述

三、存储结构

在这里插入图片描述
存储结构中灰色部分Reserved是系统的预留部分,我们不能操控。
Flash memory:是Flash,用来存放hex文件的,通俗来说即我们编写的代码文件是放在这里的。
SRAM:内存,在程序的运行过程中,产生的临时变量是存在这里的。
Peripherals:外设,外设的地址从0x4000 0000开始。
System memory:用来存放固件。

STM32的三种启动方式:
1.从Flash启动,这就是我们平常的方式,例如我们的点灯程序等,都是直接从Flash启动;
2.ISP启动,从System memory开始启动,启动后从串口获取数据,有新文件时将数据烧写到Flash后再从Flash正常启动,实现了从串口下载程序的功能;
3.从SRAM启动,SRAM的内容在单片机掉电后就丢失了。

我们可以认为在存储结构中,单片机启动后时从最下面的0x0000 0000启动的,0000中存放的是什么地址由BOOT引脚决定,最终决定启动方式。

四、第一个程序,点亮开发板的LED灯

同理我之前在51篇的内容,这里就不介绍原理了,只介绍在STM32中是如何操控的。
在这里插入图片描述
我们看到开发板的原理图上,让LED引脚是低电平即可点亮User LED,而LED引脚对应的是单片机的PA1,即GPIOA1,即存储结构中的Port A。
在这里插入图片描述
我们看到Port A中也有很多寄存器,每个寄存器都有不同的功能,对于GPIOx_ODR寄存器,就是用来控制GPIO口的输出的,我们看介绍可知,是从0口到15口。

因此,我们只需控制GPIOA的1口输出低电平,即可点亮LED灯。

五、单片机开发方式

根据上面的思路,我们去编程实现我们的需求。
在单片机开发中,共有如下4种方式:
在这里插入图片描述

1.使用汇编操作寄存器

在早期,单片机程序是用汇编写的,根据第一节的开发步骤图可知,汇编的下一步就是可执行文件了,所以汇编的效率最高,但是汇编晦涩难懂,编写难度大,并且由于汇编是直接控制寄存器的,所以移植性也差。

2.使用C语言操作寄存器(必会)

后面随着技术的发展,开始利用C语言编写程序,IDE可以将我们编写的C语言代码变成汇编代码,去执行,效率相对汇编有所下降,而C语言相对汇编有了一些可读性,编写难度也随着降低,但是,操作寄存器的方式仍然效率低下,对于8位单片机还行,但是在32位的单片机中,寄存器很繁杂,拿到一个没有接触过的芯片去一点一点找到对应的寄存器也不是一件简单事,我们需要知道寄存器的地址,然后再用指针去操控它。
由于在实际情况中,8位单片机在许多项目中还会用到,所以我们必须掌握这种方式,而且在32位单片机中,偶尔也会用到。

上面两种方式在任何一款芯片上都可以使用,是通用的方法。由于这些方法比较麻烦,芯片厂家也考虑到这些情况,所以在很多32位的芯片中,芯片厂家会编写对应的库,我们根据库开发,就变得简单了。下面以STM32型号为例,介绍库。

3.使用库开发

1.标准库

标准库是ST公司最早发布的固件库,对STM32芯片进行了完整的封装,覆盖了对应的外设的所有功能。它的缺点就是,它是针对某款STM32型号设计的,可移植性差,例如,F1系列的库和F4系列的库是不同的,但是在F1系列中还是可以通用的。

现在ST公司已经停止更新维护标准库,所以一些新型号的ST芯片并没有标准库可用。

2.HAL库(初学入门)

HAL库是近几年官方极力推荐的库,覆盖了全系列的芯片,可以说HAL库就是用来取代标准库的,相对标准库,HAL库有着更高的抽象、整合水平,它的API更多的集中关注在外设的公共函数功能,HAL库的移植性好,它在STM32中的通用性很强。

六、创建工程

创建STM32的工程有两种方式。
在这里插入图片描述
作为初学者,我们用第二种方式即可。

STM32CubeMX的使用

1.选择芯片型号

在这里插入图片描述
在这里插入图片描述
搜索选中芯片的型号后,点击start project

2.配置引脚

这里我们是要将PA1引脚配置为输出状态。
在这里插入图片描述

3.配置工程信息

Project Manage中,我们需要设置工程的名字,以及路径。
在这里插入图片描述
并且选择使用的IDE,这里我们用的是keil,所以选择MDK-ARM
在这里插入图片描述
并且勾选这个选项,将.c文件和.h文件分开了
在这里插入图片描述
最后就是点击生成代码。
在这里插入图片描述

代码编写

生成代码后,会提示你选择打开工程或者打开文件夹。
打开文件夹后,进入MDK-ARM文件夹,打开keil型文件即可。
在main.c文件中的main函数里,使用HAL库函数编写代码使对应的GPIO口输出低电平,编译下载即可观察到现象。
在这里插入图片描述

### STM32单片机启动模式电路图绘制方法 对于STM32单片机而言,在设计其最小系统时,了解如何正确配置启动模式至关重要。通常情况下,STM32支持多种复位源以及两种主要的启动模式——内部闪存启动和外部存储器启动。 #### 内部Flash启动模式下的电路连接 当采用内部Flash作为程序执行起点时,只需确保NRST引脚具备适当的上拉电阻即可实现基本功能[^1]。具体来说: - NRST引脚应通过一个约10kΩ的电阻接到VCC; - 可选地,在NRST与GND之间放置一个小电容(如10nF),用于滤波抗干扰; - SWD接口(如果需要调试)则按照标准四线制连接方式布置:SWCLK, SWDIO, GND 和 VDD。 ```plaintext +5V ----/\/\/\-----> NRST (Pin X) 10KΩ | --- | | |10nF| |___| | GND ``` 此部分描述了基于内部Flash启动的基础硬件设置[^1]。 #### 外设晶振与时钟树构建 为了使MCU能够稳定工作并提供精确的时间基准给定时器或其他依赖于频率的功能模块,还需要合理安排外接晶体及其关联组件的位置。一般建议如下处理: - 主频控制用8MHz或更高规格的石英晶体安装在X1位置附近; - 配套两个大约20pF的小容量瓷片电容器分别接地形成回路; - 如果应用场合允许的话,低功耗RTC备用电源可以考虑加入到设计方案当中去; 以上措施有助于建立稳定的时基信号供给整个芯片使用[^2]。 #### 使用专用工具辅助绘图 针对更复杂的PCB布局需求,则推荐借助Altium Designer、KiCad等EDA软件来完成详细的原理图编辑任务。这些平台内置了大量的元件库资源可供调用,并且提供了直观易懂的操作界面帮助工程师快速搭建起所需的电子线路模型[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值