观看的视频:野火-视频链接 https://www.bilibili.com/video/BV18X4y1M763
什么是GPIO?
GPIO是通用输入输出端口的简称,简单来说就是STM32可控制的引脚。STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。
可以通过控制GPIO引脚的电平变化,达到正常使用的目的。
寄存器编程 要学会使用STM32使用手册和数据手册。
STM32F103ZET6结构图:
F103GPIO的内部结构图:
TTL肖特基触发器:将连续的信号变为离散的信号。
LED灯原理图:
keil环境配置步骤:
1.新建一个工程,找到对应的开发版芯片。此次使用的是STM32F103ZET6。
2.配置keil setting 见图片
3.在Source Group 里面添加一个主程序,main.c文件。双击Source Group即可配置。
4.配置C语言运行环境。
5.编写一个main函数。
int main(void)
{
}
点击编译无错误。
总线架构:总线矩阵协调内核系统总线和DMA主控总线之间的访问仲裁,仲裁利用轮换算法。
总线组织形式的优势:通过总线的形式,可以很好地将各种外设分离开,可以独立的将各种外设来控制它的使能与否。
时钟:通过控制时钟,来控制外设使能与否。没有外设时钟,就相当于失能。控制时钟就是控制外设。
软件开发步骤:
1. 根据此开发板的LED原理图了解到要控制PB5和PE5,使能GPIOB和GPIOE的外设时钟。使能外设时钟:知道寄存器的地址——APB2外设时钟使能寄存器地址。
RCC(复位和时钟控制)外设基地址:0x4002 1000
偏移地址:0x18
APB2外设时钟使能寄存器地址=起始地址+偏移地址。
2.选择输出模式,并查阅手册进行端口配置
LED需要设置的工作模式是输出模式。有开漏输出和推挽输出。对于开漏输出,输出一个高电平比较麻烦,选用推挽输出。
通过配置表头的寄存器可以配置推挽输出。
GPIOB外设基地址:0x4001 0C00
端口配置低寄存器(CRL)偏移地址:0x00
端口输出数据寄存器(ODR)偏移地址:0x0C
#define GPIOB_CLK (*(volatile unsigned int *)(0x40021000+0x18))
#define GPIOB_CRL (*(volatile unsigned int *)(0x40010C00))
#define GPIOB_ODC (*(volatile unsigned int *)(0x40010C00+0x0C))
int main(void)
{
//1.使能GPIOB外设时钟
GPIOB_CLK |=(1<<3);
//2.GPIOB配置推挽输出模式
GPIOB_CRL &=~(0xf<<(4*5));//清除低四位寄存器
GPIOB_CRL |=(2<<(4*5));
GPIOB_ODC &=~(0x1<<(1*5));//清除低1位寄存器
GPIOB_ODC |=(1<<5);
}
通过注释GPIOB_ODC |=(1<<5);这行代码,可以使灯亮起。
圈2中选择自己的调试器。
STM32编程方式存在寄存器编程和库编程两种,寄存器编程存在以下缺点:1、代码可读性太差,如果是一大堆寄存器的编程代码,不写注释,很难读懂;2、二次开发难度大;3、每次写程序都要查手册。
当熟练运用后,可以将寄存器编程和库编程组合起来使用。