關於STM32的變數定義

2021-07-03 18:55:25 字數 3399 閱讀 7221

關於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 定義的變數,查過一下當時記住了,過段時間又給忘記了。所以才特意的寫乙個博文來記住。...