从零开始一起学stm32(一)---寄存器操作GPIO

寄存器操作GPIO口

1.ARM 介绍

2.开发板的介绍

2.1软件安装

2.2工程建立

  1. 总线架构和时钟树
  2. GPIO口使用
  3. 寄存器操作GPIO口
  4. 作业:点亮LED灯

1、ARM的介绍

1.咱们今天学的是基于ARM cortex-m3的STM32微控制器这本书;首先,咱们要了解这几个名词的意思:

ARM:是一个公司的名字---设计芯片内核架构的---设计CPU的

cortex-M3:是M3内核,是ARM 公司设计一款CPU;

STM32:

ST :意法半导体公司---生产芯片的公司--

M3:ST公司生产的一款芯片,上面集成了很多模块

32:   32位CPU处理器

ST公司根据ARM公司设计的M3内核架构生产的一款32位的单片机

 

ARM公司不可能只生产一款单片机吧,

2.ARM芯片的发展:

架构    系列      内核

V4              ARM7        

V5              ARM9      

V6              ARM11

V7              A系列        A8,A9   --支持大型嵌入式系统:Linux—Cortex-A9

R系列        实时性高、处理器强大、可靠—汽车的组件

M系列      M3,M4 –低功耗、低成本、处理速度快!

咱们今天讲的就是V7架构的M系列的单片机 STM32;

2.开发板的介绍

我用的开发板型号是:STM32F103ZET6

1.开发板模块  :

MCU:stm32F103ZET6      

内部:SRAM:数据存储区(64K)   ROM:程序存储区--内置FLASH(512K)

外部扩展:SRAM--1M字节                FLASH: W25Q64---8M;

按键,复位键,指示灯

Jlink 方口线N 串口线 排线  LED灯 蜂鸣器 按键

今天咱们就先来实现如何点亮一盏led灯?

咱们学习C语言的时候,想实现某种现象或者功能,先

安装软件--建立工程--编写程序--编译--链接--执行--得到现象!

学习stm32 也是一样的,我们使用的编译软件是keil5;

 

2.安装软件:

Keil5:

Jlink驱动:下载器

3.建立工程

参考建立工程的文档

core_cm3.c/.h:  ARM公司提供的内核核心文件,不可修改;

inc:       #include 的缩写---ST公司提供的头文件;

src:       源文件

project: 工程!

startup:stm32的启动代码---汇编文件

Startup:  stm32f10x_hd.s---中断服务函数名;

user:    stm32f10x_conf.h--外设头文件

stm32f10x_it.c---中断服务函数的定义

API:这是你自己写的程序模块;---.c和.h文件

 

对于单片机stm32来说,CPU相当于人的大脑,所以,我们先要了解CPU的总线架构,从而了解CPU的工作过程;

1.总线架构和时钟树

2.总线:指令总线、数据总线、系统总线

指令总线:保存指令的---ROM中--程序代码

数据总线:保存数据的---RAM中--常量

系统总线:APB1与APB2上挂接了很多外设;外设通过APB1/APB2总线、AHB桥接,实现与内核的连接!

 

CPU相当于人的大脑,时钟相当于CPU的脉搏

3. 时钟树

中文参考手册第6章P56页

 

时钟源:

两个内部时钟源:RC振荡器产生时钟源

HSI:高速内部时钟---8MHz

LSI:低速内部时钟---40KHz

两个外部时钟源:晶振产生时钟源

HSE:高速外部时钟---8MHz(stm32开发板上)

LSE:低速外部时钟---32.768KHz

通过这几个时钟源,产生系统或者直接给外设提供所需要的时钟;

系统时钟:系统时钟是片上外设的时钟来源

SYSCLK--72MHz;

APB1---36MHz;

APB2---72MHz;

 

当不被使用时,任何一个时钟源都可以被独立的关闭,用来降低功耗!所以,我们使用外设时,必须开启对应的外设时钟!

我们使用外设的时候,需要哪些时钟就必须开启对应的时钟。

 

GPIO外设是挂载在APB2总线上的,APB2的时钟是APB2预分频器的输出,而APB2 预分频器的时钟来源是AHB预分频器

 

时钟和CPU总线搞定之后,我们来学习一下如何点亮led灯:首先led灯和CPU之间是如何连接的----是通过GPIO口连接的:

GPIO口:通用IO口---是普通的I/O口;

如果作为输入信号的功能,必须把GPIO口配置成输入模式;

如果作为输出信号的功能,必须把GPIO口配置成输出模式;

 

Stm32中GPIO口:

一共分为7组端口:GPIOA~GPIOG

每组端口分为16个管脚:0~15   一共是7*16=112个管脚--- I/O

A端口的第5个管脚:PA5             端口B的第6个管脚:PB6

PA0:  A端口的第0个管脚        PA15---A端口的第15个管脚

        

GPIO口作用:输入输出接口,进行数据交换的接口;只能输入输出高低电平;

即:高电平 1(3.3v)   低电平0(0v)     ---GPIO管脚只能呈现0和1两种状态!

 

STM32中这么多的管脚,到底哪些是和灯连接在一起的呢?

原理图:

 

管脚:PB5---D3

  PE5---D4

  PA5---D5

  PA6---D6

在这里,牢记一句话:GPIO口的管脚,都是连接在STM32上的,是stm32上的管脚;

如何操作GPIO口?

使用GPIO口的管脚,要把他们配置为输入还是输出模式?

 

什么是输入?什么是输出?

规定:输入输出是相对于CPU来说的;

CPU输出一个信号到管脚上,就叫输出;

CPU从管脚接收到一个信号,叫输入!

 

通过寄存器操作:寄存器是CPU的组成部分,可用来存放数据、指令、地址等,操作寄存器相当于直接操作CPU;

 

对于GPIO口的操作:

寄存器--配置GPIO口输入输出模式:

 

 

 

TTL触发器:把模拟信号转换为数字信号!(0和1)

输入和输出:

 

是相对于CPU来说的,如果CPU通过管脚接收到数据,叫输入;输出就是CPU通过管脚往外界发送数据;

 

配置寄存器:高/低  :配置模式和初始化控制器

数据寄存器:输入输出数据

状态寄存器:状态---我可以查询

 

  1. IO口配置:

PA5

50MHz--推挽输出模式:

让GPIOA_CRL  的23~20位  设置为 0 0 1 1-----0x03<<20

 

  1. 打开时钟:  第70页

对应的打开相应的IO口时钟!

 

数据操作:

 

GPIOA_IDR      :输入01

GPIOA_ODR:  输出01

GPIOA_BSRR:  输出0和1

GPIOA_BRR:    输出0;

 

寄存器操作GPIO口:

一、原理层:

  1. 查看原理图:知道管脚的信息:哪个管脚,管脚对应的
  2. 分析原理图:打开时钟,模式的配置
  3. 打开对应的端口时钟和外设时钟配置GPIO模式 

二、应用层:

  1.操作GPIO模式

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_38639426/article/details/88625547