印象中不止一次有人詢問STM32G4系列到底支不支持位帶操作。
其實(shí),從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ū)域。其實(shí),也是有的。比方片內(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位置位或清零,讓計(jì)數(shù)器時而計(jì)數(shù)時而暫停。我先將x20000800的RAM單元初始化為0xff,然后周期性修改為bit2,可以看到其值在0xff和0xfb兩者間切換。下圖為測試驗(yàn)證結(jié)果。
好,關(guān)于STM32G4位帶操作的話題就聊到這里,上面主要是做些確認(rèn)和解釋,兼做提醒,免得走彎路浪費(fèi)精力和時間。這玩意用不用,看個人喜好,其實(shí)也并非所有Cortex-M核都支持位帶操作。
-
寄存器
+關(guān)注
關(guān)注
31文章
5336瀏覽量
120229 -
STM32
+關(guān)注
關(guān)注
2270文章
10895瀏覽量
355724 -
GPIO
+關(guān)注
關(guān)注
16文章
1204瀏覽量
52051
原文標(biāo)題:STM32G4系列是否支持位帶操作
文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論