找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 7090|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

STM32F3不能用位帶操作GPIO之原由

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:127084 發(fā)表于 2016-6-17 12:41 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
最近用到STM32F303,在修改IO的時(shí)候,覺(jué)得用庫(kù)操作太麻煩了,要自己一個(gè)一個(gè)修改,用宏定義也不解決,自然就會(huì)想到用位帶操作。查M4的手冊(cè)知道M4也是支持位帶操作,F(xiàn)3系列也是屬于M4內(nèi)核,而且在405也是用位帶操作,覺(jué)得F303也是一樣可以做位帶操作。直接先修改一個(gè)IO,調(diào)試卻發(fā)現(xiàn)在,IO電平始終沒(méi)有變化。查IO,初始化沒(méi)有問(wèn)題。再查位帶宏定義:
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))
#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum))
//IO口地址映射
#define GPIOA_ODR_Addr    (GPIOA_BASE+20)
#define GPIOB_ODR_Addr    (GPIOB_BASE+20)
#define GPIOC_ODR_Addr    (GPIOC_BASE+20)
第一次地址映射操作是內(nèi)核決定的,F(xiàn)3跟F4都是相同的,這里不會(huì)有錯(cuò)。查ODR寄存器的偏移地址:
_IO uint16_t ODR;          /*!< GPIO port output data register,                           Address offset: 0x14 */

ODR的地址偏移了0x14,也就是20,也是對(duì)的。F4都可以用位帶操作,F(xiàn)3卻用不了,就覺(jué)得很奇怪。放了一段時(shí)間,不死心,繼續(xù)查找問(wèn)題。調(diào)試,看匯編代碼,在位帶操作IO那里打斷點(diǎn)





可以看到,操作寄存器的地址是0X42010290,查M3的GPIO地址,
#define GPIOC_BASE            (AHB2PERIPH_BASE + 0x0800)
#define AHB2PERIPH_BASE       (PERIPH_BASE + 0x08000000)
#define PERIPH_BASE           ((uint32_t)0x40000000) /*!< Peripheral base address in the alias region */

也就是GPIOC的地址是0x48000800。這明顯就對(duì)不上,位帶操作的地址都不是對(duì)應(yīng)GPIO的ODR,當(dāng)然操作不了GPIO的電平,這下死心了。
      死也要再死個(gè)明白,繼續(xù)查M4的手冊(cè)關(guān)于Memory System章節(jié),可以看到位帶操作地址有兩個(gè),Bit Band Region是直接位帶操作(具體的可以百度),Bit Band Alias是間接位帶操作,要做地址映射才能操作,所以才會(huì)BITBAND這個(gè)宏定義。只有寄存器的地址在Bit Badn Alias(0x42000000,0x43FFFFFF)地址區(qū)域內(nèi)的才進(jìn)行位帶操作。F303的GPIO是屬于AHB2,地址已經(jīng)不在位置操作區(qū)域,所以地址映射后對(duì)應(yīng)不是GPIO的寄存器,自然不能進(jìn)行位帶操作(ST這點(diǎn)也做得太坑了,為什么要把GPIO的歸到AHB2)。M4的GPIO都在AHB1總線上,地址在位帶操作地址區(qū)域自然可以用位帶操作GPI,M1也是一樣。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表