STM32F103系列芯片的地址映射和寄存器映射原理;了解GPIO端口的初始化设置三步骤

实验任务:

学习和理解STM32F103系列芯片的地址映射和寄存器映射原理;了解GPIO端口的初始化设置三步骤(时钟配置、输入输出模式设置、最大速率设置)

实验过程:

一、STM32F103系列芯片的地址映射和寄存器映射原理
1.寄存器
寄存器是中央处理器内的组成部分。 寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。

简单来说,寄存器就是存放东西的一个空间器物。寄存器可能存放的是指令、数据或地址。

按照功能的不同,可将寄存器分为基本寄存器和移位寄存器两大类。基本寄存器只能并行送入数据,也只能并行输出。移位寄存器中的数据可以在移位脉冲作用下依次逐位右移或左移,数据既可以并行输入、并行输出,也可以串行输入、串行输出,还可以并行输入、串行输出,或串行输入、并行输出,十分灵活,用途也很广。

存放数据的寄存器是最好理解的,如果你需要读取一个数据,直接到这个寄存器所在的地方来问问他,数据是多少就行了。问寄存器这个动作,叫做访问寄存器。不同的数据会存放在不同的寄存器,例如引脚PA2与PB8的高低电平数据(1或0)肯定放在不同的寄存器里,那么怎么区分不同的寄存器呢?通过地址,不同的寄存器有不同的地址,就像老张行李寄存处在101号店铺,老王行李寄存处在258号店铺。

指令、地址寄存器与数据寄存器类似,里边存放的都是0和1,毕竟单片机也只认识机器码,机器码都是0或1,只是特别的规定下,数据寄存器里面存放的0和1表示数据,指令寄存器里存放的表示指令。
请添加图片描述

 

二、GPIO端口的初始化
1.GPIO简介
GPIO(英语:General-purpose input/output),通用型之输入输出的简称,功能类似8051的P0—P3,其接脚可以供使用者由程控自由使用,PIN脚依现实考量可作为通用输入(GPI)或通用输出(GPO)或通用输入与输出(GPIO),如当clk generator, chip select等。

既然一个引脚可以用于输入、输出或其他特殊功能,那么一定有寄存器用来选择这些功能。对于输入,一定可以通过读取某个寄存器来确定引脚电位的高低;对于输出,一定可以通过写入某个寄存器来让这个引脚输出高电位或者低电位;对于其他特殊功能,则有另外的寄存器来控制它们。
请添加图片描述

实例:

  • 单个GPIO端口
  • GPIO_InitTypeDef GPIO_InitStructure;
    第一步:使能GPIOA的时钟:
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    
    第二步:设置GPIOA参数:输出OR输入,工作模式,端口翻转速率
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_6| GPIO_Pin_7| GPIO_Pin_8; //设定要操作的管脚
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置为推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // IO口速度为50MHz
    
    第三步:调用GPIOA口初始化函数,进行初始化。
    GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化GPIOA
    
    第四步:调用GPIO-SetBits函数,进行相应为的置位。
    GPIO_SetBits(GPIOA,GPIO_Pin_0); //输出高
    
    

  • 多个GPIO端口
  • GPIO_InitTypeDef GPIO_InitStructure;
    第一步:使能GPIOA,GPIOE的时钟:
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
    
    第二步:设置GPIOA,GPIOE参数:输出OR输入,工作模式,端口翻转速率
    第三步:调用GPIOA口初始化函数,进行初始化。
    第四步:调用GPIO-SetBits函数,进行相应为的置位。
    
    把第二、三、四步合并分别设置GPIOA和GPIOE
    先设置GPIOA
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; // 第四个口,PA4
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置为推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // IO口速度为50MHz
    GPIO_Init(GPIOA,&GPIO-InitST); //根据设定参数初始化GPIOA
    GPIO_SetBits(GPIOA,GPIO_Pin_4); //输出高
    
    再设置GPIOE
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; // 第三个口,PE3
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置为推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // IO口速度为50MHz
    GPIO_Init(GPIOE,&GPIO-InitST); //根据设定参数初始化GPIOE
    GPIO_SetBits(GPIOE,GPIO_Pin_3); //输出高
    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值