库函数GPIO口
1.回顾
2.库函数操作GPIO口
3.作业:
-
做成流水灯和闪烁灯 ----呼吸灯
-
让蜂鸣器延时响和不响
-
按键控制灯的亮灭
-
按键控制蜂鸣器
1.回顾:
ARM---Cortex-M3---STM32
1.CPU的总线架构:
指令总线,数据总线,系统总线;
指令总线:ROM--FLASH ---512K
数据总线:SRAM---64K;
系统总线: 通过系统总线去访问APB1/APB2上的外设
2.时钟树:
两个内部时钟源和两个外部时钟源
SYSCLK/ APB1/APB2
3.GPIO口
分7组---A B C D E F G
每组16个:0~15
端口:GPIOA--A端口
管脚:PA0---A端口的第0个管脚
GPIO口作用:输入输出管脚---只能输入输出高低电平
普通的I/O口:我们需要在使用之前进行配置:
如果作为输出管脚,就要配置为输出模式;
如果作为输入管脚,就要配置为输入模式;
输入输出规定:相对于CPU来说的!
目的:点亮一个LED灯;
1.灯和CPU如何相连---看原理图;
原理图---使用哪些管脚,知道所用时钟;
分析原理图,得到管脚状态--模式
- 打开时钟、配置管脚信息
- 应用:亮灯、灭灯操作
- 时钟---PA5
- 管脚信息--模式:输出--寄存器:GPIOA_CRL
- 点灯灭灯操作---GPIOA_ODR 1--灭灯 0---亮灯
2.库函数操作GPIO口
为什么使用库函数?
库函数--对寄存器操作的封装,做成需要的功能函数
寄存器--寄存器是CPU的组成部分,操作寄存器就相当于直接操作CPU
1..初始化---驱动:
- 打开时钟:Main--conf.h--rcc.h--APB2;-总线架构
- 配置管脚信息:管脚信息--模式--速度
Main---conf.h--gpio.h---gpio_init();
2.应用
高低电平
作业:
1.流水灯
2.闪烁灯
3.灯全亮
4.灯全灭
5.蜂鸣器+延时
6.按键控制LED灯、控制蜂鸣器
1.让2个按键控制1个灯和蜂鸣器
2.让4个按键控制4个灯的亮灭
结构体类型:定义结构体变量;
结构体变量:保存不同类型的数据---是这个变量的属性
可以把结构体变量看成一个学生---成员变量就是这个学生的信息
库函数操作GPIO口
库函数:STM32提供的
库函数 --就是对寄存器操作的一些功能进行封装,做成一个个容易理解的函数;
调用别人的函数:
需要知道:1.函数的功能;
2.函数的参数及参数的意义--几个参数,参数类型
3.返回值--是否有返回值--函数的类型
//点亮一个led灯步骤
1 查看原理图:
2 开启相应的外设时钟
1.配置GPIO口
2.写应用:点亮或者熄灭led灯!
第一步:
打开时钟---时钟使能
第二步:
查看原理图:
1.所用的管脚
2.是输入还是输出模式
操作配置寄存器--配置为输入还是输出模式;
对数据寄存器进行操作---高电平还是低电平!
位操作:
对某一位,或者某几位进行操作,而不影响其他位的操作
4.模块化编程:
函数三步骤:定义、声明、调用
在模块.c中定义,在模块.h中声明,在main.c中调用;
- 每个模块都要有一个.C文件和对应的.h文件;
- .C里面写的是变量的定义和函数的定义;
- .h文件里面保存的是函数的声明,结构体定义;
- 保存的.c文件必须从user/API里面把.c文件添加到你的工程
- 掌握extern 和static的用法;
- extern --声明外部变量:
用法:
1.声明一个外部变量、外部函数
--在main.c定义一个变量int num=10;
如果在led.c里面想要使用这个变量,extern int num;
2.声明一个外部函数;
在main.c里面定义一个Delay函数,在led.c里面想要使用这个函数,
只需要在led.c里面声明这个函数---extern void Delay();
Static--声明一个静态变量、静态函数
用法:
1.声明一个局部变量---变成静态变量
2.声明一个全局变量---这个变量只能在本.c使,其他.c不能使用;
3.声明一个静态函数---这个函数只能在本.c使用,其他.c不能使用;