历史上的今天
返回首页

历史上的今天

今天是:2024年09月27日(星期五)

正在发生

2019年09月27日 | STM32之keil MDK下建立第一个工程

2019-09-27 来源:eefocus

一、使用固件库建立一个工程

我打算先从软件编程学起,以前用过KEIL 和IAR,IAR我比较熟悉,因为参加电子设计竞赛的时候,就是用它编程MSP430程序的。但我还是选择了KEIL,也许因为资料比较多,或者别的吧,我没分析过KEIL 和IAR代码效率如何,因为这不是我现在要考虑的,软件都只是工具而已。


我去百度搜索了几篇如何在KEIL MDK环境下建立STM32工程,加上自己的实践。我也把我的初学者步骤贴出来。


1、了解STM32F103的固件库

我在网上下了STM32F103的固件库-----stm32f10x_stdperiph_lib 3.5V版的,里面内容如图所示,据说STM32F103和STM32F101都能用。


 

2、创建第一个工程

   1.新建一个文件夹取名如 first_project,也可以建在桌面。


     2.在里面新建 CMSIS ,libraries ,Libaries , List(用于链接的) , Obj(工程文件) , output  (输出hex文

     件), User 文件夹;

 

     3.  将固件库里 Libraries--->STM32F10x_StdPeriph_Driver 下的 inc 和src 文件夹复

          制到fisrt_project 文件夹下的libraries 里;

 

        将固件库里 Libraries--->CMSIS--->CM3--->CoreSupport文件夹里面的 core_cm3.c

          和core_cm3.h 文件复制到我们新建的fisrt_project 文件夹下的CMSIS 里;

 

        将固件库里 Project---->STM32F10x_StdPeriph_Template(这个文件家里有KEIL和

          IAR建好工程的模板)里的stm32f10x_conf.h , stm32f10x_it.c  ,

          stm32f10x_it.h  , system_stm32f10x.c  四个文件 复制到我们新建的fisrt_project 

          文件夹下的User 里;

 

          如下图所示




4、打开keil uvision4 MDK , 在菜单栏里点击project 选择 new uVision project  



5、保存工程名,选择Obj文件夹, 文件名为first_project ,不用加后缀格式,系统默认。


6、接下来会弹出让你选择器件的窗口,这里我们选择 STmicroelectronics 的 STM32F103C8


7、最后会弹出是否复制启动代码的对话框,选择YES;


3、 接下来就是管理工程文件了

     1、在project窗口右键点击Tagert 1 选择 manage conponents 或者

 

     找到倒数第二个 品字形图标;

 

 

     2、在Groups 框下面将Groups1 重命名为startup ,同时添加CMSIS, Libraries, User;

 

        选择CMSIS 在Files框下将CMSIS文件夹的core_cm3.c添加进去; 

 

        选择Libraries在Files框下将Libraries--->src文件下的所以文件都加进去添加进去;

 

        选择User在Files框下将User文件下的所以文件都加进去添加进去;

 

  如下图所示: 


 

3、工程构架如下图所示:


 

startup_stm32f10x_ld.s
startup_stm32f10x_md.s
startup_stm32f10x_hd.s

其中,ld.s适用于小容量 产品;md.s适用于中等容量产品;hd适用于大容量产品;
这里的容量是指FLASH的大小.判断方法如下:
小容量:FLASH≤32K
中容量:64K≤FLASH≤128K
大容量:256K≤FLASH

4、编写main.c 和文件路径 

 

  1、新建main.c 保存到User文件夹里,将其添加到User工程名下。

 

        #include "stm32f10x.h"

 

         int main(void)

{

  while(1)

{;}

}

 

  2、在project框下,右键点击Target 1,选择Options for Target target1 


 

     在output 选项下,在create HEX file 前打上钩, 点击select Folder for Objects 选择输出文   

             件夹为 output文件夹; 

 

     在Listing选项下,点击select Folder for Listings 选择链接文   

             件夹为 List文件夹;

 

    在C/C++选项下, define里 填入 USE_STDPERIPH_DRIVER,STM32F10X_MD 中间用英 

                 文的逗号;(一定要记得)

 

                   Include Paths 里,点击右边的文件路径框 ,选择相应的CMSIS,       

                 libraries 里的INC 和SRC 还有 User ;

 

     也可以填绝对路径,比如:   C:UsersAdministratorDesktopSTM32编程练习 

                                fisrt_projectCMSIS  这样比较麻烦



 

 

 

   3、好了,这下开始编译链接:

   0 Error , 0 Warring;

   First_project 就建好了;万里长征的第一步,总算走出去了。

 4、总结:关键是Option for target 的设置,包括output ,listing,和C/C++,尤其是C/C++这个选项里一定要设置对。

      Define:USE_STDPERIPH_DRIVER,STM32F10X_MD,这是预定义的两个宏定义。

      在stm32f10x.h这个头文件里搜索 USE_STDPERIPH_DRIVER 有这么一段

            #ifdef USE_STDPERIPH_DRIVER

            #include "stm32f10x_conf.h"

            #endif

     据说是定义控制了是否在应用中启用外设驱动。

在stm32f10x.h这个头文件里搜索 STM32F10X_MD, 

       STM32中密度器件

#ifdef STM32F10X_MD

ADC1_2_IRQn                = 18,     

USB_HP_CAN1_TX_IRQn        = 19,     

USB_LP_CAN1_RX0_IRQn       = 20,     

CAN1_RX1_IRQn              = 21,     

CAN1_SCE_IRQn              = 22,     

EXTI9_5_IRQn               = 23,     

      

#endif    可能是定义中断向量的值吧


推荐阅读

史海拾趣

Hirect公司的发展小趣事
根据需要的开关频率和响应速度,选择具有快速开关特性的晶闸管。
Beck IPC GmbH公司的发展小趣事

Beck IPC GmbH,一家在嵌入式通讯市场享有盛誉的公司,以其创新的IPC@CHIP技术为核心,为工业OEM提供了强大的支持。在某一时期,公司研发团队经过长时间的努力,成功开发出一款具有划时代意义的嵌入式控制模块。这款模块不仅性能卓越,而且稳定性极高,迅速获得了市场的广泛认可。多家知名工业设备制造商纷纷与Beck IPC建立合作关系,将其产品应用于各种高端设备中,从而推动了公司的快速发展。

DREMEL公司的发展小趣事

在电子行业的快速发展中,Dremio公司以其独特的数据治理技术崭露头角。他们开发了一种新型的数据处理引擎,能够直接在云数据湖中查询和分析数据,无需将数据复制到专有数据仓库中。这一创新技术大大提高了数据处理效率,降低了成本,并为企业提供了更灵活的数据管理方式。Dremio凭借这一技术,迅速在电子行业中树立了领先地位。

海芯科技(AVIA)公司的发展小趣事

海芯科技一直将产品研发视为公司发展的核心动力。经过长时间的研发与试验,公司成功推出了一系列具有市场竞争力的产品。这些产品不仅性能稳定、质量可靠,而且具有广泛的应用领域。随着产品在市场上的逐步推广和应用,海芯科技逐渐获得了客户的认可和信赖,市场份额也逐步扩大。

成都芯进(CrossChip)公司的发展小趣事

随着技术的不断积累和市场的逐步拓展,成都芯进电子逐渐在磁传感器芯片领域崭露头角。他们不仅实现了霍尔效应和磁阻效应磁传感器芯片的量产,还成功研发了电流传感器芯片、电机驱动芯片和电源管理芯片等系列产品。这些产品的推出,不仅丰富了公司的产品线,也进一步提升了公司的市场竞争力。

ETC2公司的发展小趣事

ETC2公司深知服务对于企业的重要性,因此不断优化服务体系以提升竞争力。他们建立了完善的客户服务体系,为用户提供24小时在线客服支持,确保用户在使用过程中遇到问题能够及时得到解决。此外,ETC2公司还定期举办用户培训活动,帮助用户更好地了解和使用ETC设备。这些举措不仅提高了用户的满意度和忠诚度,也为ETC2公司赢得了更多的市场份额。

问答坊 | AI 解惑

关于调试器

1、当要调试的系统变大时,偶而有不稳定的现象发生,比如下载完成后要将系统中断下来,此时当按下中断按钮时,直接就跑飞了,你再下载一次就OK了。这在系统较小时几乎不会发生。 2、在显示变量值的窗口(Expression)中,有一些结构体无法显示结构 ...…

查看全部问答>

正弦波数据生成器

正弦波数据生成器:…

查看全部问答>

09年全国电子设计大赛总结-希望对大家能有帮助

本帖最后由 paulhyde 于 2014-9-15 09:40 编辑 2009年全国大学生电子设计竞赛总结全国大学生电子设计竞赛是教育部高等教育司及信息产业部人事司负责领导的全国竞赛,,是面向大学生的群众性科技活动,目的在于推动全国普通高等学校促进信息与电子 ...…

查看全部问答>

基于定子磁链的转差频率矢量控制

矢量控制方法很多,有人用过基于定子磁链的转差频率控制码?给我讨论一下…

查看全部问答>

发一张STM32F107开发板的照片,开心开心!

                                  …

查看全部问答>

430 与RF通信 电路 求指教

小弟冒昧请问 我分配了430f149的引脚给 RF模块(加*的是RF模块信号 不知道这么分配clk和数据收发端 能不能行啊  求指教   )…

查看全部问答>

TI的MotorCtrl+PFC

这是在TI下载的,不知道他们用的什么软件画的电路图和PCB,       …

查看全部问答>

什么传感器可以测量一张床加一个人的重量啊?

有没有哪位大虾知道  什么型号或者类型的传感器可以测量一个人加上一张床的重量的???…

查看全部问答>

瑞萨开发板例程+四旋翼飞行器资料+AD9850_AD9851_模块

最近搜集的资料一下汇总,内容包括 瑞萨开发板例程、四旋翼飞行器资料、AD9850_AD9851_模块…

查看全部问答>