STM32寄存器操作端口模式CRL/CRH详解
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详解相关推荐
- STM32通过IIC读取MPU6050原始数据过程详解
STM32通过IIC读取MPU6050数据过程详解 一:硬件介绍 此款MPU6050是通过IIC来与MCU通信的,它有两个IIC接口,第一个是主IIC,通过SCL和SDA两条线与MCU通信:第二个辅助 ...
- STM32 GPIO 配置之ODR, BSRR, BRR 详解
用stm32 的配置GPIO 来控制LED 显示状态,可用ODR,BSRR,BRR 直接来控制引脚输出状态. ODR寄存器可读可写:既能控制管脚为高电平,也能控制管脚为低电平.管脚对于位写1 gpio ...
- STM32开发实战:W25Q32JV SPI Flash详解
STM32开发实战:W25Q32JV SPI Flash详解 在STM32单片机的应用中,使用SPI Flash能够有效地扩展程序和数据存储空间.W25Q32JV SPI Flash是一种常用的Fla ...
- 寄存器(1)寄存器概念,x86寄存器种类说明及汇编代码详解
寄存器(1)寄存器概念,x86寄存器种类说明及汇编代码详解 1. 什么是寄存器 1.1 概念 1. 什么是寄存器: 2. 寄存器作用: 1.2 通俗易懂理解寄存器 2. x86寄存器种类说明及汇编代码 ...
- android strictmode有什么作用,Android严苛模式StrictMode使用详解
StrictMode类是Android 2.3 (API 9)引入的一个工具类,可以用来帮助开发者发现代码中的一些不规范的问题,以达到提升应用响应能力的目的.举个例子来说,如果开发者在UI线程中进行了 ...
- android mvp模式例子_Android中mvp模式使用实例详解
MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负 责显示.作为一种新的模式,MVP与MVC有着一 ...
- STM32固件库文件树及构成详解
(想要pfd格式文件的可以留下邮箱) STM32固件库文件树及构成详解(库版本:STM32F10x_StdPeriph_Lib_V3.5.0) 库减压后所有文件夹构成如下: /
- java 工厂模式详解_java 工厂模式的实例详解
java 工厂模式的实例详解 工厂方法中的"工厂"和我们平常理解的一样:用于生产产品. 而客户是要和产品打交道,所以工厂方法模式的意义在于把客户和产品分开,达到解耦和更灵活的目的. ...
- LVS-NAT和LVS-DR模式的实现详解
LVS-NAT和LVS-DR模式的实现详解 2011-09-10 10:51:08 我来说两句 收藏我要投稿 linux下LVS的实现 在2.4.23之前的linux内核想要使用LVS需要重新 ...
最新文章
- 每天一个linux命令(36):diff 命令
- [你必须知道的.NET]第二十七回:interface到底继承于object吗?
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 80 Days(双向队列+尺取法)
- C# ASP.NET MVC HtmlHelper用法大全
- hbase异步客户端连接-非阻塞并发模式实验记录(还没弄完)
- 微信小程序字符串与对象相互转换
- 2020牛客多校第1场I-1 or 2一般图最大匹配带花树
- 线性结构 —— 单调栈与单调队列
- mysql proxy无法连接_客户端无法通过4040端口连接到mysql proxy
- Jmeter工具使用-分布式架构和服务器性能监控解决方案
- makefile obj文件路径_makefile中包含的文件的路径
- mysql中group_concat函数的使用以及separator的用法
- 巃嵸鸿蒙构瑰材兮,集部-李太白全集
- cmd命令安装python第三方库_Python如何安装第三方库
- 概率学习总结笔记(扑克概率)
- 新浪微博since_id值
- PDF文件有密码怎么取消加密
- 在250美元5天城市
- 315晚会给我们的几点启示
- vue底部跳转_Vue实现回到顶部和底部动画效果
热门文章
- 牛逼!IDEA 护眼方案来了…
- 新手指南: Linux 新手应该知道的 26 个命令
- efm8bb1 烧录器_EFM8BB1LCK全功能、低成本8位MCU套件开箱评测
- 使用matlab软件打开一幅图片并且分别提取其中的RGB分量并显示
- 其实,APP文案还可以这样写·····
- linux需要看门狗喂狗程序,多任务看门狗, 喂狗方法
- 【单片机毕业设计】【mcuclub-jj-026】基于单片机的垃圾桶的设计
- MATLAB_LSB_隐藏水印和提取,附代码
- Java kafka监控 topic的数据量count情况,每个topic的Summed Recent Offsets(总结最近的偏移量)
- 【python】都2022年不会还有人不会在电脑桌面上养宠物吧~