发 帖  

[经验] 手把手教你在STM32下搭建属于自己的第一个应用程序

2017-11-20 15:10:14  3152 stm32
收藏 2 收藏 推荐 0 推荐
分享
准备资料:
      登陆意法半导体论坛 下载STM32F10x_StdPeriph_Lib_V3.5.0固件库。如下图:
     
     下载后解压,可以看到如下目录:
         
开始搭建:
1、 在桌面创建一个文件夹,命名为STM32_TEST(此名字可随意命名),然后分别创建子文件夹USER、CORE和STM32F10x_StdPeriph_Driver分   别用来存放用户文件、启动文件和固件库。如下图:

           
2、 将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport路径下的两个文件core_cm3.c 和core_cm3.h拷贝到CORE文件夹下,
      并将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm路径下的所有文件也拷贝到CORE文件夹中。拷贝后如图所示:
           
3、 把STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver路径下的inc文件夹和src文件夹一起拷贝到上面建立的STM32F10x_StdPeriph_Driver文件夹下,如图:
         
4、将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x路径下的stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h文件复制到USER文件夹下。
     同时将STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template路径下的stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h文件也拷贝到USER文件夹下。
     然后在USER文件夹下创建一个新文件,命名为STM32_TEST.c,并添加如下代码:
int main(void)
{
       return 0;
}

    如下图:
      
5、 至此准备工作告一段落,接下来开始建工程。打开MDK,新建工程,在STM32_TEST下新建一个文件夹,命名为Project,此文件夹用来放置工程文件和中间文件。将USER、CORE和STM32F10x_StdPeriph_Driver文件夹里的.c文件添加到工程中,CORE 文件夹中的启动文件(.s)文件只需要添加startup_stm32f10x_md.s即可,因为我用的STM32F103RB,是针对中等容量芯片的MCU。读者可以根据自己的MCU容量选择不同的启动文件。在此注意,如果不需要用到STM32F10x_StdPeriph_Driver里面的那么多功能,可以去掉不必要的文件,节省资源。同时还要记得在下图中添加头文件路径,否则包含头文件时要指定完整路径。  
      

      点击OK后,编译,发现一大堆报错,找到第一个报错的条目,如下:
      ..\USER\stm32f10x.h(96): error: #35: #error directive: "Please select first the target STM32F10x device used in your  application (instm32f10x.h file)"
      双击该错误,跳转到stm32f10x.h中:
   
      
      提示你要选择应用程序使用的STM32F10x目标设备。由于我使用的是中等容量的STM32F103RB,所以在此选STM32F10X_MD。在如图中添加:
      

      再次编译,还是报错,拉到最下面,会看到此行:
      STM32_TEST.axf: Error: L6218E: Undefinedsymbol assert_param (referred from misc.o).
      这个错误提示说assert_param没定义,出现这个问题的原因是我们刚才工程中包含了固件库(即STM32F10x_StdPeriph_Driver文件夹下的内容),里面的很多.c文件都调用了assert_param。为了解决此问题,可以在工程中的查找assert_param,可以看到其定义体是在stm32f10x_conf.h文件中,如下图:
      

      继续在工程中查找stm32f10x_conf.h,可以看到如下:
      

      则只需要再定义USE_STDPERIPH_DRIVER宏就可以了。定义后如图:
      
       至此,编译通过。如图:
      
       接下来,可以自己写一个测试程序进行测试了。在STM32_TEST.c中输入以下代码,实现LED的闪烁:
#include"stm32f10x.h"
void Delay(int x)
{
       int y,z;
       for(y = 0;y < x;y++)
              for(z = 0;z < 1000;z++);
}
void LedInit()
{
       GPIO_InitTypeDef  GPIO_InitStructure;
       RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);  //使能PA端口的时钟                              
       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                         //LED端口配置
       GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;                //推挽输出
       GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
       GPIO_Init(GPIOA, &GPIO_InitStructure);
       GPIO_SetBits(GPIOA,GPIO_Pin_1);                                      //PA1 输出高
}
int main(void)
{
       SystemInit();
       LedInit();
       while(1)
       {
              GPIO_SetBits(GPIOA,GPIO_Pin_1);                                      //PA.8 输出高
              Delay(1000);
              GPIO_ResetBits(GPIOA,GPIO_Pin_1);
              Delay(1000);
       }
}
       并勾选Output栏下的Create HEX File选项。
      

         编译即可在STM32_TEST文件夹下生成STM32_TEST.hex文件,烧写进开发板即可。

慧心的眼眸 2017-11-21 09:47:16
学习交流群:197416462
回复

举报

慧心的眼眸 2017-11-22 11:04:45
加油
回复

举报

慧心的眼眸 2017-11-22 17:43:07
希望对大家有所帮助
回复

举报

冷@锋 2017-11-22 21:16:44

路过。。。。挣点积分。。。
回复

举报

慧心的眼眸 2017-11-23 09:38:23
欢迎你经常路过,还能帮我顶一下贴
回复

举报

慧心的眼眸 2017-11-24 10:16:11
{:1:}
回复

举报

慧心的眼眸 2017-11-27 14:32:43
欢迎大家
回复

举报

yuanno1 2017-11-27 16:13:25
非常不错,感谢分享
回复

举报

小S咯 2017-11-29 11:13:35
对新手很不错。
回复

举报

慧心的眼眸 2017-12-1 10:14:46

{:1:}
回复

举报

慧心的眼眸 2017-12-5 13:56:03
欢迎各位
回复

举报

慧心的眼眸 2017-12-7 09:27:42
学习交流群:197416462  赠送学习卡  892829057  备注一下就可以了
回复

举报

gaox12303 2017-12-7 21:04:31
感谢分享
回复

举报

sunflowerzt 2017-12-8 17:12:29
赞一个
回复

举报

慧心的眼眸 2017-12-11 09:01:44
谢谢 谢谢
回复

举报

慧心的眼眸 2017-12-19 13:47:13
学习交流群:197416462  赠送学习卡  892829057  备注学习卡
回复

举报

慧心的眼眸 2018-1-22 10:56:59
学习交流群:197416462  赠送学习卡  892829057  备注学习卡
回复

举报

j6920 2018-1-22 11:07:47
好象很复杂,有点畏惧STM32 ,一直找不到门入
回复

举报

慧心的眼眸 2018-1-22 14:12:36
j6920 发表于 2018-1-22 11:07
好象很复杂,有点畏惧STM32 ,一直找不到门入

你是刚接触吗  还是怎么
回复

举报

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

12下一页
发经验
关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表
-

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

工程师杂谈

项目|工程师创意

招聘|求职}工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Linux论坛

单片机/MCU论坛

MSP430技术论坛

FPGA|CPLD|ASIC论坛

STM32/STM8技术论坛

NXP MCU 技术论坛

DSP论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

电路设计论坛

电子元器件论坛

传感技术

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

-

EDA设计论坛

multisim论坛

PCB设计论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

Orcad论坛

-

综合技术与应用

电机控制

工程资源中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

物联网技术

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

高校联盟

深圳大学电子协会

西藏民族学院电子设计协会

西安电子科技大学西电实验室

桂林电子科技大学机电工程协会

鉴鹰电子科技协会

广东海洋大学科技创新协会

福建农林大学电子科技创新协会

湖北理工学院电子技术协会

深圳职业技术学院电子精英训练营

浙江科技学院Zuster

湘潭大学电子科技协会

青岛理工大学琴岛学院天宏开发团队

河南理工大学大学生电器开发部

广西科技大学电气信息创新协会

浙江机电职业技术学院电子制作协会

郑州大学西亚斯国际学院爱电工作室

新乡学院电子创新工作室

洛阳理工学院SmartTeam

苏州工业职业技术学院创新工作室

浙江工业大学GC315团队

杭电-微芯大学生科技创新孵化器

西安工业大学电信科协

商洛学院科技创新协会

大连民族学院创新工作室

南京信息工程大学帆木工作室

-

供求信息发布

方案交易

供需广告

芯片求购|供应发布区