Bootstrap

[学习记录]STM32F1-初识单片机(一)

前言

本系列主要是个人的学习记录,方便复习梳理框架,主要为个人理解,当然会有很多漏洞,欢迎指正。后续会根据单片机例程作系列更新。

一、STM32基础知识介绍

参照野火文档《库开发指南》STM32系列开发板、核心板 — 野火产品资料下载中心 文档

正点开发文档 正点原子资料下载中心 — 正点原子资料下载中心 1.0.0 文档

1. 什么是STM32和单片机

STM32简单来说是一种更加轻量化的32位微处理器(MCU),即每个寄存器为 32bit ,占四个字节。单片机简单来说就是把STM32和其他片上外设(IIC、USART...)集成在一起的开发板,用户可以通过编程,控制开发板上的各个引脚的高低电平状态来完成相应的功能,例如跑马灯等。

STM32F103ZET6芯片实物图(红色框)

其他的芯片选型分类等等可以具体查看开发文档

2. 单片机内部资源简单介绍

2.1 总线

参照博文系统总线(看这一篇就够了)-CSDN博客

【明解STM32】一文读懂STM32芯片总线_stm32总线-CSDN博客

CPU、主存、I/O设备各大部件之间的信息传输线,即CPU与外设、寄存器等完成数据读写等功能的通路。

AHB系统总线连接高速外设,如DMA等等

APB总线连接低速外设,如串口、IIC、I/O等等。后续初始化时会经常见到这两个总线。

2.2 RAM、ROM、寄存器

参照博文单片机学习——存储器详解(程序存储器、片内RAM、拓展RAM、EEPROM)-CSDN博客

单片机中的存储器讲解_单片机存储器-CSDN博客

RAM、ROM都用来存储数据,比如定义的常量、程序代码等等,区别是ROM不能随时读写,而RAM可以,所以RAM读写数据更快,但掉电后会丢失。

寄存器就是单片机片内存储器(片内RAM)一部分,每一个都有地址。

在存储器这块区域,设计的是片上外设,它们以四个字节为一个单元,共 32bit,每一个单元对应不同的功能, 当我们控制这些单元时就可以驱动外设工作。我们可以找到每个单元的起始地址,然后通过 C 语言指针的操作方式来访问这些单元,如果每次都是通过这种地址的方式来访问,不仅不好记忆还容易出错,这时我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个别名就是我们经常说的寄存器, 这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射

2.3 时钟

参考博文STM32—— AHB、APB详解_stm32 ahb apb-CSDN博客

时钟是STM32单片机的脉搏,是单片机的驱动源。使用任何一个外设都必须打开相应的时钟。这样的好处就是,如果不使用一个外设的时候,就把它的时钟关掉,从而可以降低系统的功耗,达到节能,实现低功耗的效果。

暂时作此介绍,详细各部分的理解可以学习各博文与《微机原理》、《嵌入式系统》《数字电子技术》等。

2.4 I/O口

详见博文什么是GPIO?(详细介绍)-CSDN博客

配置GPIO模式非常重要,常常根据不同需求对GPIO作初始化

二、跑马灯-单片机的'Hello,world!'

2.1 基础环境配置

参照开发文档作即可,个人按照正点源码作建立文件夹。(使用库函数开发)

注:库函数开发与寄存器开发对比。库函数开发相对更加快速,易上手,而寄存器操作则更加接近底层,对处理器会有更深的了解。

2.2 基础文件介绍

见下图,来自正点开发文档。正点原子资料下载中心 — 正点原子资料下载中心 1.0.0 文档

2.3 硬件设计

具体LED灯连接的引脚可以查看所用开发板的原理图。以STM32F103ZExx单片机为例,LED灯连接的引脚如下图。当我们将PE5、PB5 I/O口输出为低电平时,二极管导通,LED灯亮

2.4 软件设计

2.4.1 文件夹介绍

一般购买的单片机厂家会提供源码和固件库文件(或者去ST官网)

STM32标准外设软件库 - 意法半导体STMicroelectronics

参考博文

STM32固件库分析(STM32F10x系列)_stm32f10x.h-CSDN博客

【STM32】“stm32f10x.h” 头文件的作用-CSDN博客

core文件夹

启动文件startup,根据自己开发板的容量选择,具体可以看开发文档。

STM32F10x_FWLib文件夹

 加入片上外设的驱动源文件,在我们调用库函数的时候会用到。当然也可以用多少放多少,减少文件夹容量。inc(including)放头文件,src(source)放源文件。

SYSTEM文件夹

放所有工程都可以共用的源程序,这是正点自己写的,为了更方便完成延时、IO位操作、串口打印信息等功能。(具体介绍可以看正点的开发文档)

USER文件夹

 主要放主函数和工程.uvprojx文件

2.4.2 添加固件库文件

Keil5----新建项目文件( .c文件 和 .h文件)_keil如何在c文件中添加h文件-CSDN博客

(1) keil中右键相应的文件夹,选择Manage Project Item,添加相应文件即可

(2)Hardware文件夹创建外设的驱动文件夹,在keil中创建.c、.h对应文件,并将.c加入所创建的外设驱动文件夹。

 

 (3) 包含头文件路径

下面我们要告诉 MDK,在哪些路径之下搜索需要的头文件,也就是头文件目录对于任何一个工程,我们都需要把工程中引用到的所有头文件的路径都包含到进来

2.4.3 代码实现

 【#ifndef, #define, 和 #endif】-CSDN博客

led.h头文件

led.c源文件

【C语言】结构体类型的定义与使用_c语言结构体定义和使用-CSDN博客

main.c  (位带操作确实要简洁一些,但前提是得会写sys.h文件)

 2.4.4 程序下载与硬件连接

PB5、PE5输出按照代码逻辑高低电平,下载好代码后,可以用外接led灯测试。

三、其他

3.1 delay延时实现

敬请期待

3.2 sys.h位带操作

敬请期待...

完结撒花! 

;