写点什么

STM32F103 系列开发 _ 点亮 LED 灯

作者:DS小龙哥
  • 2022 年 5 月 23 日
  • 本文字数:1938 字

    阅读完需:约 6 分钟

1. 前言

STM32 目前市面上使用比较广泛,资料多,接下来就介绍如何快速入门 STM32,进行基础开发。


这篇文章是 STM32F103 系列文章的第一篇,主要介绍开发环境的搭建、编程思路、如何查看原理图、配置时钟,配置 GPIO 口模式等等。


下面文字是来至 STM32 中文手册,对 STM32 系列做了详细的介绍:


STM32 是一个微控制器产品系列的总称,目前这个系列中已经包含了多个子系列,分别是: STM32 小容量产品、 STM32 中容量产品、 STM32 大容量产品和 STM32 互联型产品;按照功能上的划分,又可分为 STM32F101xx、 STM32F102xx 和 STM32F103xx 系列;

● 小容量产品是指闪存存储器容量在 16K 至 32K 字节之间的 STM32F101xx、 STM32F102xx 和 STM32F103xx 微控制器。● 中容量产品是指闪存存储器容量在 64K 至 128K 字节之间的 STM32F101xx、 STM32F102xx 和 STM32F103xx 微控制器。● 大容量产品是指闪存存储器容量在 256K 至 512K 字节之间的 STM32F101xx 和 STM32F103xx 微控制器。● 互联型产品是 STM32F105xx 和 STM32F107xx 微控制器。


整体来说,STM32F10x 系列里所有型号芯片大多数功能模块都是相同,主要是区别还是:引脚数量不一样,FLASH 闪存、RAM 空间大小不一样,还有就是功能模块的数量不一样。 配置高的芯片,引脚多,功能模块多。


配置低的型号,引脚自然就少,功能模块就少。 但是只要有这个功能模块,所有型号的代码都是一样的编写方式。所以,STM32F10x 系列里所有型号代码都是通用的


目前 STM32 开发方式主要由 3 种:寄存器、标准库、HAL 库。 其中 HAL 库是目前意法半导体主推的开发方式,有 STM32CubeMx 软件加持,可以一键生成 keil 工程,图形化编程非常方便,资源网上也有很多。


当前这个系列文章的 STM32 开发主要是选择寄存器方式开发,寄存器开发优点是: 代码较少、整体比较精简,运行效率较高。但是学习成本、入门成本、调试难度比 HAL 库要难一些,因为使用寄存器开发,需要不断的看芯片手册,了解寄存器每个位的详细功能,需要对芯片寄存器非常熟悉。但是寄存器开发相对比较通用,所有的芯片都支持寄存器开发,了解寄存器开发之后,对优化库函数、HAL 库的效率、对其他芯片编程、入门 Linux 驱动开发、了解硬件等都有一定的帮助。

2. 开发前准备

入门 STM32 开发,首先需要准备一块开发板,拿到开发板的原理图、下载 STM32 的中文参考手册,下载一个串口下载软件、准备一台 windows 电脑安装 keil5 软件。


开发板淘宝很多,推荐买:搭载 STM32F103ZET6 芯片的板子,可以买系统板也可以买开发板,系统板的板载资源少,引脚都引出来的,可以自己买模块扩展;开发板板载资源较多,引脚基本也是引出来的,板子的价格比较贵,购买可以参考正点原子、野火等一些厂家的板子。 一般购买板子之后,都有配套的资料包:原理图、手册都有了。


STM32 支持 st-link、jlink、串口等多种下载方式,其中成本比较低的就是串口下载,不需要购买额外的硬件,生成 hex 文件之后,通过串口下载到开发板运行,如果 hex 文件较大,下载速度比较慢。如果资金允许,购买 st-link、jlink 下载更加快,调试更加方便。


keil 软件最新版可以在这里下载:http://www.myir-tech.com/download.asp?nclassid=108&anclassid=71



下载后,根据提示,一直点击 next 即可。软件安装在英文目录下,防止出现一些不必要的麻烦。

3. 点亮 LED 灯

准备工作就绪之后,下面就入门 STM32,点亮 LED 灯。


拿到开发板先看一下 LED 原理图,找到 LED 的硬件接线位置。



关于 keil 软件如何新建 STM32 工程的文章之前是写过的,详细步骤看这里: https://blog.csdn.net/xiaolong1126626497/article/details/119879328


点亮 LED 灯,需要控制 STM32 的 GPIO 口输出指定的电平,STM32GPIO 口编程步骤分为:


  1. 开时钟

  2. 配置 GPIO 口模式

  3. 控制 GPIO 口输出


中文参考手册里的第 6 章和第 8 章分别介绍了时钟寄存器和 GPIO 口配置寄存器,主要看这两章节即可。




GPIO 口模式配置寄存器有两个:CRL 和 CRH,一个 IO 口由 4 个二进制位表示,STM32 是 32 位的 MCU,一个寄存器是 32 位,GPIO 口分为 GPIOA,GPIOB,GPIOC 等很多组,每一组的 GPIO 口的数量是 16 个。所以要配置一组 GPIO 口的模式需要 64 个二进制位,所以就分成了两个寄存器来表示。 CRL 配置 0~7 的 GPIO 口,CRH 就配置 8~15 的 IO 口。


如果 GPIO 口作为普通的输出,一般配置位置推挽输出,如果作为按键这种输入检测硬件,一般配置为上下拉输入。如果需要使用 GPIO 口内置的功能输出,就配置为复用功能推挽输出。


配置 LED 灯对应的 GPIO 口示例代码:


/*函数功能: LED初始化硬件连接: PB6 PB7 PB8 PB9特性: 低电平点亮*/void LED_Init(void){    //开时钟    RCC->APB2ENR|=1<<3;    //配置GPIO口    GPIOB->CRL&=0x00FFFFFF;    GPIOB->CRL|=0x22000000;    GPIOB->CRH&=0xFFFFFF00;    GPIOB->CRH|=0x00000022;    //上拉    GPIOB->ODR|=1<<6;    GPIOB->ODR|=1<<7;    GPIOB->ODR|=1<<8;    GPIOB->ODR|=1<<9;}
复制代码


发布于: 刚刚阅读数: 2
用户头像

DS小龙哥

关注

之所以觉得累,是因为说的比做的多。 2022.01.06 加入

熟悉C/C++、51单片机、STM32、Linux应用开发、Linux驱动开发、音视频开发、QT开发. 目前已经完成的项目涉及音视频、物联网、智能家居、工业控制领域

评论

发布
暂无评论
STM32F103系列开发_点亮LED灯_5月月更_DS小龙哥_InfoQ写作社区