你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

经验分享 | STM32G4系列是否支持位带操作

[复制链接]
STMCU小助手 发布时间:2025-10-23 15:27

印象中不止一次有人询问STM32G4系列到底支不支持位带操作。

其实,从STM32G4系列的参考手册可以看到,该系列芯片是确定支持位带操作的,下面为参考手册中的相关描述截图。

image.png

不过,在STM32G4系列参考手册上关于Bit banding的描述基本就上面这些了。这个位带操作是否被支持终究跟内核有关,STM32G4系列是Cortex -M4核,相关内核手册也有关于Bit banding的描述。见下图,位带区和位带别名区的地址安排及映射关系有清晰的定义。

image.png

显然,结合STM32参考手册及ARM Cortex-M4内核手册描述,STM32G4系列肯定是支持位带操作的。

可是,有人在试图利用位带操作对STM32G4系列的GPIO进行位操作时,根本成功不了。不知是硬件不支持还是自己的代码哪里有问题。

我们再结合上图看看,不难发现,只有落在0x20000000~0x200fffff的RAM才支持位带操作。对于外设寄存器来讲,只有落在0x40000000~0x400fffff空间的寄存器才支持位带操作。如果我们试图进行位操作的GPIO寄存器不落在这些区域自然没法做位带操作。

通过查看STM32G4参考手册,我们可以发现该系列的GPIO的各种寄存器的地址空间落在0x48000000~0x48001bff区域,根本就没落在位带区,也没落在位带别名区。

image.png

既然这样,我们就没法针对STM32G4系列的GPIO寄存器使用位带操作。

那么,在STM32G4系列里,有没有其他外设可以支持位带操作呢?即相应外设寄存器地址空间位于0x40000000~0x400fffff区域。其实,也是有的。比方片内的部分TIMER外设,见下图。是否还有其它外设请细看手册确认。

image.png

当然,位于0x20000000~0x200fffff区间的RAM也支持位带操作。

下面我基于位带操作对TIM2->CR1寄存器的CEN位,即该寄存器的bit0,和地址为0x20000800的RAM单元的bit2进行写1、写0的操作。

我基于STM32G473及HAL库创建工程,组织代码。

image.png

TIM2_BASE在HAL库中已经定义,我就没有重复定义了。稍加调试后,我们可以基于位带操作对TIM2->CR1的CEN位置位或清零,让计数器时而计数、时而暂停。我先将x20000800的RAM单元初始化为0xff,然后周期性修改位bit2,可以看到其值在0xff和0xfb两者间切换。下图为测试验证结果。

image.png

好,关于STM32G4位带操作的话题就聊到这里,上面主要是做些确认和解释,兼做提醒,免得走弯路浪费精力和时间。这玩意用不用,看个人喜好,其实也并非所有Cortex-M核都支持位带操作。

收藏 评论0 发布时间:2025-10-23 15:27

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版