历史上的今天

今天是:2024年09月30日(星期一)

正在发生

2021年09月30日 | STM32F103固件库编程(2)—位带操作

发布者:大伊山人 来源: eefocus关键字:STM32F103  固件库编程  位带操作 手机看文章 扫描二维码
随时随地手机看文章

与51单片机对比

STM32F103的位带操作相当于51单片机的sbit。因为STM32F103每次操作都是4个字节(32位),所以我们要把一个位变成32位,其中膨胀后的最后一位就是原来的位。

这样之后,通过赋值0或1,就能控制最后一位(即原来的位)。


STM32F103的位带区

在这里插入图片描述

位带区和位带别名区地址转换

一个位膨胀成四个字节,这样便于STM32以4个字节的方式操作。


1.外设位带别名区地址

所在字节的地址为 A,位序号为 n(0<=n<=7)

AliasAddr= =0x42000000+ ((A-0x40000000)x8+n)*4


其中 (A-0x40000000)代表着地址偏移,(A-0x40000000)*8之后代表着位偏移,最后,一个地址里有8位,((A-0x40000000)x8+n)代表着总的位偏移,一个位要膨胀成四个字节,最后位偏移要×4代表着地址偏移的数。


2.SRAM位带别名区地址

所在字节的地址为 A,位序号为 n(0<=n<=7)

AliasAddr= =0x22000000+ (A-0x20000000)x8x4 +n*4


分析同上


3.统一公式

((addr & 0xF0000000)+0x02000000+((addr & 0x00FFFFFF)<<5)+(bitnum<<2))

统一公式就是给计算机理解用的,记住公式就行,上述分析已经让你知道了位带是怎么实现的,如果想具体了解这个公式,可以自行百度了解。


所以C语言的宏实现如下:


#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x02000000+((addr&0x00FFFFFF)<<5)+(bitnum<<2)) 


举个例子:(控制GPIOC第二个IO口)

在这里插入图片描述

找到GPIOC的基地址:0x4001 1000

GPIOC_ODR的地址: 0x4001100C(基地址+地址偏移)

我们要控制第二个IO口,所以bitnum数值为2


#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x02000000+((addr&0x00FFFFFF)<<5)+(bitnum<<2)) 


BIATAND(0x4001100C,2) //为位带别名区的地址

地址强制转化成指针,

赋值1表示最后一位为1,原来的位是1,GPIOC第二个IO口输出高电平

赋值0表示最后一位为0,原来的位是0,GPIOC第二个IO口输出低电平

关键字:STM32F103  固件库编程  位带操作 引用地址:STM32F103固件库编程(2)—位带操作

上一篇:STM32 进阶教程 8 - 位带操作
下一篇:STM32重定向printf到串口

推荐阅读

“A12 是 iPhone 迄今最智能最强大的芯片。”两周前的苹果秋季发布会,iPhone 因为早早泄密并无惊喜。苹果全球市场营销高级副总裁 Philip Schiller 将最多篇幅用来介绍新的 A12 芯片和芯片带来的新功能。 新 iPhone 上市后,评价最好的拍照是因为芯片——智能 HDR 主要是一个芯片相关的功能。 用户的抱怨也同样可能因为芯片。美国的用户在拿...
freertos官方手册上有说,移植中出现的问题大多数是由堆栈设置不合理造成的,今天结合自身遇到问题分析一下1.任务堆栈设置过小,很容易造成硬件溢出,跳转到void HardFault_Handler(void);调试方法,可以通过调用函数,UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask );来跟踪剩余堆栈,不过在CubeMx中的Configuration->FreeRtos->In...
近日,亚马逊在官方博客上宣布推出掌纹识别技术 Amazon One,并决定将该技术投入到亚马逊无人商店中使用,之后可能会推广到更多的第三方商店、体育场馆和办公楼等场所。  据亚马逊官方声明,目前仅有西雅图的两家Amazon Go 商店支持这一应用。  使用方法并不难,插入信用卡并将手掌悬停在识别机器上,按照提示将该卡与用户个人掌纹绑定。...
广告摘要声明广告撰文 | 半夏最近,针对高耗能制造型企业的拉闸限电正在全国各地轮番上演。9月初,江苏省开始进行严格的“能耗双控”,“开二停二”是目前江苏省生产型企业碰到的普遍状况,相当于产能被直接减半。另一个制造大省——广东省,从今年5月份就开始执行“开五停二”的错峰用电方案,6月份调整为“开三停三”,9月份直接升级为“开二停五”,...

史海拾趣

问答坊 | AI 解惑

全国大学生电子设计竞赛历年题目(1994-2003)

本帖最后由 paulhyde 于 2014-9-15 09:24 编辑 好东西,可以参考一下。  …

查看全部问答∨

想找个熟悉LPC1000系列的朋友帮忙~~

正在做LPC1111+显卡的开发板,想找个熟悉LPC1000系列的朋友帮忙。 希望会SPI的兄弟可以帮忙。…

查看全部问答∨

LPC1114的Flash读写操作问题及解决办法

使用LPC1114的Flash时遇到些问题,特向各位请教。   (1)LPC1114的Flash是不是每次读写最少得256字节,而不可以一个字节一个字节的进行读写操作? (2)我现在想把一个数组(比较小)的数据随时存储到片内Flash中,并且可以随时读取,是 ...…

查看全部问答∨

文件输出,输入的问题

用CreateFile创建文件,并用WriteFile向文件中写入TCHAR字符,但为什么用ReadFile读取内容并显示到listbox中无法实现。…

查看全部问答∨

如何在编程实现ip与mac绑定

如题,板子上不支持arp -s命令,可否编一个程序转成2进制烧写进板子里运行~px255的板子~怎么实现呢,拜求各位走过路过的大侠~~…

查看全部问答∨

请教一个zigbee的问题?

我刚接触zigbee,正研究协议栈程序(cc2430)。我发现这样的一个问题:      当一个rfd节点申请加入corde节点时,应该在corder节点处有判断PANID(网络号)是否相同,如果相同就可以加入,但是在协议栈corer源程序里不论nwk层,ma ...…

查看全部问答∨

单片机※工控,QQ群号:23207776

单片机※工控,QQ群号:23207776…

查看全部问答∨

如何在WINDOWS平台下仿潜入式环境?

大家好!    由于金钱的问题,没有条件买ARM处理器及相应的环境,看书而不练习,导致我看了就忘了,请问有没有在windows下模拟arm环境及编程的,让我能够熟悉一下ARM的命令及编程?还有我想学windows ce,但是还是只有一台PC机,其他什 ...…

查看全部问答∨

学3G,不知道大家能给点建议不?我在上海,交大昂立3G学院如何?

大家好,我是今年刚毕业的一名学生,现在已经处于失业状态了,对找工作已经失去信心了,在校的时候就了解了一点3G的东西,所以现在想要去学个3G开发技术。我在各大网站上了解下来说交大昂立3G学院的老师还有就业方面都比较不错,不知道有在里面学习 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved