stm32编译环境安装教程
❶ 如何使用Eclipse和GCC搭建STM32环境
现在Eclipse已经有stm32的开发环境了,有开发包,但是还是不方便,很多东西要自己去设置相对比较麻烦,最最主要的是在线调试,现在很多都是自己写,没有现成的在线调试。
❷ 谁给个MDK环境的C语言stm32单片机开发教程啊,或者给我讲讲怎么组织工程,谢谢了!
我 不太懂C语言
❸ Linux下怎样搭建stm32开发环境
你可以搜索一下eclipse开发环境的搭建,我试过可以搭起来,也可以编译,就是后来没时间弄jlink这块;还有就是eclipse环境下的开发包与STM32CUBE环境下的开发包是一样的,多了一层硬件描述层,我用不惯,这也是为什么我没有继续用的原因。
❹ stm32 用什么编译器好
应该IAR好很多。
同样的ucosII本家的移植代码Micrium-ST-uCOS-II-LCD-STM32,
用里面自带的keil工程和IAR工程编译,
都设置为最大尺寸优化,
keil的编译结果:
Program Size: Code=27562 RO-data=4870 RW-data=196 ZI-data=9240
FLASF占用:Code+RO-data+RW-data = 27562 +4870 +196 = 32628字节
RAM占用:RW-data+ZI-data = 196 + 9240 = 9436字节
IAR的编译结果:
13 730 bytes of readonly code memory
5 618 bytes of readonly data memory
8 636 bytes of readwrite data memory
FLASF占用:13 730 + 5 618 = 19348字节
RAM占用:8 636字节
KEIL比IAR占用FLASH多:32628- 19348 = 13280字节
❺ 如何搭建stm32的编译工具链
看你预装了什么IDE。比方ARM MDK, IAR等。
安装好后,建议你下载STM32cube库,里面有基于
多种IDE的工程,现存工程,边用变摸索。
❻ STM32如何用C++开发, 用哪个C++编译环境有支持。
没听说过用C++开发 只是听说可以用MDK 支持C++ 说实话 没用过 。 我都是用标准C
要让MDK支持C++,我所知道的有2种方法。
1> 文件后缀为.cpp。
2> 在选项对话框(project-->options-->c/C++)的[Misc Control]中,填入:--cpp。
❼ 基于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)
❽ 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;
}
延时没有很精确,仅做参考。
❾ STM32 开发环境用哪个
目前STM32开发最广泛、最常用的开发环境是MDK和IAR两种
各大学习开发板生产厂商例程都是以IAR和MDK为基准设计编写的
其中MDK居多
❿ STM32 开发环境用哪个
嵌入式软体搭配最新版的STM32CubeMX个人电脑开发工具使用,设计人员可在绘图接口向导内配置微控制器,只要按一下,即可生成初始化C代码,直接用于多款市面上流行的第三方开发工具。
http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1533/PF259242?icmp=pf259242_pron_nb_jun2014&sc=stm32cube-pr4
STM32Nucleo开发板可让开发人员连接微控制器的全部I/O接口,并整合了ST-Link侦错器(debugger)/程式设计(programmer),无需单独安装侦错器。最后,STM32Nucleo开发板拥有mbedTM功能,这表示该开发板可与个人电脑直接连结,并直接在mbed.org线上开发环境执行开发板。