寄存器操作GPIO口
1.ARM 介绍
2.开发板的介绍
2.1软件安装
2.2工程建立
- 总线架构和时钟树
- GPIO口使用
- 寄存器操作GPIO口
- 作业:点亮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通过管脚往外界发送数据;
配置寄存器:高/低 :配置模式和初始化控制器
数据寄存器:输入输出数据
状态寄存器:状态---我可以查询
- IO口配置:
PA5
50MHz--推挽输出模式:
让GPIOA_CRL 的23~20位 设置为 0 0 1 1-----0x03<<20
- 打开时钟: 第70页
对应的打开相应的IO口时钟!
数据操作:
GPIOA_IDR :输入0和1
GPIOA_ODR: 输出0和1
GPIOA_BSRR: 输出0和1
GPIOA_BRR: 输出0;
寄存器操作GPIO口:
一、原理层:
- 查看原理图:知道管脚的信息:哪个管脚,管脚对应的
- 分析原理图:打开时钟,模式的配置
- 打开对应的端口时钟和外设时钟配置GPIO模式
二、应用层:
1.操作GPIO模式