STM32寄存器操作端口模式CRL/CRH详解

首先,在开始讲解前,大家请先看如下一段代码:
#define SDA_IN_24c02(){GPIOB->CRH&=0XFFF0FFFF;GPIOB->CRH|=(u32)8<<16;} #define SDA_OUT_24c02() {GPIOB->CRH&=0XFFF0FFFF;GPIOB->CRH|=(u32)3<<16;}不难看出,这是楼主在编写AT24CXX时,配置IIC协议,为SDA端口设置输出输入模式的一段程序。小白到这里的时候绝对是不是看到懵了,其实不难,相信用寄存器写过stm8s的就明白了,其实这是利用寄存器配置端口模式,只是32为的寄存器太多!那让我们我们来介绍下这个寄存器。首先大家得明白CRL、CRH是2个控制端口模式的寄存器。他们的位数数据为:CRL(引脚的0-7脚)CRH(引脚的8-15脚)
然后一个端口分4位来控制模式,这4bit的组合为:
我们来分析一下:
GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32) 8<<28; 的意思是先将第7位(也就是PB7)都置0,其他GPIO设置保持不变,得0000, 然后1000B, 左移28位, 得1000, 分别是将CRL的31到28位置1000,通过查上面的表: 1000意思就是Input模式, Input pull-up即输出模式3换成2进制是0011,结合上面的就是00就是outpu的push-pull,11表示速度是50MHz 。那么,如果要修改PB_11的配置,就修改CRH,移动34次就好(大家可能感到疑惑的是,这个34是怎么来的?首先通过上面的讲解,我们不难发现,每个GPIO在CRx寄存器里分配了4bit来控制,我们将一个数从第0位移动第3位,那么就需要移动3次,所以需要移动3*4次。)#define SDA_IN() {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=(u32)8<<12;} #define SDA_OUT() {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=(u32)3<<12;}

STM32寄存器操作端口模式CRL/CRH详解相关推荐

  1. STM32通过IIC读取MPU6050原始数据过程详解

    STM32通过IIC读取MPU6050数据过程详解 一:硬件介绍 此款MPU6050是通过IIC来与MCU通信的,它有两个IIC接口,第一个是主IIC,通过SCL和SDA两条线与MCU通信:第二个辅助 ...

  2. STM32 GPIO 配置之ODR, BSRR, BRR 详解

    用stm32 的配置GPIO 来控制LED 显示状态,可用ODR,BSRR,BRR 直接来控制引脚输出状态. ODR寄存器可读可写:既能控制管脚为高电平,也能控制管脚为低电平.管脚对于位写1 gpio ...

  3. STM32开发实战:W25Q32JV SPI Flash详解

    STM32开发实战:W25Q32JV SPI Flash详解 在STM32单片机的应用中,使用SPI Flash能够有效地扩展程序和数据存储空间.W25Q32JV SPI Flash是一种常用的Fla ...

  4. 寄存器(1)寄存器概念,x86寄存器种类说明及汇编代码详解

    寄存器(1)寄存器概念,x86寄存器种类说明及汇编代码详解 1. 什么是寄存器 1.1 概念 1. 什么是寄存器: 2. 寄存器作用: 1.2 通俗易懂理解寄存器 2. x86寄存器种类说明及汇编代码 ...

  5. android strictmode有什么作用,Android严苛模式StrictMode使用详解

    StrictMode类是Android 2.3 (API 9)引入的一个工具类,可以用来帮助开发者发现代码中的一些不规范的问题,以达到提升应用响应能力的目的.举个例子来说,如果开发者在UI线程中进行了 ...

  6. android mvp模式例子_Android中mvp模式使用实例详解

    MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负 责显示.作为一种新的模式,MVP与MVC有着一 ...

  7. STM32固件库文件树及构成详解

    (想要pfd格式文件的可以留下邮箱) STM32固件库文件树及构成详解(库版本:STM32F10x_StdPeriph_Lib_V3.5.0) 库减压后所有文件夹构成如下: /

  8. java 工厂模式详解_java 工厂模式的实例详解

    java 工厂模式的实例详解 工厂方法中的"工厂"和我们平常理解的一样:用于生产产品. 而客户是要和产品打交道,所以工厂方法模式的意义在于把客户和产品分开,达到解耦和更灵活的目的. ...

  9. LVS-NAT和LVS-DR模式的实现详解

    LVS-NAT和LVS-DR模式的实现详解 2011-09-10 10:51:08     我来说两句 收藏我要投稿 linux下LVS的实现 在2.4.23之前的linux内核想要使用LVS需要重新 ...

最新文章

  1. 每天一个linux命令(36):diff 命令
  2. [你必须知道的.NET]第二十七回:interface到底继承于object吗?
  3. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 80 Days(双向队列+尺取法)
  4. C# ASP.NET MVC HtmlHelper用法大全
  5. hbase异步客户端连接-非阻塞并发模式实验记录(还没弄完)
  6. 微信小程序字符串与对象相互转换
  7. 2020牛客多校第1场I-1 or 2一般图最大匹配带花树
  8. 线性结构 —— 单调栈与单调队列
  9. mysql proxy无法连接_客户端无法通过4040端口连接到mysql proxy
  10. Jmeter工具使用-分布式架构和服务器性能监控解决方案
  11. makefile obj文件路径_makefile中包含的文件的路径
  12. mysql中group_concat函数的使用以及separator的用法
  13. 巃嵸鸿蒙构瑰材兮,集部-李太白全集
  14. cmd命令安装python第三方库_Python如何安装第三方库
  15. 概率学习总结笔记(扑克概率)
  16. 新浪微博since_id值
  17. PDF文件有密码怎么取消加密
  18. 在250美元5天城市
  19. 315晚会给我们的几点启示
  20. vue底部跳转_Vue实现回到顶部和底部动画效果

热门文章

  1. 牛逼!IDEA 护眼方案来了…
  2. 新手指南: Linux 新手应该知道的 26 个命令
  3. efm8bb1 烧录器_EFM8BB1LCK全功能、低成本8位MCU套件开箱评测
  4. 使用matlab软件打开一幅图片并且分别提取其中的RGB分量并显示
  5. 其实,APP文案还可以这样写·····
  6. linux需要看门狗喂狗程序,多任务看门狗, 喂狗方法
  7. 【单片机毕业设计】【mcuclub-jj-026】基于单片机的垃圾桶的设计
  8. MATLAB_LSB_隐藏水印和提取,附代码
  9. Java kafka监控 topic的数据量count情况,每个topic的Summed Recent Offsets(总结最近的偏移量)
  10. 【python】都2022年不会还有人不会在电脑桌面上养宠物吧~