首页 > 其他分享 >stm32寄存器笔记

stm32寄存器笔记

时间:2023-04-02 17:35:22浏览次数:51  
标签:__ IDR 笔记 stm32 IO 寄存器 GPIO uint32

  参考资料: GPIO相关介绍

        STM32 GPIO的配置寄存器(CRL、CRH)快速学习

 

  stm32的寄存器都是32位的。

  每个GPIO口有7个寄存器来控制。从GPIO的 GPIO_TypeDef 定义中可以看出,分别是:CRL,CRH,IDR,ODR,BSRR,LCKR。

 

/** 
  * @brief General Purpose I/O
  */

typedef struct
{
  __IO uint32_t CRL;
  __IO uint32_t CRH;
  __IO uint32_t IDR;
  __IO uint32_t ODR;
  __IO uint32_t BSRR;
  __IO uint32_t BRR;
  __IO uint32_t LCKR;
} GPIO_TypeDef;

 

 

配置寄存器:CRL, CRH

 

  对于一组GPIO,工作模式配置用2个32位的寄存器实现(16个IO口每个分到4位)。第一个32位寄存器CRL(端口配置低寄存器)对应0到7的GPIO,第二个32位寄存器CRH(端口配置高寄存器)则对应着8到15.

  从手册出看出来,以低寄存器为例,每个IO口有4位寄存器,分别是两位的MODEx和两位CNFx,其中MODE是用来配置输出/输入以及最大速度的,而CNF用来配置具体的输入输出模式的,例如推挽输出之类。

        

     

 

 

 

 

输入数据寄存器:IDR

 

   IDR是端口输入数据寄存器,也是一个只读寄存器。它有32位,但是只用了16位。在库函数 GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) 中,可以看见对于IDR的使用实例:

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  uint8_t bitstatus = 0x00;
  
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GET_GPIO_PIN(GPIO_Pin)); 
  
  if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET)
  {
    bitstatus = (uint8_t)Bit_SET;
  }
  else
  {
    bitstatus = (uint8_t)Bit_RESET;
  }
  return bitstatus;
}

 

输出数据寄存器:ODR

  类似IDR,ODR也只用了16位。但是这是一个可读写寄存器。向其中写数据可以控制IO口的输出电平,读其中的数据可以得到IO口的电平状态。

 

    

 

 

 

  例如,点灯实验中,我们在采用按键控制LED灯的亮灭时,可以使用ODR与位运算异或操作来直接实现状态改变,不需要再判断当前状态了:

 

GPIOA->ODR^=GPIO_Pin_5;

 

 

置位/复位寄存器:BSRR  

  这也是一个可以设置GPIO口输出为1或0的寄存器。不过和ODR不同的是,在写入BSRR时,只有二进制1起作用,0没有作用。若用0到15位来写,有1的位置被设为高电平;若用16到31位来写,有1的位置被设为低电平,即被清楚为0。同时,如果一个位置同时被设了高低电平,那么就是被设为高电平。

   

 

标签:__,IDR,笔记,stm32,IO,寄存器,GPIO,uint32
From: https://www.cnblogs.com/wegret/p/17280839.html

相关文章

  • 构建之法阅读笔记2
     学习到了单元测试,单元测试是指开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确,使用单元测试是为了证明某段代码的行为确实和开发者所期望的一致,使代码变得更加完美,让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能......
  • AirNet使用笔记4
    1、DBM“航迹与计划相关配置”中“自动相关参数”:“相关最小权重值(含)”:最小就是二次代码,航班号,地址码全部算下来的,例如航班号一致6,二次代码不一致-3,24地址码一致,最终3,满足最小权重;“直接相关权重值(含)”:权重值(含)为12,指仅正值加起来满足12,就相关,不管负值(不同时的负值)。2、DBM“发布......
  • Java学习笔记(十四) maven1
    Maven介绍Maven是apache旗下的一个开源项目,是一款用于管理和构建java项目的工具,基于项目对象模型(POM)的概念,通过一小段信息来管理项目的构建Apache软件基金会,成立于1999年7月,是目前世界上最大的最受欢迎的开源软件基金会,也是一个专门为支持开源项目而生的非营利性......
  • Java学习笔记(十三) 前端基础2
    Ajax介绍概念:AsynchronousJavaScriptAndXML,异步的JavaScript和XML作用:数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想,用户名是否可用的校验等......
  • Java学习笔记(十二) 前端基础1
    Web前端基础初识web前端网页由哪些部分组成?文字图片音频视频超链接等我们看到的网页,背后的本质是什么?程序员写的前端代码前端的代码是如何转换成用户眼中的网页的?通过浏览器转化(解析和渲染)成用户看到的网页浏览器中对代码进行解析渲染的部分,称为浏......
  • springboot学习笔记1-基本介绍
    springboot基本介绍官方文档什么是springbootspringboot可以轻松创建独立的、生产级的基于spring的应用程序springboot直接嵌入tomcat、jetty、或undertow,无须打war包,可以直接运行springboot应用程序quickstartforspringbootdemo需求说明:quickstart创建......
  • 计网学习笔记五 wireless && mobile networks
    老师把无线网络用一节课一遍过了…感觉没能学透,便课后自己总结,看书,找资料补充,把无线网络大概摸了个七七八八。虽然不算精细,但还能看!内容包括WLAN总概,WiFi—WLAN的实现,802.11规定的帧结构,以及蜂窝网络。强烈推荐一本书:《802.11WirelessNetworks:TheDefinitiveGuide》,2ndEd......
  • 《程序是怎样跑起来的》读书笔记1——对程序员来说CPU是什么
    一丶什么是程序程序是指令和数组的组合体,如:print("你好世界"),其中print是指令,你好世界是数据。CPU能直接识别和执行的只有机器语言,使用C,java这种高级语言编写的程序需要编译转换后才可以运行。二丶CPU的内部结构CPU即中央处理器,相当于计算机的大脑,内部由许多晶体管构成,负责解......
  • STM32F103的PB3、PB4引脚
    做了一个使用STM32F103RBT6的PCB,将PB3~9分配给了三位一体八段数码管,发现PB3、PB4对应的这两段映硬是不亮,检查寄存器是有值的,由于芯片是从另一块板子上面拆下来的,所以首先怀疑芯片故障,结果换了新的MCU还是同样的效果,于是上网搜索,原来PB3和PB4在系统复位时分别默认为JTag接口的SYS_J......
  • 极至框架Jz学习笔记
    设计的数据库表名:Select*fromjzmetadata_dataentity数据库表列名:Select*fromjzmetadata_dataentitycol    ......