關於stm32的變數定義
分類: 嵌入式系統
2014-10-15 19:03
983人閱讀
收藏 舉報
今天除錯程式時,想觀察一下變數的情況,突然發現平時經常移植別人程式時最容易忽略的乙個致命問題,那就是忽略變數型別,這裡有必要給大家一定知識啦,都是庫裡面的,非原創!
3.0以後的版本中使用了cmsis資料型別,變數的定義有所不同,但是出於相容舊版本的目的,以上的資料型別仍然相容。cmsis的io型別限定詞如表 5‑7所示,cmsis和stm32韌體庫的資料型別對比如表 5‑8所示。這些資料型別可以在stm32f10x_stdperiph_lib_v3.4.0\libraries\cmsis\cm3\devicesupport\st\stm32f10x\stm32f10x.h中找到具體的定義,此部分定義如下。
1 /*!< stm32f10x standard peripheral library old types (maintained for legacy purpose) */2 3 typedef int32_t s32;
4 5 typedef int16_t s16;
6 7 typedef int8_t s8;
8 9 typedef const int32_t sc32; /*!< read only */
10 11 typedef const int16_t sc16; /*!< read only */
12 13 typedef const int8_t sc8; /*!< read only */
14 15 typedef __io int32_t vs32;
16 17 typedef __io int16_t vs16;
18 19 typedef __io int8_t vs8;
20 21 typedef __i int32_t vsc32; /*!< read only */
22 23 typedef __i int16_t vsc16; /*!< read only */
24 25 typedef __i int8_t vsc8; /*!< read only */
26 27 typedef uint32_t u32;
28 29 typedef uint16_t u16;
30 31 typedef uint8_t u8;
32 33 typedef const uint32_t uc32; /*!< read only */
34 35 typedef const uint16_t uc16; /*!< read only */
36 37 typedef const uint8_t uc8; /*!< read only */
38 39 typedef __io uint32_t vu32;
40 41 typedef __io uint16_t vu16;
42 43 typedef __io uint8_t vu8;
44 45 typedef __i uint32_t vuc32; /*!< read only */
46 47 typedef __i uint16_t vuc16; /*!< read only */
48 49 typedef __i uint8_t vuc8; /*!< read only */
cmsis io型別限定詞
io類限定詞
#define 描述
_ivolatile const
唯讀訪問 _o
volatile
只寫訪問
_iovolatile
讀和寫訪問
韌體庫與cmsis資料型別對比
韌體庫型別
cmsis型別
描述s32
int32_t
易揮發唯讀有符號32位資料
s16int16_t
易揮發唯讀有符號16位資料
s8int8_t
易揮發唯讀有符號8位資料
sc32
const int32_t
唯讀有符號32位資料
sc16
const int16_t
唯讀有符號16位資料
sc8const int8_t
唯讀有符號8位資料
vs32
_io int32_t
易揮發讀寫訪問有符號32位資料
vs16
_io int16_t
易揮發讀寫訪問有符號16位資料
vs8_io int8_t
易揮發讀寫訪問有符號8位資料
vsc32
_i int32_t
易揮發唯讀有符號32位資料
vsc16
_i int16_t
易揮發唯讀有符號16位資料
vsc8
_i int8_t
易揮發唯讀有符號8位資料
u32uint32_t
無符號32位資料
u16uint16_t
無符號16位資料
u8uint8_t
無符號8位資料
uc32
const uint32_t
唯讀無符號32位資料
uc16
const uint16_t
唯讀無符號16位資料
uc8const uint8_t
唯讀無符號8位資料
vu32
_io uint32_t
易揮發讀寫訪問無符號32位資料
vu16
_io uint16_t
易揮發讀寫訪問無符號16位資料
vu8_io uint8_t
易揮發讀寫訪問無符號8位資料
vuc32
_i uint32_t
易揮發唯讀無符號32位資料
vuc16
_i uint16_t
易揮發唯讀無符號16位資料
vuc8
_i uint8_t
易揮發唯讀無符號8位資料
stm32f10x.h檔案中還包含了常用的布林形變數定義,如:
1 typedef enum flagstatus, itstatus;
2 3 typedef enum functionalstate;
4 5 #define is_functional_state(state) (((state) == disable) || ((state) == enable))
6 7 typedef enum errorstatus;
不同版本的標準外設庫的變數定義略有不同,如3.4版本中就沒有之前版本的true和false的定義,使用者也可以根據自己的需求按照上面的格式定義自己的布林形變數。在使用標準外設庫進行開發遇到相關的定義問題時應首先找到對應的標頭檔案定義。
STM32的重複定義
最近在開發一款stm32f0的微控制器的專案,在寫程式的時候發現了一些關於重複定義的想法和問題。我在標頭檔案將資料變數進行了定義 ifndef usart h define usart h include sys.h define max rx length 50 u8 usart1 rx buf ...
關於STM32中定義陣列的問題
功能描述 今天做資料採集,tim2定時中斷20ms採集一次資料,並存入乙個陣列中。採集完4000個資料後,用串列埠將這4000個資料依次傳送給上位機。問題描述 debug中對陣列指標add watch,發現指標由0增加至1後就不再增加,懷疑tim2配置有問題,只進了一次中斷。於是查了半天關於定時中斷...
關於STM32 IO 的變數定義
這個 io 是指靜態 這個 io 是指靜態 volatile uint32 t 是指32位的無符號整形變數uint32 t 是指32位的無符號整形變數 搞stm32這麼久了,經常看到stm32裡面庫檔案裡面有用 io 定義的變數,查過一下當時記住了,過段時間又給忘記了。所以才特意的寫乙個博文來記住。...