历史上的今天
今天是:2024年09月25日(星期三)
2019年09月25日 | 从零开始一起学stm32(二)---库函数GPIO口
2019-09-25 来源:eefocus
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不能使用;
史海拾趣
|
Doulos ASIC Design and FPGA Design VHDL源代码 replyreload += \',\' + 280037;Timson,如果您要查看本帖隐藏内容请回复… 查看全部问答> |
|
一年就这么一个三八节,也就是只有这么一天属于女人。另外的364天都属于男人,在这一天,大家是不是应该对女同事们好一点呢。尤其是不能放假、和男生一样坚守在工作岗位的女同事。 EEWORLD女生放假半天,男生照常上班,有男生想要一起放假,被无情 ...… 查看全部问答> |
|
现设计一个表test,有字段 aindex(int类型,索引列,只读不可写),b,c,evl(status类型,可读写),现在通过snmpset命令进行添加记录(可有其它命令代替?),按照我的理解,先给evl(按列顺序的第aindex+1个记录)设置一个int值5,然后再用snmpset ...… 查看全部问答> |
|
基于直流屏的电源监控系统的各模块功能划分与采样通道多等特点, 设计了以MS P 4 3 0单片机为控制核心, C P L D扩展端口的控制系统。比较分析了几种直流系统常用的绝缘检测方法, 采用乒乓式变电桥测量法,实现了接地电阻的准确在线测量。现场运行 ...… 查看全部问答> |




