SEGGER Embedded Studio 新建stm32f103工程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/FourLeafCloverLLLS/article/details/85076960

        终于要新建工程了, 又终于要面临折磨了, 因为尝试第一个吃螃蟹的人, 总是要付出代价的.

        不得不说这个ide还真的很少的资料, 找了全百度, 都没找到几个文档, 还好最后在一个论坛里找到了一个朋友新建stm32f4系列的教程, 多亏了这份教程, 不然我可能会转去windows下开发了. 废话少说, 我们来尝试着新建stm32工程吧. 文档和工程后面会分享出来.

1.file-> new Project

2. 选择新建solution

3. 选择stm32F1xx(注: 图片是来自文档, 重点看文字解说)

4. 接下来就是设置工程名和工程路径

 5.接下来就是, 工程设置了, Section Placement是下载到哪里, 是flash还是其他地方, 一般选flash Target Processor 是芯片型号, Output Format是指输出文件的类型, 是hex还是bin文件, 一般hex, 然后Print/Scanf是设置输入输出格式.这里随你设置,

Runtime Memory Area是设置运行时堆栈区大小, Heap Size 是堆区大小, Main Stack Size 是主堆栈大小, 而Process Stack Size是

进程堆栈大小, 一般按照默认的设置就行了, 按照个人需求来定.

6. 接下来就是设置系统文件, 我是按照图示所设, 具体我不知道怎么设置.

7.新建工程完毕, 编译工程

8. 复制cpu库文件和启动文件到工程下, 我是复制正点原子的库, 复制了他家库文件工程文件目录下的HARDWARE, STM32F10X_FWLib和SYSTEM文件夹到工程目录下(与工程文件.emProject同一级目录), 文件包后面会上传

9.新建上一步新增的文件夹到工程文件目录, 使得目录结构和工程目录结构一样(注意: 目录结构可以不一样, 这里我只是为了方便管理)

10. 在工程文件夹下添加相应的文件到文件夹下, 在要添加文件夹的文件夹下右击选中Add Existing File, 然后一一添加, 添加完后, 是这样的, 如下图所示(因为inc和src文件夹下文件很多, 所以我没展开)

 11.从原子的工程模板下 复制stm32f10x_conf.h文件到STM32F1xx/CMSIS/Device/Include下(该目录不一定是规定的, 你可以放在任意位置, 之后后续的包含头文件路径包含到就行)

12. 添加头文件路径, 用过mdk和iar的都知道要包含头文件的路径, 不然会报错,在工程名下右击选择options, 点击进入

这个设置界面和mdk的差不多, 在这就直接选Preprocessor, 然后出现

选择User Include Directories, 双击进入

在User Include Directories下填写相应包含.h文件(只需要添加我们新建的文件夹下的.h文件就行)的位置, 这里采用的相对路径形式, 如果与工程文件同级(就是和.emproject在同一文件夹下的) , 只需要xxx/就行了, 如果文件夹在工程文件的上一级比如xxx和Project文件夹在同一级, 而Project下有工程文件.emproject, xxx下面就是我们想要添加的库中的.h文件 那么就应该写成 ../xxx/   熟悉linux操作系统就知道, 这和linux是一样的, 我的目录结构是如下图所示, 那么我应该添加的路径就是上图所示了.

不好意思, 写完这篇文章我才发现还有一处地方没添加.  因为原子的工程是兼容stm32f103系列的, 通过宏定义实现的, 所以应该添加相应的宏常量, 不然会报错, 在工程下右击点击options, 再选择Preprocessor, 然后出现图示界面

然后双击Preprocessor Undefinitions, 出现如下界面

然后在 白色区域部分添加图示内容:

STM32F10X_MD

USE_STDPERIPH_DRIVER

我这里是用的stm32f103c8t6, 所以填STM32F10X_MD, 如果你用的zet6系列的, 就选STM32F10X_HD, 这两个表示的flash的大小, 一个是大容量, 用H表示, 一个是中容量, 用M表示

13. 添加完后, 我们只需要在修改一处就可以了, 将usart.c下的

#if 1
#pragma import(__use_no_semihosting)             
//׼Ҫֺ֧                 
struct __FILE 
{ 
	int handle; 

}; 

FILE __stdout;       
//_sys_exit()Աʹðģʽ    
_sys_exit(int x) 
{ 
	x = x; 
} 
//ضfputc 
int fputc(int ch, FILE *f)
{      
	while((USART1->SR&0X40)==0);//ѭ,ֱ   
    USART1->DR = (u8) ch;      
	return ch;
}
#endif 

if 1 改为if 0 就行, 这段代码在编译时会包一个错误,  我目前的解决办法是不用printf函数, 因为这个ide内置了printf函数, 直接在ide中就可以看到相应的数值, 所以串口用户不是很大, 那么我就直接屏蔽了.

接下来就可以编译了, 应该没错, 要是有错的话联系我吧, 扣扣1372090604,  工程的库就可以随便用了,

资料链接:

emStudio 用户指南: https://download.csdn.net/download/fourleafcloverllls/10860990

stm32f103 emStudio工程模板:https://download.csdn.net/download/fourleafcloverllls/10860975

正点原子stm32f103 mdk 库文件工程模板:https://download.csdn.net/download/fourleafcloverllls/10860961

猜你喜欢

转载自blog.csdn.net/FourLeafCloverLLLS/article/details/85076960