keil編譯stm32
⑴ 使用keil5編譯stm32,頭文件core_cmFunc.h中,是預定義__CC_ARM,還是__GNUC__
編譯的時候,可能是那個地方定義了__CC_ARM, 預編譯指令執行了#if defined ( __CC_ARM )下面的代碼,沒有執行#elif defined ( __GNUC__ )下面的代碼;
#if ...
...
#elif ..
...
是條件預編譯,只執行其中的一個分支
⑵ 用keil5編寫stm32程序遇到的問題
rom地址和容量是根據晶元型號自動選擇的,你不能改變。
仔細看下在XXXX.s文件,里邊如何引導至main()地址的。
; Reset handler
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
IMPORT SystemInit
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
⑶ 如何使用keil uvision5編譯stm32
正常建一個工程,直接點F7就可以了
⑷ Keil 編譯STM32 遇到異常怎麼解決
這個問題一般出現在移動庫,或者將兩個程序合並的時候報錯
原因是舊版的庫與新版的庫發生沖突了,沖突的原因是舊版和新版都定義了同一個東西,比如「s32」,於是就會發生重定義的報錯
解決這個問題的方法其實也不難,因為編寫程序的時候有一個防止重定義的宏,在新版的庫裡面添加這樣的一個宏就可以消除大部分的錯誤了
我們先找到從定義的地方,雙擊錯誤跟蹤到報錯的地方我們可以看到這里就是type定義的地方,看到上面有一個「#ifndef
__STM32F10x_TYPE_H」,這個就是舊版的宏,只要將這個宏在新版的相應位置定義一下就好
到新版的庫文件中,注意要消除只讀的設置,從錯誤來看,是「s32」發生了重定義,那麼就是說,新版的庫應該也是有「s32」的定義,於是用搜索功能,找到「s32」定義的地方
然後在這個定義的上方補充定義這個宏就可以解決一部分的問題了,添加這樣一段
#ifndef
__STM32F10x_TYPE_H//補充定義舊版的宏
#define
__STM32F10x_TYPE_H
#endif
#47-D:
incompatible
redefinition
of
macro
"SCS_BASE"
的錯誤解決方法也差不多,補充定義舊版宏即可解決大部分問題,這次是在core_cm3.c文件中,注意解鎖
⑸ KEIL編寫STM32時總是提示缺少AXF文件,這文件到底怎麼得來啊
你是不是復制別人的工程文件,來學習。雖然它們可以編譯通過,但運行時就會出錯說在你指定的文件路徑下找不到AXF文件。你必須指定它的路徑。
指定它方法是:
按Alt+F7出現「options for target" 在裡面選擇"output"選卡,點擊「select Folder objects....」選擇你的AXF文件,一般它在你的復制的工程文件夾里能找到。在「Name of Executable「編輯框里填寫你找到的*.AXF文件名。
⑹ KEIL用c語言編譯STM32晶元數據類型無法賦值的問題
沒有遇到這樣的問題,一般都成功
unsigned int Var1 = (unsigned int)(float Var2);
如果這樣都是0的話,那麼Var2可能本身就是0,如果需要驗證Var2是否本身就是0,可以用聯合體的方式定義變數,然後查看一下。
⑺ stm32編譯前為什麼要配置keil中C/C++中的define 和include Paths
這是Keil與編譯器的一個相互通信的過程,准確的來說,是編譯器讀取Keil的配置
ARM系列的有一些公司的庫編譯器,是與Keil的一些配置通信的.
比如你說的那個
Define,include
path
一般來說,我們用Keil做51或者STR710等等一些單片機的程序時候,不需要配置剛才的兩個選項,為什麼?
因為C51和ARM7的編譯器不去讀取上述的配置.
而Cortex-M3編譯器,則讀取上述的配置,並轉換成自己的內編譯器配置
比如:你在Define裡面寫:THIS_MY_DEF
那麼,編譯器在編譯的時候,文件里會隱性的定義出這么一句:
#define
THIS_MY_DEF
通常,我們寫Define里,都寫USE_STDPERIPH_DRIVER,STM32F10X_HD這兩個
然後,編譯的時候,文件里會隱性定義
#define
USE_STDPERIPH_DRIVER
#define
STM32F10X_HD
而這兩個宏,決定了STM32的庫函數的一些配置.
如果你把那個Define文本框空閑出來,那麼,編譯器找不到任何配置信息,自然就出錯.
如果你一定要把Define文本框空閑,那麼,你就要在Stm32F10x.h等多個文件裏手工添加
#define
USE_STDPERIPH_DRIVER
#define
STM32F10X_HD
過程比較繁瑣,如果一旦換了晶元,整個的工程就有多處要修改,
工作量太大,且容易出錯
,就不如在配置的時候操作一次那麼簡便
⑻ 基於keil MDK給stm32編程的問題。。。嵌入式系統開發環境的搭建
您好,一、【安裝STM32庫】 將下載後的stm32f10x_stdperiph_lib.zip解壓後得到三個文件夾分別是:"Libraries"、"Project"、"Utilities"將這3個目錄復制到"Keil uVision4"的安裝目錄,和目錄中的文件覆蓋合並。二、【新建工程】 1、打開"Keil uVision4",在Project菜單中選擇新建工程,選擇工程要保存的位置,在彈出的「Select Device for target」的對話框中選擇使用的STM32單片機的型號如「STM32F103C8」,點確定,然後在彈出的「Copy startup code」的對話框中點選"NO".
2、在Project「Target 1」上點選右鍵菜單「Option for target target1中設置相關參數」在[Output]選項卡中點選「Create HEX file」,點"Select folder for objects"設置臨時生成的obj文件的存放目錄,當然也可以不選擇;
3、在[C/C++]選項卡的"Preprocessor Sysmbols"的Define框中做如下定義:USE_STDPERIPH_DRIVER,STM32F10X_MD
其中USE_STDPERIPH_DRIVER表明要使用ST提供的庫,在"system_stm32f10x.c"文件中包含的"stm32f10x.h"文件中有如下定義:
#ifdef USE_STDPERIPH_DRIVER #include "stm32f10x_conf.h"#endif在[C/C++]選項中添加的USE_STDPERIPH_DRIVER宏就是這個作用,用來包含"stm32f10x_conf.h"這個文件被稱為"Library Configuration file"用來配置你需要使用到庫的那些文件的,例如需要使用到GPIO就應在在這個文件中加上#include "stm32f10x_gpio.h"這個文件可以在STM32庫的給出的常式中找得到(C:\Keil\ARM\Project\STM32F10x_StdPeriph_Examples)另外還需要在常式中復制"stm32f10x_it.c"和"stm32f10x_it.h"這2個文件,這2個文件時用來完成STM32中重中斷服務程序的將一下三個文件復制到自己工程的user目錄下供以後使用:"stm32f10x_conf.h"、"stm32f10x_it.c"、"stm32f10x_it.h"STM32F10X_MD 表明使用的是STM32F10X系列的CPU而該CPU的Flash代碼密度是中等(Medium-density devices)這個和使用的CPU相關的查閱CPU的手冊就可以得到。
然後在該選項卡的下方的"Include Paths"中設置include使用的路徑等,如下圖所示:其中.\user路徑是用來保存自己定義的頭文件的路徑4、[Debug]選項卡選擇使用"Cortex-M/R J-Link/J-Trace",然後點"Settings"按鈕在新打開的對話框中選擇[Flash Download]選項卡點"Add"按鈕添加編程使用的Flash,在本例中選用的CPU是STM32F103C8,其Flah為Medium-density使用片上的Flash型號為"STM32F10X Med-density Flash On-chip-Flash 128K",最終點OK保存設置。5、[Utilities]選項卡中的"Use Target Device for Flash Programing"要選擇和[Debug]選項卡中一樣的調試器"Cortex-M/R J-Link/J-Trace";6、然後再次在左側的"Target 1"上點選右鍵,在菜單中選擇"Manger Components"然後在"Project components"選項卡的"Group"中新建3個組名稱分別為"user"、"libs"、"cmsis"1、 分別用來保存用戶自己的C文件、stm32f10x_stdperiph_lib的庫、和cortex-m3的啟動文件等。
users:
Keil\ARM\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\ system_stm32f10x.c (stm32f10x_it.c該文件定義各種中斷的中斷服務函數)
libs:
Keil\ARM\ Libraries\ STM32F10x_StdPeriph_Driver\src\*.*
cmsis:
Keil\ARM\ Libraries\ CMSIS\ CM3\ CoreSupport\core_cm3.c
Keil\ARM\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c
keil\ARM\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\startup_stm32f10x_md.s
(該文件和CPU的Flash的代碼密度相關,本例中的STM32F103C8是Medium-density故選用xxx_md.s)
⑼ 如何使keil既能編寫51又能編寫STM32
Keil軟體,按預設設置,先裝MDK,裝完後,不要做任何處理(不卸載,不改變目錄);之後繼續安裝KeilC51軟體,按預設安裝,安裝完成後,你運行KEIL軟體,裡面就由STM32等ARM供你選擇了。
⑽ 為什麼用keil編譯STM32的文件那麼慢
keil編寫STM32多是C語言下的編譯匯編,要和同類的C語言編譯工具比較,不能和面向對象語言的程序比速度。個人認為速度不慢。
雖然keil軟體對於硬體要求不高,但目前來說最好使用intel i5 3代以上,內存4g以上的硬體配置。
編譯有編譯文件,編譯有修改的文件,和編譯工程內所有文件;合理使用提高速度,另外值得注意的是修改c語言中.h文件後,與之相關的所有文件都會重新編譯。
有些it公司的保密軟體,與keil兼容性不好影響會嚴重keil編譯速度(親身經歷過)。