历史上的今天
返回首页

历史上的今天

今天是:2024年09月21日(星期六)

2019年09月21日 | IAR EW6.30版本下建立STM32工程(芯片型号STM32F105VC)

2019-09-21 来源:eefocus

参考博客及文档有:

1,http://www.cnblogs.com/ele-eye/archive/2011/11/28/2266229.html

        2,http://www.cnblogs.com/king-77024128/articles/2512997.html(CMSIS介绍)

        3,   http://wenku.baidu.com/link?url=2blE__GxI1lmJglihBi5xJQPolza-NMxcZqGThxwysiY80ZOe6hLl5k6mowbTN2j30WsPftFZsBe1pRt8WlCDIT7Ce5EIReo4uGCEyegh7S(IAR 新建 STM32工程)

        4,http://blog.sina.com.cn/s/blog_4c8287230100f0jw.html(IAR 新建 STM32工程)

        5,http://blog.sina.com.cn/s/blog_4c8287230100eznh.html(IAR使用说明)

        6,http://blog.sina.com.cn/s/blog_4c8287230100f2ah.html(IAR使用说明 第一个IAR项目)

        7,http://blog.chinaunix.net/uid-26435987-id-3073074.html(启动代码和bootloader的关系)

       建立工程之前首先应知道IAR EW6.30版本较IAR EW6.20之前的版本有一个较大的改变。即IAR EW6.30已经植入了Cortex-m3的内核相关定义,所以在建立工程时就不需要添加ST库中core_cm3.c 和 core_cm3.h 这两个文件了。不过需在配置IAR EW选项是需勾选"Options - General Options - Library Configuration"界面下的Use CMSIS。如图:

           建立工程前先介绍下相关文件夹及源文件:

         CMSIS:ARM定制的一个Cortex_M系列微控制器软件接口标准(Cortex MicroController Software Interface Standard的缩写)。主要是为了提供通用api接口来访问内核和一些片上外设。提高代码的可移植性。CMSIS有三个层:核内外设访问层Core Peripheral Access Layer(CPAL),中间件(是一种独立的系统软件或服务程序如FatFS)访问层Middleware Access Layer(MWAL),设备访问层(Device Peripheral Access Layer)。CPAL用于访问内核的寄存器和组件,如NVIC,调试系统等,该层是由ARM实现的。MWAL用于对中间件的访问,现在该层还未实现。DPAL用于定义一些硬件寄存器的地址和一些外设访问函数,由芯片制造商实现。CPAL的实现就是core_cm3.c,core_cm3.h文件。DPAL层实现的就是system_stm32f10x.c的文件(似乎还要加上外设的函数库)。

       stm32f10x_flash.icf:编译器链接库文件,修改两个参数即可改变代码存放的地址空间。

       startup_stm32f10x_cl.s:stm32f105vc在IAR编译器环境下专业的启动文件。启动文件用英文单词来描述为“Bootloader”。无论性能高下,结构简繁,价格贵贱,每一种微控制器(处理器)都必须有启动文件,启动文件的作用便是负责执行微控制器从“复位”到“开始执行main函数”中间这段时间(称为启动过程)所必须进行的工作。开发环境往往自动完整地提供了这个启动文件,不需要开发人员再行干预启动过程,只需要从main函数开始进行应用程序的设计即可。由开发环境及启动文件可知:STM32的启动过程。首先对栈和堆的大小进行定义,并在代码区的起始处建立中断向量表,其第一个表项是栈顶地址,第二个表项是复位中断服务入口地址。然后在复位中断服务程序中跳转¬¬C/C++标准实时库的__main函数,完成用户堆栈等的初始化后,跳转.c文件中的main函数开始执行C程序。假设STM32被设置为从内部FLASH启动(这也是最常见的一种情况),中断向量表起始地位为0x8000000,则栈顶地址存放于0x8000000处,而复位中断服务入口地址存放于0x8000004处。当STM32遇到复位信号后,则从0x80000004处取出复位中断服务入口地址,继而执行复位中断服务程序,然后跳转__main函数,最后进入mian函数,来到C的世界。

         bootloader:不是一段代码,它是一个具有引导装载功能的完整程序,如可以引导装载linux的vivi或uboot,以及通常PC机上的BIOS程序等。Bootloader也包含了相应的启动代码,也就是说启动代码是Bootloader的一部分,是所有相应应用程序的一部分。

      system_stm32f10x.c/.h:设置系统以及总线时钟,这个里面有个非常重要的SystemInit()函数,这个函数在我们系统启动的时候都会调用,用来设置系统的整个时钟系统。不知从哪个版本开始该函数被加入了启动文件中,可在启动文件查找。所以我们不需使用该函数了。系统主频时钟(主频率)的改变依实际芯片主频修改,如图:

      

      stm32f10x.h:这个文件相当重要,只要你做STM32开发,你几乎时刻都要查看这个文件的相关定义。这个文件打开可以看到,里面非常多的结构体以及宏定义。这个文件里面主要是系统寄存器定义声明以及包装内存操作。外部时钟频率在该文件里改变,如图:

       你外部晶振使用多少HZ,就改变为多少。

     misc.c:定义了中断向量表初始位置。对比ARM7/ARM9内核(复位后起始地址固定0x000000,中断向量表位置不固定),Cortex_M3则是固定了中断向量表的位置(若FLASH启动,复位后中断向量位置固定在0x08000000.),而程序起始地址(程序被安置的地址)是可变化的。编译器链接器分配了中断向量表实际放置的地址。所以cm3中断向量表初始位置不可变,程序起始地址可改变(对CPU来说)。如图: misc.c

      

      如图启动文件内修改当前程序的开始地址(内部flash启动时即ROM_start的地址):

      

                             

          下面开始建立工程:

         1,打开IAR EW。

            2,点选“File --- New ---  Workspace”创建一个工作区。创建工作区先新建一个文件夹,我在E盘新建一个名为IAR_Pro的文件夹,作为工作空间。然后在该文件夹下再新建一个名为Project1的工程文件夹,一会要在此目录下新建工程。

   IAR <wbr>使用说明——新建第一个IAR工程

           3,点选“Project --- Create New Project”。弹窗后Tool Chain选择ARM,Project templates选择Empty project。点击OK,后弹出另存为窗口。选择文件路径为工作空间路径“E:IAR_ProProject1”。填写文件名为NEW_Project,即工程名。

           4,在“E:IAR_Pro”文件夹下新建USER,CMSIS,STM32F10x_FWLIB这三个文件夹。USER存放用户实现的代码如main.c和stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h,system_stm32f10x.c。CMSIS存放cm3的内核文件及启动文件和stm32f10x.h和system_stm32f10x.h,这里只存放启动文件startup_stm32f10x_cl.s。STM32F10x_FWLIB存放ST官方提供的标准库文件。 

           5,将IAR 链接脚本文件stm32f10x_flash.icf添加到Project1目录下。

           6,将上述文件都添加到IAR 工程里。如图:

           

           7,配置编译器选项。右击工程名选择Options。

          (1)配置General Options。如图:

            

           

           (2)配置C/C++ Compiler。点击Optimization(最优化)选择 High,如图:

             

             点击Option--C/C++ Compiler--Preprocessor下添加头文件路径及相应宏定义符号例如USE_STDPERIPH_DRIVER和STM32F10X_CL(互联型)。如图:

              

             (3)配置Output Converter,如图:

               

              (4)配置Linker。如图:

                

              路径可改为$PROJ_DIR$stm32f10x_flash.icf。增加可移植性。

             (5)配置Debugger。如图:

              

              

              以上配置开发环境OK。编译OK,使用的是3.5库ADC1_DMA文件夹里的main.c,编译OK,如图:

              

           Cortex-M3内核规定,起始地址必须存放堆顶指针,而第二个地址则必须存放复位中断入口向量地址,这样在Cortex-M3内核复位后,会自动从起始地址的下一个32位空间取出复位中断入口向量,跳转执行复位中断服务程序。

            查看IAR编译器编译后的汇编代码===================================
编辑界面右击工程名,点击Options选项,选择c/c++ compiler选项中的list选项,勾选output assembler files,编译后生产离线汇编代码文件。
调试界面下,点击view/disassembly菜单项,则显示在线汇编代码窗口。
在线调试,需将Debugger选项下Setup下的Driver改为simulator模拟器,run to到你想到的地方。然后点击Download and Debug


产生map文件================================================、
Options--linker--list --- Generate linker map file




仿真器作用=================================================
仿真器是在程序运行时,用来观察寄存器里的数值的。比如说你定义了一个变量,程序运行过程中这个变量会变化。当你需要确定当前值时候,可以用仿真器看到。
所以,如果做大工程,仿真器是必不可少的。如果是很小的代码,可以不用仿真器,用串口直接下载程序就OK了。 


硬件仿真与软件仿真区别=======================================
硬件仿真依赖实际的硬件实物,程序是运行在实际的cpu中的,读取到的任何数值、状态都是实际的现有状态,一旦能通那基本就没问题了。


软件仿真是在pc上用软件模拟了硬件cpu的各种功能、寄存器等,不依赖实际的硬件,其实可以看成是多个函数,你写的程序是多个输入,有一个输入,对应的函数就输出相应的结果。


软件仿真即使成功,实际下载到硬件上也有可能会出问题,比如电源、晶振这些都是没法仿真的。 

推荐阅读

史海拾趣

Fischer Connectors公司的发展小趣事

Fischer Connectors公司在电子行业中的五个发展故事

故事一:创立与初期发展

Fischer Connectors的故事始于1954年,由真空技术专家Walter Werner Fischer在瑞士沃州的莫尔日创立。他凭借对技术的热爱和执着,开发出了世界上第一个高品质密封连接器,专为工业应用而设计。这一创新产品迅速赢得了市场的认可,为公司的发展奠定了坚实的基础。在随后的几年里,Fischer Connectors不断优化产品,并于1962年注册了推拉锁定系统的国际专利,进一步巩固了其在连接器行业的领先地位。

故事二:全球扩张与国际合作

随着业务的不断增长,Fischer Connectors开始积极寻求全球扩张的机会。1988年,公司在英国成立了第一家子公司,标志着其国际商业活动的正式开始。此后,Fischer Connectors相继在欧洲的德国、意大利、法国以及美国等地开设了子公司,形成了全球性的生产和服务网络。这些子公司不仅为当地市场提供了高质量的连接器产品,还促进了Fischer Connectors在全球范围内的技术创新和市场拓展。

故事三:技术创新与产品线扩展

Fischer Connectors始终将技术创新作为企业发展的核心驱动力。进入21世纪后,公司推出了一系列具有创新性的连接器产品,如Fischer Core系列塑料连接器、AluLite™超轻铝连接器以及Fischer UltiMate™系列超坚固连接器等。这些产品不仅满足了不同行业对连接器性能的多样化需求,还推动了整个电子行业的技术进步。同时,Fischer Connectors还不断扩展其产品线,涵盖了多极低电压连接器、同轴高电压连接器等多个领域,进一步巩固了其在连接器市场的领先地位。

故事四:应对行业挑战与定制化解决方案

随着电子行业的快速发展,连接器和线缆系统的应用环境越来越复杂多样。Fischer Connectors凭借其在技术、质量和服务方面的优势,积极应对行业挑战,为客户提供定制化的解决方案。公司拥有一支专业的研发团队和客户服务团队,能够深入了解客户的实际需求,量身定制出最适合客户应用方案的连接器与线缆系统。这种以客户为中心的服务理念赢得了广大客户的信赖和支持。

故事五:数字化转型与可持续发展

近年来,Fischer Connectors积极响应数字化转型的浪潮,利用先进的技术手段提升生产效率和产品质量。公司投入大量资源建设智能化生产线和数字化管理系统,实现了从原材料采购、生产加工到成品出库的全流程信息化管理。同时,Fischer Connectors还注重可持续发展,致力于开发环保型连接器和线缆系统,减少对环境的影响。这些努力不仅提升了公司的竞争力,还为公司赢得了更多的社会认可和赞誉。

Don Connex Electronics Co Ltd公司的发展小趣事

随着国内市场的逐渐饱和,Don Connex Electronics开始寻求海外市场的拓展。公司组建了一支专业的国际市场团队,积极参加国际电子展会,与国际客户建立联系。通过不断努力,公司成功打入欧洲和北美市场,并与多家国际知名企业建立了长期合作关系。这一举措不仅提升了公司的品牌影响力,也极大地促进了公司的销售业绩。

Deltron公司的发展小趣事

在追求经济效益的同时,Deltron公司始终关注环境保护和可持续发展。公司大力推行绿色生产理念,引进环保设备和技术,减少生产过程中的污染物排放。同时,公司还积极参与环保公益活动,提高员工和公众的环保意识。这些举措不仅提升了Deltron的品牌形象,也为公司的长期发展奠定了坚实基础。

Analogix Semiconductor公司的发展小趣事

在追求经济效益的同时,Deltron公司始终关注环境保护和可持续发展。公司大力推行绿色生产理念,引进环保设备和技术,减少生产过程中的污染物排放。同时,公司还积极参与环保公益活动,提高员工和公众的环保意识。这些举措不仅提升了Deltron的品牌形象,也为公司的长期发展奠定了坚实基础。

富捷(FOJAN)公司的发展小趣事

自成立以来,富捷电子始终将技术创新视为企业发展的核心驱动力。公司投入巨资建立了一支国际专业的晶片电阻核心技术研发团队,专注于贴片电阻、合金电阻、车规电阻等产品的研发与生产。近年来,富捷电子成功研发出高端抗静电汽车晶片电阻FQS系列产品,并建设了“高端抗静电汽车晶片电阻智能工厂”,实现了从原材料入库到成品出库的全程智能化、自动化操作。这一创新不仅提升了产品性能,还满足了汽车电子行业对元件高可靠性、高稳定性的严格要求,推动了公司在汽车电子领域的快速发展。

广东长利光电(Changli Optoelectronic)公司的发展小趣事

在公司成立之初,广东长利光电面临着巨大的市场压力和资金困难。然而,公司创始人凭借着对LED技术的深刻理解和市场前景的坚定信念,决定专注于LED产品的研发和生产。他们引进了先进的生产设备和技术,不断创新,逐渐在市场上站稳了脚跟。这一时期,公司的研发团队经常加班加点,反复试验,以确保产品的质量和性能达到最佳状态。

问答坊 | AI 解惑

积分问题咨询

低频数字信号积分问题。低频时由于积分对象是离散的正弦波,谐波分量很大,怎样有效对基波积分,请教大虾…

查看全部问答>

初学者请教wince开发学习方法,敬请各位高手指点!

各位高手,我刚开始学习wince开发,买了2440的开发板,但现在发现出从下手,请各位高手指点! …

查看全部问答>

技术研发V项目经理V技术支持工程师

我是福建的一名电气工程及其自动化的本科毕业生。。。。由于还很稚嫩,在工作的选择上还是很不成熟,果断,缺乏对未来职业的自信。 我现在签了一家上海的做低压电器的技术研发的工作,在那实习了一个月,感觉是能学学到很多东西。 但很多人都认为 ...…

查看全部问答>

请教有关日本产的单片机型号?

有一日本产设备上使用的单片机型号是: VIBRA 201L008 AJ51 0642KBA08 求该芯片的详细资料,谢谢.…

查看全部问答>

各种单片机编程语言比较

各种单片机编程语言比较…

查看全部问答>

刚刚收到得的奖品

早上收到论坛活动的奖品,充电充了3个小时还在显示充电,不敢充了,不知道其他人的是不是也要充这么久?用的君正4725方案,这个方案应该是蛮适合diy的,有空拆开来看看,当开发板玩玩屏幕是2.8的液晶,感觉背光亮度有点低上几张图给大家看看旁边是6 ...…

查看全部问答>

我申请力源的免费开发套件已经拿到了!

                                   昨天就到了的,一张光盘、一块ST32F103(用盒子精装)芯片、一块ST32F103最小系统板、一个JTAG下载器 ...…

查看全部问答>

系列芯片

芯片型号前有74、LM、ULN、LM、CD等等,这些是什么意思啊,是指某家公司生产的系列产品呢,还是某个组织机构命名的呢…

查看全部问答>

晒WEBENCH设计的过程+3.3V转5V升压电路设计

希望寻找一种+3.3V转5V的占板面积比较小的电源设计。 打开WEBENCH,选择电源设计,在其中输入设计的参数。 点击显示推荐的电源管理电路,可以得到所有推荐结果。 可以使用优化工具进行微调,转动左上角的指针,选择最小面积,可以看到推荐的方案 ...…

查看全部问答>

汽车检测标准

有谁用过MES PW PT001标准进行汽车电子零部件检测的? …

查看全部问答>