目录
一、STM32F103系列芯片的地址映射和寄存器映射原理
1.什么是寄存器?
2.地址映射和寄存器映射原理
?二、GPIO端口的初始化设置步骤
1.GPIO简介
2.GPIO框图剖析
?3.GPIO初始化步骤
三、C语言编程
1.GPIO的地址
?
2.新建项目
3.设置
?4.编译
?四、电路实现点亮LED流水灯
1.串口方式烧录程序
2.成功实现点亮LED流水灯
五、参考资料
一、STM32F103系列芯片的地址映射和寄存器映射原理
1.什么是寄存器?
寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。其实寄存器就是一种常用的时序逻辑电路,但这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器。寄存器是中央处理器内的组成部分。寄存器是有限存储容量的高速存储部件,它们可用来暂存指令、数据和位址。
2.地址映射和寄存器映射原理
存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程就称为存储器映射。
在存储器的区域单元中,每一个单元对应不同的功能,当我们控制这些单元时就可以驱动外设工作。我们可以找到每个单元的起始地址,然后通过 C 语言指针的操作方式来访问这些单元,如果每次都是通过这种地址的方式来访问,不仅不好记忆还容易出错,这时我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。
?二、GPIO端口的初始化设置步骤
1.GPIO简介
GPIO是通用输入输出端口的简称,简单来说就是STM32可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。STM32芯片的GPIO被分成很多组,每组有16个引脚,如型号为STM32F4IGT6型号的芯片有GPIOA、GPIOB、GPIOC至GPIOI共9组GPIO,芯片一共176个引脚,其中GPIO就占了一大部分,所有的GPIO引脚都有基本的输入输出功能。
最基本的输出功能是由STM32控制引脚输出高、低电平,实现开关控制,如把GPIO引脚接入到LED灯,那就可以控制LED灯的亮灭,引脚接入到继电器或三极管,那就可以通过继电器或三极管控制外部大功率电路的通断。
最基本的输入功能是检测外部输入电平,如把GPIO引脚连接到按键,通过电平高低区分按键是否被按下。
2.GPIO框图剖析
?3.GPIO初始化步骤
第一步:使能GPIOx口的时钟 第二步:指明GPIOx口的哪一位,这一位的速度大小以及模式 第三步:调用GPIOx初始化函数进行初始化 第四步:调用GPIO-SetBits函数,进行相应位的置位
三、C语言编程
1.GPIO的地址
?
2.新建项目
新建项目并保存
选择芯片STM32F103C8
?添加.c文件
?编写程序:
#define GPIOB_BASE 0x40010C00
#define GPIOC_BASE 0x40011000
#define GPIOA_BASE 0x40010800
#define RCC_APB2ENR (*(unsigned int *)0x40021018)
#define GPIOB_CRL (*(unsigned int *)0x40010C00)
#define GPIOC_CRH (*(unsigned int *)0x40011004)
#define GPIOA_CRL (*(unsigned int *)0x40010800)
#define GPIOB_ODR (*(unsigned int *)0x40010C0C)
#define GPIOC_ODR (*(unsigned int *)0x4001100C)
#define GPIOA_ODR (*(unsigned int *)0x4001080C)
void SystemInit(void);
void Delay_ms(volatile unsigned int);
void Delay_ms( volatile unsigned int t)
{
unsigned int i;
while(t--)
for (i=0;i<800;i++);
}
int main(){
RCC_APB2ENR |= (1<<3);
RCC_APB2ENR |= (1<<4);
RCC_APB2ENR |= (1<<2);
GPIOB_CRL |= (1<<0);
GPIOB_CRL &= ~(0xE);
GPIOC_CRH |= (1<<28);
GPIOC_CRH &= ~(0xE0000000);
GPIOA_CRL |= (1<<0);
GPIOA_CRL &= ~(0xE);
GPIOB_ODR |= (1<<0);
GPIOC_ODR |= (1<<15);
GPIOA_ODR |= (1<<0);
while(1){
GPIOB_ODR &= ~(1<<0);
Delay_ms(1000000);
GPIOB_ODR |= (1<<0);
Delay_ms(1000000);
GPIOC_ODR &= ~(1<<15);
Delay_ms(1000000);
GPIOC_ODR |= (1<<15);
Delay_ms(1000000);
GPIOA_ODR &= ~(1<<0);
Delay_ms(1000000);
GPIOA_ODR |= (1<<0);
Delay_ms(1000000);
}
}
void SystemInit()
{
}
?将所需要的启动文件复制到项目目录下(f103c8t6启动文件为startup_stm32f10x_md.s)
3.设置
勾选Create HEX File?
Debug下选择Use Simulator?
?4.编译
?编译并生成.hex文件
?四、电路实现点亮LED流水灯
1.串口方式烧录程序
连接电路,注意:跳线高电平boot 0要设置为1
?下载烧录工具软件mcuisp,接入电路,点击搜索串口,设置bps为256000,最下方设置为DTR的低电平复位,
RTS高电平进BootLoader ,选择.hex文件
点击读取器件信息,连接成功后,点击开始编程?,注意实验过程中不能拔出USB,否则需要重新烧录。
2.成功实现点亮LED流水灯
五、参考资料
【嵌入式07】寄存器映射原理详解,GPIO端口的初始化设置步骤
STM32 F103之点亮LED流水灯 (STM32入门学习)
GPIO介绍
|