暑假在根据例程对单片机与MPU6050进行通信的代码进行更改引脚时遇到一些问题,后来发现是控制IO工作模式的寄存器代码没有修改正确,下面是对CRH和CRL寄存器进行更改的方法。

//IO方向设置
#define MPU_SDA_IN()  {GPIOB->CRH&=0XFFF0FFFF;GPIOB->CRH|=8<<4*4;}
#define MPU_SDA_OUT() {GPIOB->CRH&=0XFFF0FFFF;GPIOB->CRH|=3<<4*4;

这是单片机与MPU6050通过IIC进行通信时对SDA引脚进行IO输入输出设置,其中SDA引脚用的STM32的PB12。

GPIOB->CRH和GPIOB->CRL是2个控制IO模式的32位寄存器。其中CRL对应引脚的0-7引脚,CRH对应引脚的8-15引脚。所以每个引脚的模式通过四个bit位进行控制,详细的控制模式可以参考下图,这是我从STM32F10X参考手册上截的与CRH相关的图,CRL与其基本相同,只是控制的引脚不同。

GPIOB->CRH&=0XFFF0FFFF;GPIOB->CRH|=8<<4*4; 的意思是先将PB12对应的四个位置0,其他GPIO设置保持不变,得0000, 然后将8对应的二进制数1000左移16位, 得1000,就是将CRH的19到16位置为1000,通过上图可知1000配置为上拉/下拉输入模式。

GPIOB->CRH&=0XFFF0FFFF;GPIOB->CRH|=3<<4*4; 的意思是先将PB12对应的四个位置0,其他GPIO设置保持不变,得0000, 然后将3对应的二进制数0011左移16位, 得0011,就是将CRH的19到16位置为0011,通过上图可知0011配置为推挽输出模式,最大速度50MHz。

对于CRH,左移的位数为引脚对应数值减去八再乘以四,如PB12为(12-8)*4。同理,在对PB0到PB7引脚进行配置时只要将CRH改为CRL,左移位数为引脚对应数值乘以4,如PB6为6*4。

移植MPU6050时与CRH和CRL寄存器相关的问题相关推荐

  1. crh寄存器_关于CRH、CRL、ODR和IDR寄存器的使用总结

    关于 CRH . CRL . ODR 和 IDR 寄存器的使用总结 一. CRH 和 CRL 的使用: CRH 和 CRL 的使用基本相同, CRH 用于控制 GPIOX ( X 表示 A---G ) ...

  2. crh寄存器_STM32的CRH、CRL、ODR和IDR寄存器的使用总结

    一.下载: STM32F103中文参考手册 二.CRH和CRL的介绍: CRH和CRL的使用基本相同,CRH用于控制GPIOX(X表示A---G)的高8位(Pin15---Pin8),而CRL用于控制 ...

  3. 4.CRH寄存器和CRL寄存器

    #define SDA_IN() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=8<<28;}//GPIOB7,上拉/下拉输入 #define ...

  4. STM32的CRH、CRL、ODR和IDR寄存器的使用总结

    STM32的CRH.CRL.ODR和IDR寄存器的使用总结 一.下载: STM32F103中文参考手册 百度网盘:链接:百度网盘 请输入提取码 密码:lwcg 二.CRH和CRL的介绍: CRH和CR ...

  5. 关于CRH、CRL、ODR和IDR寄存器的使用总结

    关于CRH.CRL.ODR和IDR寄存器的使用总结 一.CRH和CRL的使用: CRH和CRL的使用基本相同,CRH用于控制GPIOX(X表示A---G)的高8位(Pin15---Pin8),而CRL ...

  6. MPU6050使用/正点原子代码移植/MPU6050注意事项/关于几个频率的解释/STM32F103

    关于MPU6050 MPU6050简单介绍 对于各位接触到MPU6050的同学们来说,应该不缺MPU6050的参考资料, 其中有一篇<MPU-6000 / MPU-6050 产品说明书>- ...

  7. CRH、CRL、ODR和IDR的使用

    STM32的每个I/O口都由7个寄存器控制:2个32位端口配置寄存器CRL和CRH;2个32位的数据寄存器IDR和ODR:1个32位的置位复位寄存器BSRR:1个16位的复位寄存器BRR:1个32位的 ...

  8. STM32 CRH和CRL设置方向

    STM32 CRH和CRL设置方向 在进行IO口方向设置的时候经常见到如下设置方式 //IO方向设置 PC11 #define MPU_SDA_IN() {GPIOC->CRH&=0XF ...

  9. STM32 CRH和CRL记录

    在进行IO口方向设置的时候经常见到如下设置方式 //IO方向设置 PC11 #define MPU_SDA_IN() {GPIOC->CRH&=0XFFFF0FFF;GPIOC-> ...

最新文章

  1. 互联网轻量级框架SSM-查缺补漏第二天
  2. 驱动人生(离线网卡版)_驱动人生8.0版正式发布,最新功能速看
  3. 套接字编程(VC_Win32)
  4. C++ Primer 5th笔记(chap 13 拷贝控制)交换操作
  5. YUV 后面数字的含义_高速公路标示牌上的字母和数字,到底什么意思?很多人都不知道...
  6. #pragma pack(push,1) #pragma pack(pop)
  7. 2019 微软Build大会预告:值得开发者期待的是哪些?
  8. Android SQLite详解
  9. select 查询例子集
  10. 第39天-进程 _1(2013.09.11)
  11. opencv在linux设置环境变量,linux下设置opencv环境变量
  12. 从零实现深度学习框架——自动求导神器计算图
  13. 《Python算法教程_中文版》pdf
  14. 计算几何的模板(大神整理)
  15. 打破思维定势,创新景区门票网络分销模式
  16. Oracle格式化总结
  17. 基于图的广度优先搜索策略(耿7.11)
  18. 爬取东方财富的十大成交股
  19. 来个模态kuang_使用 React 制作一个模态框
  20. js 解析GET 请求参数

热门文章

  1. FineBI可视化报表制作-Demo
  2. 汽车标定知识整理(一):标定简介与CCP报文协议简介
  3. Flutter jsonEncode 和 jsonDecode
  4. 清除或隐藏antd数字输入框InputNumber最右侧上下箭头
  5. 浅谈树形结构的特性和应用(上):多叉树,红黑树,堆,Trie树,B树,B+树...
  6. go 语言基础 运算符
  7. springboot快速详细配置搭建
  8. 4.累积分布函数CDF
  9. AI炒股回报率500%?内行揭秘玄机
  10. cubase教程分享:Cubase录音时如何自动激活监听按钮