印象中不止一次有人詢問STM32G4系列到底支不支持位帶操作。
其實,從STM32G4系列的參考手冊可以看到,該系列芯片是確定支持位帶操作的,下面為參考手冊中的相關(guān)描述截圖。
不過,在STM32G4系列參考手冊上關(guān)于Bitbanding的描述基本就上面這些了。這個位帶操作是否被支持終究跟內(nèi)核有關(guān),STM32G4系列是Cortex -M4核,相關(guān)內(nèi)核手冊也有關(guān)于Bit banding的描述。見下圖,位帶區(qū)和位帶別名區(qū)的地址安排及映射關(guān)系有清晰的定義。
顯然,結(jié)合STM32參考手冊及ARM Cortex-M4內(nèi)核手冊描述,STM32G4系列肯定是支持位帶操作的。
可是,有人在試圖利用位帶操作對STM32G4系列的GPIO進(jìn)行位操作時,根本成功不了。不知是硬件不支持還是自己的代碼哪里有問題。
我們再結(jié)合上圖看看,不難發(fā)現(xiàn),只有落在0x20000000~0x200fffff的RAM才支持位帶操作。對于外設(shè)寄存器來講,只有落在0x40000000~0x400ffff空間的寄存器才支持位帶操作。如果我們試圖進(jìn)行位操作的GPIO寄存器不落在這些區(qū)域自然沒法做位帶操作。
通過查看STM32G4參考手冊,我們可以發(fā)現(xiàn)該系列的GPIO的各種寄存器的地址空間落在0x48000000~0x48001bff區(qū)域,根本就沒落在位帶區(qū),也沒落在位帶別名區(qū)。
既然這樣,我們沒法針對STM32G4系列的GPIO寄存器使用位帶操作。
那么,在STM32G4系列里,有沒有其他外設(shè)可以支持位帶操作呢?即相應(yīng)外設(shè)寄存器地址空間位于0x40000000~0x400ffff區(qū)域。其實,也是有的。比方片內(nèi)的部分TIMER外設(shè),見下圖。是否還有其它外設(shè)請細(xì)看手冊確認(rèn)。
當(dāng)然,位于0x20000000~0x200fffff區(qū)間的RAM也支持位帶操作。
下面我基于位帶操作對TIM2->CR1寄存器的CEN位,即該寄存器的bit0,和地址為0x20000800的RAM單元的bit2進(jìn)行寫1、寫0的操作。
我基于STM32G473及HAL庫創(chuàng)建工程,組織代碼。
TIM2_BASE在庫中已經(jīng)定義,這里就沒有重復(fù)定義了。稍加調(diào)試后,我們可以基于位帶操作對TIM2->CR1的CEN位置位或清零,讓計數(shù)器時而計數(shù)時而暫停。我先將x20000800的RAM單元初始化為0xff,然后周期性修改為bit2,可以看到其值在0xff和0xfb兩者間切換。下圖為測試驗證結(jié)果。
好,關(guān)于STM32G4位帶操作的話題就聊到這里,上面主要是做些確認(rèn)和解釋,兼做提醒,免得走彎路浪費精力和時間。這玩意用不用,看個人喜好,其實也并非所有Cortex-M核都支持位帶操作。
-
寄存器
+關(guān)注
關(guān)注
31文章
5403瀏覽量
122947 -
STM32
+關(guān)注
關(guān)注
2287文章
10988瀏覽量
361650 -
GPIO
+關(guān)注
關(guān)注
16文章
1246瀏覽量
53386
原文標(biāo)題:STM32G4系列是否支持位帶操作
文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
對于STM32G4系列的MCU,其GPIO的位操作是否還支持位帶操作?
位帶操作的相關(guān)資料推薦
CH573到底支不支持mesh組網(wǎng)?
STM32G431不支持這種雙bank操作模式嗎?
難道STM32G4芯片的主頻才到80MHz?

openharmony不支持安卓嗎
STM32學(xué)習(xí)筆記:位帶操作(Bit_band Operations)

AN5310_使用STM32F3系列與STM32G4系列設(shè)備的模擬特性指南

評論