探索STM32地址與偏移

疑問:一直對STM32地址存儲有點疑問,比如STM32是一個32位的MCU,那是不是表示一個地址可以存儲32位,這樣理解看起來好像是沒有問題,但是實際你查看手冊,你會發現按着這個理解方式,似乎有點不對。

這裏我們以stm32F103x系列爲例,首先我們來看手冊。

通過GPIO端的地址,我們可以發現相鄰兩個寄存器之間偏移0x04,而且一個寄存器存儲32位,如果真是一個地址存儲32位話,那偏移應該是0x01,所以我們得出結論在計算機中一個地址,代表一個字節(1Byte),32位剛好表示4個字節,剛好偏移0x04

我們再來看看源碼是怎麼定義的。

通過查看手冊我們發現GPIO口都是掛在APB2總線上。

可以看到把GPIOA_BASE地址定義成一個結構體指針,我們再看看GPIO_TypeDef結構體。

這樣我們就很好理解了,源碼把GPIO端的基地址定義成結構體指針,並把各寄存器定義成變量,變量的地址就按着結構體首地址自動偏移。我們操作結構體中的變量,相當於直接操作對應地址的寄存器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章