導航:首頁 > 源碼編譯 > STM單片機MDK5編譯環境介紹

STM單片機MDK5編譯環境介紹

發布時間:2022-05-12 22:36:01

A. stm32在MDK環境下重新建工程,文件夾以及相應文件夾的文件都相同,但是不知道為什麼編譯完成後代碼長度變長

可能是新建工程的時候MDK把默認的優化率給改變了。
可以按以下操作修改編譯器的優化率:
project->options for target->C/C++,那裡有個optimization,level 0優化率最低,編譯後代碼最大,level 4優化率最大,代碼最小,一般咱們選defualt默認即可。

ps:不過樓主要先確保您的MDK已經破解了,不然optimization這個選項是不可選的。

B. 學習stm32,keil的編程環境,看了很多板子的例子,可是很模糊,打開一個GPIO的例子都要一大堆H文件

我當初第一次接觸單片機的時候, 是為了參加學校的比賽, 當時只懂C語言. 就搞了塊51回來,自己焊線,下程序(當時燒錄器也沒有, 也不知道怎麼燒, 反正是一窮二白). 後來在網上找到一篇非常入門的說明書, 就從上面學會了怎麼通過keil建立工程, 怎麼控制一個IO口. 然後就開始搗鼓自己比賽作品了. 搗鼓的東西是一個溫度計, 就是從18B20那讀取溫度, 再把溫度顯示在1206液晶屏上. 當時的程序都是從網上下過來自己看看改改再拼起來的. 搞了1個多月順利交差了. 後來才明白, 我只用了51上面的IO口, 其他什麼外設資源都沒用到. 但是搗鼓過程中,總算是在感性上有不少的收獲.
現在搞DSP去了. 經常也是一大堆.h .c. 其實這些都不用怕的, 只要看看DEMO工程, 分析一下這些文件的作用, 你就能知道要片子跑起來(比如點亮一個LED)至少需要哪些文件. 等這些熟悉後, 你就會發現其實什麼單片機都是一個樣的. 然後就是學習使用片上的各種資源. 當然, 跑OS的另外說.
我不是什麼高人, 希望我的這些感受對你有所啟發罷了.

C. 基於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)

D. stm32編譯程序的時候出現的問題:前提:使用庫函數,編譯器MDK

應該是你的編譯環境默認包含一些不應該包含的庫

E. keil mdk 5用哪個版本

曾經有新手提問為什麼我裝的keil的軟體找不到89c51,或找不到stm32。今天特意發這一貼,希望對新手有所幫助。
KEIL是公司的名稱,有時候也指KEIL公司的所有軟體開發工具,目前2005年Keil由ARM公司收購,成為ARM的公司之一。
uVision是KEIL公司開發的一個集成開發環境(IDE),和Eclipse類似。它包括工程管理,源代碼編輯,編譯設uVision置,下載調試和模擬模擬等功能,uVision有uVision2、uVision3、uVision4、uVision5四個版本,目前最新的版本是uVision5。它提供一個環境,讓開發者易於操作,並不提供能具體的編譯和下載功能,需要軟體開發者添加。uVisionu通用於KEIL的開發工具中,例如MDK,PK51,PK166,DK251等。目前使用Keil uVision4的產品有Keil MDK-ARM,Keil C51,Keil C166和Keil C251
MDK(Microcontroller Development Kit),也稱MDK-ARM、KEIL MDK、RealView MDK、KEIL For ARM,都是同一個東西。ARM公司現在統一使用MDK-ARM的稱呼,MDK的設備資料庫中有很多廠商的晶元,是專為微控制器開發的工具,為滿足基於MCU進行嵌入式軟體開發的工程師需求而設計,支持ARM7,ARM9,Cortex-M4/M3/M1,Cortex-R0/R3/R4等ARM微控制器內核。
KEIL C51,亦即PK51,KEIL公司開發的基於uVision IDE,支持絕大部分8051內核的微控制器開發工具。

因此,如圖C51是51系列單片機開發工具,MDK是arm開發工具。如果想兩個都能用就必須兩個都得裝

F. MDK編譯器優勢有哪些

1.超過3000款Arm?的Cortex?-M微控制器的解決方案;
2.支持32位Arm Cortex-A和Cortex-A/ Cortex-M的基礎設備;
3.Software Packs包括現成可使用的CMSIS和中間件組件;
4.MDK專業版支持Armv8-M架構;
5.強大的uVision?IDE,調試器和模擬環境;
6.配合ULINKpro?調試適配器使用生成應用的即時全指令跟蹤分析記錄;
7.關於程序執行的完整代碼覆蓋信息;
8.利用執行探查和性能分析器來優化你的代碼;
9.調試器完全支持CMSIS-RTOS RTX實時操作系統;
10.提供完整的中間件庫:包括TCP/ IP網路,文件系統,USB,和圖形界面;
11.具有領先特定處理器優化和microlib的業界領先的Arm C/C ++編譯器;
可以到億道電子下載

G. STM32是用的什麼開發環境

目前STM32開發最廣泛、最常用的開發環境是MDK和IAR兩種
各大學習開發板生產廠商常式都是以IAR和MDK為基準設計編寫的
其中MDK居多
這樣的回答希望您能滿意 望採納O(∩_∩)O

H. MDK5為什麼不用再C/C++選項卡里定義STM32F10X

准確的來說,是編譯器讀取Keil的配置 ARM系列的有一些公司的庫編譯器,是與Keil的一些配置通信的.

I. 使用keil5編譯stm32,頭文件core_cmFunc.h中,是預定義__CC_ARM,還是__GNUC__

編譯的時候,可能是那個地方定義了__CC_ARM, 預編譯指令執行了#if defined ( __CC_ARM )下面的代碼,沒有執行#elif defined ( __GNUC__ )下面的代碼;

#if ...
...
#elif ..
...
是條件預編譯,只執行其中的一個分支

J. stm32中ad9959的使用常式。編譯環境最好是keil。

/************************************************************
Copyright(C),1995-2013,***.Co.,Ltd.
文件名:ad9959.c
作者:Sun版本:1日期:2013-09-04
模塊描述:
版本信息:
主要函數及其功能:
01.staticuint16_tWrite_DDS_Byte(unsignedcharaByte);//SPI寫操作
02.voidInitAd9959(void);//初始化AD9959,即其工作頻率以及各個通道的輸出頻率
03.voidwrite_CSR(charw_data);//通道的使能以及串列模式的設置
04.voidwrite_FR1(charw_data1,charw_data2,charw_data3);//設置AD9959的工作頻率,需根據外部晶振,及倍頻來設置
05.voidwrite_FR2(charw_data1,charw_data2);//寫FR2寄存器
06.voidwrite_CFR(charw_data1,charw_data2,charw_data3);//寫CFR寄存器
07.voidwrite_CFTW0(longF_word);//頻率調諧字
08.voidwrite_CPW0(intP_word);//寫CPW0寄存器
09.voidwrite_ACR(longA_word);//寫ACR寄存器
10.voidwrite_LSR(charrising,charfalling);//寫LSR寄存器
11.voidwrite_RDW(longrising);//寫RDW寄存器
12.voidwrite_FDW(longfalling);//寫FDW寄存器
13.voidwrite_CTWn(charn,longw_data);//寫CTWn寄存器
14.voidset_frequency(u32f);//寫頻率控制字
15.voidSetAd(floatfre_mhz,intset);//設置通道輸出頻率
歷史修改記錄://
<author><time><version><desc>

***********************************************************/
#include"ad9959.h"
#include"usart.h"
#definePLL_DIV10//倍頻系數
#definePLL16//外部晶振頻率
#definesystemp_frequency(PLL*1000000*PLL_DIV)//AD9959系統頻率

/*************************************************
函數名:staticuint16_tWrite_DDS_Byte(unsignedcharaByte);
功能:SPI寫操作
調用函數:無
被調用函數:
voidwrite_CSR(charw_data);
voidwrite_FR1(charw_data1,charw_data2,charw_data3);
voidwrite_FR2(charw_data1,charw_data2);
voidwrite_CFR(charw_data1,charw_data2,charw_data3);
voidwrite_CFTW0(longF_word);
voidwrite_CPW0(intP_word);
voidwrite_ACR(longA_word);
voidwrite_LSR(charrising,charfalling);
voidwrite_RDW(longrising);
voidwrite_FDW(longfalling);
voidwrite_CTWn(charn,longw_data);
輸入:aByte:SPI要寫的位元組
輸出:無
返回值:SPI讀到的位元組
*************************************************/
staticuint16_tWrite_DDS_Byte(unsignedcharaByte)
{
/**/
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);
SPI_I2S_SendData(SPI1,aByte);
/*Waittoreceiveabyte*/
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);

/**/
returnSPI_I2S_ReceiveData(SPI1);
}

/*************************************************
函數名:voidInitAd9959(void);
功能:初始化AD9959用到的GPIO,及設置其工作頻率和通道輸出頻率
調用函數:
write_CSR();//設置通道啟用
write_FR1();//設置主頻
set_frequency();//設置通道輸出頻率
被調用函數:
voidBspInit(void);/初始化所有硬體函數
輸入:無
輸出:無
返回值:無
*************************************************/
voidInitAd9959(void)
{
inti;
GPIO_InitTypeDefGPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_Init(GPIOC,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_SetBits(GPIOC,GPIO_Pin_4);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
GPIO_Init(GPIOA,&GPIO_InitStructure);

}

/*************************************************
函數名:voidwrite_CSR(charw_data);
功能:通道的使能以及串列模式的設置
調用函數:
Write_DDS_Byte();//SPI寫函數
被調用函數:
voidInitAd9959(void)//初始化AD9959用到的GPIO,及設置其工作頻率和通道輸出頻率
voidSetAd(floatfre_mhz,intset)//
輸入:charw_data:要寫的位元組
輸出:無
返回值:無
*************************************************/
voidwrite_CSR(charw_data)
{
CLR_DDSCS;
Write_DDS_Byte(0x00);//writeaddress0.CSR'saddressis0.
Write_DDS_Byte(w_data);
SET_DDSCS;
}

/*************************************************
函數名:voidwrite_FR1(charw_data1,charw_data2,charw_data3);
功能:設置AD9959的工作頻率,需根據外部晶振,及倍頻來設置
調用函數:
Write_DDS_Byte();//SPI寫函數
被調用函數:
voidInitAd9959(void)//初始化AD9959用到的GPIO,及設置其工作頻率和通道輸出頻率
輸入:charw_data1,charw_data2,charw_data3:要寫的位元組,從高到低
輸出:無
返回值:無
*************************************************/
voidwrite_FR1(charw_data1,charw_data2,charw_data3)
{
CLR_DDSCS;
Write_DDS_Byte(0x01);//writeaddress1.FR1'saddressis0x01
Write_DDS_Byte(w_data1);
Write_DDS_Byte(w_data2);
Write_DDS_Byte(w_data3);
SET_DDSCS;
}

/*************************************************
函數名:voidwrite_FR2(charw_data1,charw_data2);
功能:用於控制各種功能、特性和模式
調用函數:
Write_DDS_Byte();//SPI寫函數
被調用函數:無
輸入:charw_data1,charw_data2:要寫的位元組
輸出:無
返回值:無
*************************************************/
voidwrite_FR2(charw_data1,charw_data2)
{
CLR_DDSCS;
Write_DDS_Byte(0x02);//writeaddress2
Write_DDS_Byte(w_data1);
Write_DDS_Byte(w_data2);
SET_DDSCS;
}

/*************************************************
函數名:voidwrite_CFR(charw_data1,charw_data2,charw_data3);
功能:通道功能寄存器
調用函數:
Write_DDS_Byte();//SPI寫函數
被調用函數:無
輸入:charw_data1,charw_data2,charw_data3:要寫的位元組,從高到低
輸出:無
返回值:無
*************************************************/
voidwrite_CFR(charw_data1,charw_data2,charw_data3)
{
CLR_DDSCS;
Write_DDS_Byte(0x03);
Write_DDS_Byte(w_data1);
Write_DDS_Byte(w_data2);
Write_DDS_Byte(w_data3);
SET_DDSCS;
}

/*************************************************
函數名:voidwrite_CFR(charw_data1,charw_data2,charw_data3);
功能:頻率調諧字
調用函數:
Write_DDS_Byte();//SPI寫函數
被調用函數:
voidset_frequency(u32f);//設置頻率
輸入:longF_word:要寫的位元組
輸出:無
返回值:無
*************************************************/
voidwrite_CFTW0(longF_word)//ChannelFrequencyTuningWord(CTW0)
{
CLR_DDSCS;
Write_DDS_Byte(0x04);
Write_DDS_Byte(((unsignedchar*)(&F_word))[3]);
Write_DDS_Byte(((unsignedchar*)(&F_word))[2]);
Write_DDS_Byte(((unsignedchar*)(&F_word))[1]);
Write_DDS_Byte(((unsignedchar*)(&F_word))[0]);
SET_DDSCS;
}

/*************************************************
函數名:voidwrite_CPW0(intP_word);
功能:相位偏移字
調用函數:
Write_DDS_Byte();//SPI寫函數
被調用函數:無
輸入:intP_word:要寫的位元組
輸出:無
輸出:無
返回值:無
*************************************************/
voidwrite_CPW0(intP_word)//ChannelPhase1OffsetWord(CPW0)(0x05)
{
CLR_DDSCS;
Write_DDS_Byte(0x05);
Write_DDS_Byte(((unsignedchar*)(&P_word))[1]&0x3F);
Write_DDS_Byte((((unsignedchar*)(&P_word))[0]));
SET_DDSCS;
}

/*************************************************
函數名:voidwrite_ACR(longA_word);
功能:幅度控制寄存器
調用函數:
Write_DDS_Byte();//SPI寫函數
被調用函數:無
輸入:longA_word:要寫的位元組
輸出:無
返回值:無
*************************************************/
voidwrite_ACR(longA_word)
{
CLR_DDSCS;
Write_DDS_Byte(0x06);
Write_DDS_Byte(((unsignedchar*)(&A_word))[2]);
Write_DDS_Byte(((unsignedchar*)(&A_word))[1]);
Write_DDS_Byte(((unsignedchar*)(&A_word))[0]);
SET_DDSCS;
}

/*************************************************
函數名:voidwrite_LSR(charrising,charfalling);
功能:線性斜率掃描
調用函數:
Write_DDS_Byte();//SPI寫函數
被調用函數:無
輸入:charrising,charfalling:要寫的位元組
輸出:無
返回值:無
*************************************************/
voidwrite_LSR(charrising,charfalling)
{
CLR_DDSCS;
Write_DDS_Byte(0x07);
Write_DDS_Byte(rising);
Write_DDS_Byte(falling);
SET_DDSCS;
}

/*************************************************
函數名:voidwrite_RDW(longrising);
功能:LSRRisingDeltaWord(RDW)
調用函數:
Write_DDS_Byte();//SPI寫函數
被調用函數:無
輸入:longrising:要寫的位元組
輸出:無
返回值:無
*************************************************/
voidwrite_RDW(longrising)
{
CLR_DDSCS;
Write_DDS_Byte(0x08);
Write_DDS_Byte(((unsignedchar*)(&rising))[3]);
Write_DDS_Byte(((unsignedchar*)(&rising))[2]);
Write_DDS_Byte(((unsignedchar*)(&rising))[1]);
Write_DDS_Byte(((unsignedchar*)(&rising))[0]);
SET_DDSCS;
}

/*************************************************
函數名:voidwrite_FDW(longfalling);
功能:LSRFallingDeltaWord
調用函數:
Write_DDS_Byte();//SPI寫函數
被調用函數:無
輸入:longfalling:要寫的位元組
輸出:無
返回值:無
*************************************************/
voidwrite_FDW(longfalling)
{
CLR_DDSCS;
Write_DDS_Byte(0x09);
Write_DDS_Byte(((unsignedchar*)(&falling))[3]);
Write_DDS_Byte(((unsignedchar*)(&falling))[2]);
Write_DDS_Byte(((unsignedchar*)(&falling))[1]);
Write_DDS_Byte(((unsignedchar*)(&falling))[0]);
SET_DDSCS;
}

/*************************************************
函數名:voidwrite_CTWn(charn,longw_data);
功能:
調用函數:
Write_DDS_Byte();//SPI寫函數
被調用函數:無
輸入:charn,longw_data:要寫的位元組
輸出:無
返回值:無
*************************************************/
voidwrite_CTWn(charn,longw_data)
{
CLR_DDSCS;
Write_DDS_Byte(n+0x09);//CTWn'saddressisn+0x09.n>=1andn<=15.
Write_DDS_Byte(((unsignedchar*)(&w_data))[3]);
Write_DDS_Byte(((unsignedchar*)(&w_data))[2]);
Write_DDS_Byte(((unsignedchar*)(&w_data))[1]);
Write_DDS_Byte(((unsignedchar*)(&w_data))[0]);
SET_DDSCS;
}

/*************************************************
函數名:voidset_frequency(u32f);
功能:設置頻率調諧字
調用函數:
write_CFTW0();//寫頻率調諧字
被調用函數:
voidInitAd9959(void);//初始化AD9959用到的GPIO,及設置其工作頻率和通道輸出頻率
voidSetAd(floatfre_mhz,intset);//設置頻率調諧字
輸入:u32f:通道輸出頻率
輸出:無
返回值:無
*************************************************/
voidset_frequency(u32f)
{
longtemp;
temp=(unsignedlongint)f*(0xFFFFFFFF*1.0/(float)systemp_frequency+1.0/systemp_frequency);
write_CFTW0(temp);
}

/*************************************************
函數名:voidSetAd(floatfre_mhz,intset);
功能:設置通道輸出頻率
調用函數:
write_CSR();//通道的使能以及串列模式的設置
set_frequency();//設置頻率調諧字
被調用函數:無
輸入:floatfre_mhz,intset:通道號及對應頻率
輸出:無
返回值:無
*************************************************/
voidSetAd(intFreKhz)
{
inti=0xff;
//通道2比通道3多50khz
write_CSR(0x80);//通道3
set_frequency((u32)(FreKhz*1000));
write_CSR(0x40);//通道2
set_frequency((u32)((FreKhz+50)*1000));

SET_IOUPDATE;
while(i--);
CLR_IOUPDATE;
}

延時沒有很精確,僅做參考。

閱讀全文

與STM單片機MDK5編譯環境介紹相關的資料

熱點內容
圈店app的預約頭條功能怎麼樣 瀏覽:33
雲伺服器設置ad域 瀏覽:315
我的世界無盡貪婪奇點壓縮器 瀏覽:393
源碼資源免費分享網 瀏覽:686
批量qq號有效驗證源碼 瀏覽:511
本科程序員五年工資 瀏覽:901
創維電視櫃怎麼安裝app 瀏覽:852
可愛的程序員陸漓劇照 瀏覽:850
怎樣把截屏壓縮成300kb 瀏覽:225
dart文件加密 瀏覽:40
java對接攝像頭源碼 瀏覽:886
安卓項目開發實例附源碼 瀏覽:728
程序員蘋果全家桶 瀏覽:197
遠程命令阻塞 瀏覽:731
有網頁源碼怎麼查數據 瀏覽:100
win10下make編譯速度過慢 瀏覽:866
微機原理編譯環境 瀏覽:19
怎麼把圖紙轉換成pdf 瀏覽:542
安卓libcurl編譯64 瀏覽:906
手機app怎麼測速 瀏覽:276