【硬件开发自用手册】GPIO的寄存器介绍(STM32F103C8T6)

0、从GPIO_TypeDef结构体的定义中STM32F103C8T6的GPIO有7个寄存器:

typedef struct
{
   
   
  _IO uint32_t CRL; //低8位端口配置寄存器(配置工作模式,输出速度)
  _IO uint32_t CRH; //高8位端口配置寄存器(配置工作模式,输出速度)
  _IO uint32_t IDR; //端口输入数据寄存器(用于判断IO引脚的电平)
  _IO uint32_t ODR; //端口输出数据寄存器(用于设置IO引脚输出的电平)
  _IO uint32_t BSRR;//端口位设置,清除寄存器(设置ODR寄存器的值)
  _IO uint32_t BRR; //F4之后没有这个寄存器,考虑代码兼容性的话不建议使用
 _IO uint32_t LCKR;//配置锁定,用的不多
 }GPIO_TypeDef;

1、CRL(Configuration Register Low)

用于配置GPIO端口的低8位(即引脚0到7)的模式和特性,每个引脚占用4个位,配置8个引脚。
在这里插入图片描述 CRL寄存器的结构

  • 示例:用配置寄存器的方法配置PA0为输出模式(通用推挽输出)
#include"stm32f10x.h"

int main(void)
{
   
   
//开启GPIOA的时钟
RCC->APB2ENR|=RCC_APB2ENR_IOPAEN;

//直接修改CRL寄存器来配置PA0
//每个引脚占4位,所以PA0的配置位于CRL的低4位
//设置为输出模式(01:10MHz General Purpose Output Push-Pull
GPIOA->CRL&=~(0x0F<<(0*4));/*清除PA0原来的配置,~相当于把00001111倒写为11110000。
<<为左移操作符,0*4=0,表示左移0位,如果是配置的是PA1,则要改为1*4=4,左移4位*/
GPIOA->CRL|=(0x03<<(0*4));//设置PA0为输出模式(0x03表示10MHz General Purpose Output push-pull)
/*详细说明1
结合CRL寄存器结构表来看,每4位分2组2位,分别为CNF和MODE。
其中CNF取值:
    1、当MODE=00时:
      00 模拟输入模式
      01 浮空输入模式
      10 上拉/下拉输入模式
      11 保留
    2、当MODE>00时:
      00 通用推挽输出模式
      01 通用开漏输出模式
      10 复用功能推挽输出模式
      11 复用功能开漏输出模式
其中MODE取值:
      00 输入模式(复位后的状态)
      01 输出模式,最大速度10MHz
      10 输出模式,最大速度2MHz
      11 输出模式,最大速度50MHz
*/
/*详细说明2
   与操作&=:只有两个相应的二进制位都为1时,结果才为1

   11111111(reg)
 & 11110000(mask)
 ----------11110000(result)
   或操作|=:只有两个相应的二进制位中有一个为1,结果就为1
   11110000(reg)
 | 00001111(mask)
 ----------11111111(result)
 */
 //设置PA0为高电平
 GPIO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值