这里写目录标题

  • 问题:
  • 基础知识:
  • 解释:
  • 扩展
    • PA1为输入(上/下拉)
    • PA2为输入(上/下拉)
    • PA1为输出(通用推挽输出50MHZ)
    • PA2为输出(通用推挽输出50MHZ)

问题:


当32单片机进行引脚分配时,需要了解该程序的功能。

基础知识:

STM32 的每个 IO 端口都有 7 个寄存器来控制。他们分别是:

配置模式的 2 个 32 位的端口配置寄存器 CRL 和 CRH;
2 个 32 位的数据寄存器 IDR 和 ODR;
1 个 32 位的置位/复位寄存器BSRR;
一个 16 位的复位寄存器 BRR;
1 个 32 位的锁存寄存器 LCKR;
我们常用的 IO 端口寄存器只有 4 个:CRL、CRH、IDR、ODR。CRL 和 CRH 控制着每个 IO 口的模式及输出速率。

其中CRL配置规则

其中CRH配置规则

解释:

1、输入

GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=8<<0;

①前半段GPIOA->CRL&=0XFFFFFFF0;

利用“与”运算,把这个位清0,同时不影响其他的位的设置。

此时把PA0设置成模拟输入模式

②后半段GPIOA->CRL|=8<<0;

意思就是将8(1000)左移0位(不移位),然后再与GPIOC->CRL进行运算。

此时把PA0设置成上拉/下拉输入模式

2、输出

GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=3<<0;

①前半段GPIOA->CRL&=0XFFFFFFF0;

利用“与”运算,把这个位清0,同时不影响其他的位的设置。

此时把PA0设置成模拟输入模式

②后半段GPIOA->CRL|=3<<0;

意思就是将3(0011)左移0位(不移位),然后再与GPIOC->CRL进行运算。

此时把PA0设置成通用推挽输出模式

扩展

PA1为输入(上/下拉)

GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=8<<4;

PA2为输入(上/下拉)

GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=8<<8;

PA1为输出(通用推挽输出50MHZ)

GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=3<<4;

PA2为输出(通用推挽输出50MHZ)

GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=3<<8;

以此类推。

STM32单片机的CRL和CRH寄存器相关推荐

  1. STM32——GPIO的CRL、CRH和CNF与MODE的关系

    GPIO的CRL.CRH和CNF与MODE的关系 STM32的CRL控制着每个IO端口的位占用CRL的4个位,高两位为CNF,低两位为MODE. CRH的作用和CRL完全一样,只是CRL控制的是低8位 ...

  2. STM32单片机的GPIO寄存器CRL、CRH、IDR、ODR、BRSS、BRR

    STM32的寄存器多如牛毛,要一个一个的弄清楚谈何容易呀,所以我们在学习的时候要抓住重点,挑重要的进行学习和记忆,因为STM32一个一个去配置寄存器的话相当的麻烦,我们实际开发的话也不会一个一个去配置 ...

  3. STM32单片机硬件I2C驱动程序(查询方式)

    本文章原始地址:http://feotech.com/?p=69 本程序主要用于驱动STM32单片机芯片的硬件I2C寄存器,实现通过使用芯片自带的I2C寄存器进行数据的发送与接收. 本例程中采用I2C ...

  4. STM32单片机硬件I2C驱动程序(软件轮询方式)---摘自:FeoTech

    感谢原作者:FeoTech   原文网址:http://feotech.com/?p=69 本程序主要用于驱动STM32单片机芯片的硬件I2C寄存器,实现通过使用芯片自带的I2C寄存器进行数据的发送与 ...

  5. crh寄存器_CRL,CRH寄存器

    在移植ds18b20时看到这样一段代码 #define DS18B20_IO_IN() {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=8<<1 ...

  6. STM32 GPIO的配置寄存器(CRL、CRH)输入输出模式配置

    STM32 GPIO的配置寄存器(CRL.CRH)输入输出模式配置 1.学会使用寄存器设定所需IO的方向,学会配置CRL.CRH 2.理解如下代码的含义 //IO方向设置 #define DS18B2 ...

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

    1.问题 在使用STM32的时候配置GPIO是最常见的操作,可以使用比较简单明白的库函数配置,但很繁杂.使用寄存器的方式可以快速配置,对于同一个IO口的输入输出都需要使用到的时候,比如IIC通讯的SD ...

  8. STM32之GPIO的CRL、CRH、IDR、ODR、BSRR、BRR、LCKR寄存器

    STM32中控制GPIO状态的一共有7个寄存器,分别是CRL.CRH.IDR.ODR.BSRR.BRR.LCKR. 调用即可看到选项

  9. stm32点亮LED的有关寄存器配置CRL、CRH、IDR、ODR

    1.先了解io口 32的io口可以由软件配置寄存器为8种模式: 1.输入浮空 5.开漏输出 2.输入上拉 6.推挽输出 3.输入下拉 7.推挽式复用功能 4.模拟输入 8.开漏复用功能 单io口寄存器 ...

最新文章

  1. Gitlab Issue Tracker and Wiki(一)
  2. 响应式网站——第二话(技术实现)
  3. 【NLP】bert4vec:一个基于预训练的句向量生成工具
  4. openvswitch2.8.1 centos7.4 源码编译安装
  5. 三个彩灯循环点亮程序_近百组彩灯点亮江畔,义渡灯会正式亮灯啦
  6. php文本框自动补全,PHP自动补全表单的两种方法
  7. KubeVela v1.3 多集群初体验,轻松管理应用分发和差异化配置
  8. 【转】Java垃圾收集器
  9. 电容有哪些用途?常见的九大作用
  10. 抖音视频根据用户ID下载方法
  11. 我喜欢生命本来的样子--周国平
  12. Web前端开发技术课程大作业——南京旅游景点介绍网页代码html+css+javascript
  13. MySQL报错端口3306解决方法
  14. whistle-安卓手机配置代理
  15. 无法成功完成操作,因为文件包含病毒或潜在的垃圾软件。
  16. java分哪几部分_Java体系主要分为三部分,下列哪个选项不是其中的一个组成部分?...
  17. 关于 MDD(度量驱动开发)的一些思考
  18. java中日期格式大小写标准写法
  19. 【友小盟看世界】数据向善:寻亲32年后找回被拐儿子!全国打拐第一数据库立功...
  20. Ubuntu随身系统

热门文章

  1. ​LeetCode刷题实战488:祖玛游戏
  2. 测试工程师-yy面试 cvte面试总结
  3. 车牌生成代码车牌后5位生成代码
  4. 手游立项(一):理解手游开发
  5. 【Java课堂】接口详解
  6. android 唱歌打分源码,Android App中使用RatingBar实现星级打分功能的教程
  7. iOS迅雷安装最新方法,免签稳定,看教程!
  8. 基于HTC New One 802w刷机全流程说明
  9. C#实现简单的网游客户端编程
  10. 热激发延迟荧光(TADF)材料ND-AC、CND-AC、NAI-BiFA、NAI-PhBiFA