久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: STM32F3不能用位帶操作GPIO之原由 [打印本頁]

作者: 51hei大小    時間: 2016-6-17 12:41
標題: STM32F3不能用位帶操作GPIO之原由
最近用到STM32F303,在修改IO的時候,覺得用庫操作太麻煩了,要自己一個一個修改,用宏定義也不解決,自然就會想到用位帶操作。查M4的手冊知道M4也是支持位帶操作,F3系列也是屬于M4內核,而且在405也是用位帶操作,覺得F303也是一樣可以做位帶操作。直接先修改一個IO,調試卻發現在,IO電平始終沒有變化。查IO,初始化沒有問題。再查位帶宏定義:
#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)
第一次地址映射操作是內核決定的,F3跟F4都是相同的,這里不會有錯。查ODR寄存器的偏移地址:
_IO uint16_t ODR;          /*!< GPIO port output data register,                           Address offset: 0x14 */

ODR的地址偏移了0x14,也就是20,也是對的。F4都可以用位帶操作,F3卻用不了,就覺得很奇怪。放了一段時間,不死心,繼續查找問題。調試,看匯編代碼,在位帶操作IO那里打斷點





可以看到,操作寄存器的地址是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。這明顯就對不上,位帶操作的地址都不是對應GPIO的ODR,當然操作不了GPIO的電平,這下死心了。
      死也要再死個明白,繼續查M4的手冊關于Memory System章節,可以看到位帶操作地址有兩個,Bit Band Region是直接位帶操作(具體的可以百度),Bit Band Alias是間接位帶操作,要做地址映射才能操作,所以才會BITBAND這個宏定義。只有寄存器的地址在Bit Badn Alias(0x42000000,0x43FFFFFF)地址區域內的才進行位帶操作。F303的GPIO是屬于AHB2,地址已經不在位置操作區域,所以地址映射后對應不是GPIO的寄存器,自然不能進行位帶操作(ST這點也做得太坑了,為什么要把GPIO的歸到AHB2)。M4的GPIO都在AHB1總線上,地址在位帶操作地址區域自然可以用位帶操作GPI,M1也是一樣。






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲精品18 | 日韩在线视频免费观看 | 亚洲成人精品视频 | 欧洲成人免费视频 | 欧美激情va永久在线播放 | 亚洲网站在线观看 | 国产在线观看网站 | 亚洲国产成人精品久久久国产成人一区 | 久久综合久久综合久久 | 日韩高清一区 | 91精品综合久久久久久五月天 | 中文字幕日韩专区 | 国产精品亚洲二区 | 国产欧美一区二区三区在线看 | 一区二区三区在线观看视频 | 男人的天堂在线视频 | 99免费精品 | 精品成人免费一区二区在线播放 | 四虎影视1304t| 国产欧美日韩一区二区三区在线 | 夜夜草| 一区二区不卡 | 欧洲亚洲一区二区三区 | av一二三区 | 国产成人精品在线播放 | 精品久久久久久久久久久久久久久久久 | 在线观看久草 | 激情91| 国产精品久久久久一区二区三区 | 亚洲免费在线视频 | 在线播放第一页 | 亚洲一区二区在线视频 | 亚洲国产欧美在线 | 一区二区三区视频在线观看 | 波霸ol一区二区 | 亚洲a视频| 亚洲精品第一 | 久久久福利 | 最新中文字幕一区 | 看av网| 91精品久久久久久久久久小网站 |