STM32
直播中

大彭

10年用户 1037经验值
擅长:电源/新能源 嵌入式技术
私信 关注
[问答]

如何用STM32F103ZET6实现点亮一盏led灯呢

怎样去使用基于ARM cortex-m3的STM32微控制器?

如何用STM32F103ZET6实现点亮一盏led灯呢?

回帖(1)

杨万富

2021-11-29 15:22:57
寄存器操作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模式
举报

更多回帖

发帖
×
20
完善资料,
赚取积分