2019-10-20-STM32点亮LED

STM32学习笔记(1)——点亮LED

关于STM32(之后简称32),接触过了解过它的一部分内容,但是没有系统的学习过,因为此前一直做的是一些模拟方向的硬件,关于软件是在知之不多。之前学过arduino单片机、51单片机、PIC单片机,C语言和汇编都写过,也算有一定的基础,这个系列主要以库函数开发为主,到最后阶段会采用一部分的寄存器编程。希望在这个博客中完全记录我在这个学习过程中踩过的坑和工作日志。

准备了一个简单的两周计划:

  1. 完成对应硬件学习,准备必要的物资,包括开发板(或者最小系统板),jlink下载器,USB-TTL模块

  2. 学习GPIO的控制方法,了解各种配置的区别,正确输出高低电平点灯

  3. 简单的流水灯(一个GPIO完成),必须采用定时器,有必要学习三四种不同的定时器

  4. 键盘的行列扫描读取(一个GPIO完成),完成4*4的键值读取

  5. 单片机的各种中断使用——外部中断,定时器中断,串口中断等

  6. 两块板子之间的串口通信,IIC通信,SPI通信(常见通信的使用)

  7. 单片机ADC的使用,PWM的输出,以及LCD液晶显示屏使用。

  8. 电阻屏的驱动,在电阻屏输出中英文字符或者图形

首先完成硬件知识入门

芯片架构:


2019-10-20-STM32点亮LED_第1张图片
image.png

可以看到STM32由cortex-M3内核构成,由三个总线——ICode(命令),S(系统),DCode(数据)组成,下至存储单元和各种外设,我们常见的GPIO就是外设之一。

2019-10-20-STM32点亮LED_第2张图片
image.png

单片机的组成由运算器(包括算数逻辑单元,累加器和寄存器),控制器(程序计数器、指令寄存器、指令译码器、时序发生器和操作控制器),寄存器等部分组成。结构上属于哈佛结构(程序存储器和数据存储器分开)。

其他的可以看看数据手册的说明:

2019-10-20-STM32点亮LED_第3张图片
image.png

手册中还有很多关于寄存器的介绍,篇幅相当长,但是我用库函数做开发不太涉及这个部分,姑且跳过了,可以将寄存器看作一个被特别定义过的存储区,这个存储区由设置单片机功能的作用。用过才能理解它的作用,就不做说明了。

2019-10-20-STM32点亮LED_第4张图片
image.png

开发过程中肯定会频繁用到两个文档——参考手册和数据手册(一个是软件应用开发必看,另一个则更像硬件使用的教程),建议两边内容相互补充查看。

了解一下关于我使用的单片机开发板——野火的指南者,相关资料在他配套的书的光盘里,这里提供一个百度云盘的链接,不确定会否失效:

链接:https://pan.baidu.com/s/1tr6fIQ03L9Sm60gbLNV1vQ&shfl=sharepset 提取码:kww1

其实野火对这个也是开源的,链接失效可以看看这个:

https://github.com/Embdefire/products/wiki

一些配套的数电和模电知识将在使用各个对应模块做介绍。

库函数入门知识

首先明白库函数仍然是对寄存器的操作,只不过库函数是将一些外设使用到的寄存器的某些位封装成一个结构体对结构体进行初始化和赋值操作的结果也就是对相应寄存器进行初始化和操作,本文虽不涉及寄存器的详解,涉及到的也会一笔带过,但是须知。

ST官方库函数在资料盘A盘(资料盘)\3-程序源码\【固件库】STM32F10x_StdPeriph_Lib_V3.5.0里。

  • libraries : 库文件源代码和启动文件

  • Project:驱动示例和模板

主要注意以上两个目录。

其中CMSIS目录的结构如图:

2019-10-20-STM32点亮LED_第5张图片
image.png

启动文件startup_stm32f10x_hd.s

寄存器映射文件Stm32f10x.h

时钟配置system_stm32f10x.c

库函数主要内容Libraries\STM32F10x_StdPeriph_Driver,针对各种外设

其他文件stm32f10x_it.c 、stm32f10x_it.h 、stm32f10x_conf.h 、system_stm32f10x.c,前两个是中断相关的文件。

新建工程

1、新建本地文件夹,工程文件夹下面放置以下文件夹,相关的内容见表格。其中Libraries直接复制库函数文件夹。

2019-10-20-STM32点亮LED_第6张图片
image.png

2、新建工程在之前建好的文件夹,依次选择CPU,添加组文件

2019-10-20-STM32点亮LED_第7张图片
image.png

3、配置魔术棒

必须勾选MicroLib,以使用Printf等函数。

2019-10-20-STM32点亮LED_第8张图片
image.png

选中Output的文件夹,可以补选中HEX。

2019-10-20-STM32点亮LED_第9张图片
image.png

Listing选项卡中定位到我们的Listing文件夹。

2019-10-20-STM32点亮LED_第10张图片
image.png

在C/C++选项卡中添加各种宏和头文件路径。

2019-10-20-STM32点亮LED_第11张图片
image.png

必须添加的宏:STM32F10X_HD,USE_STDPERIPH_DRIVER

必须添加的头文件:

2019-10-20-STM32点亮LED_第12张图片
image.png

Debug选项卡必须选中Jlink,打开sittings可以看到设备,记住必须勾选reset and run:

2019-10-20-STM32点亮LED_第13张图片
image.png

以上为工程文件模板。以后每次新建工程必须采用以上的设置。

点亮一个LED

首先我们必须了解一下单片机的IO的初始化的函数:其参数为一个GPIO,和一个结构指针。

2019-10-20-STM32点亮LED_第14张图片
image.png

结构指针中包含着各种关于指针的设置:

选中引脚:

2019-10-20-STM32点亮LED_第15张图片
image.png

选择输出速度:

2019-10-20-STM32点亮LED_第16张图片
image.png

选择IO工作方式:

2019-10-20-STM32点亮LED_第17张图片
image.png

目前关于引脚了解到这里就够了,初始化引脚工作模式为推挽输出(这种输出方式电流比较大);工作速度为50MHz;GPIO选中为板子上的引脚。

头文件的编写可以采用

#ifndef _public_h
#define _public_h
#include "stm32f10x.h"
#endif

以上的格式书写,所有的宏定义都要写在头文件里方便调用,在.c文件中加上#include "public.h"即可调用头文件中的各种宏定义。

相关的.c文件可以写该工程特有的外设的内容,比如这个点灯的程序中,我在led.c中写了初始化灯使用的IO以及Delay函数,在主函数中调用。

工程见GitHub: STM32入门之点亮LED

你可能感兴趣的:(2019-10-20-STM32点亮LED)