美文网首页
1# 最小的启动程序

1# 最小的启动程序

作者: dogo_L1L | 来源:发表于2018-11-24 21:41 被阅读0次

1# 一些资料

       我使用的是 STM32F103VET6(野火的指南者) ,是一块开发板,并不是最小系统,购买的时候卖家送了很多的资料,并附带有一个论坛。(FireBBS)并送了 STM32的手册的电子书。
       由于安装的文件(KEIL和STM32的兼容包)这些网上的资料非常多,也就不进行展开了。

2# 开场白

       本人在大学期间学过51单片机,对芯片的资源略懂一二。(没学过也没关系)
       拿51单片机作为比较,在51单片机中,比较重要的资源,比如P0-P3的引脚,寄存器,中断。中断又是一个非常重要的资源,比如计时器,计数器等等。剩下的就是一些协议内容了,比如I2C,SPI等。
       这就是51作为经典教材的原因,包含了基本所有的单片机中含有的内容,STM32 只是比51单片机的资源更加丰富,总体的思想是不变的。
       看看STM32F103VET6中包含的意思吧。
ST:意法半导体公司
M:微控制器
32:32位
F103:(functional)基础版本,F10x的最高稳定主频位72MHz,F40x最高稳定主频位180MHz
V:100个引脚
E:Flash为512kB
T:一种封装类型
6:温度等级

图片来源:零死角玩转STM32—F103指南者 P25

       有了这个信息就容易选择自己需要的芯片,比如后期设计的时候,我们并不会使用开发板而是使用最小系统进行开发,在淘宝网上进行搜索:STM32最小系统,(不是广告),会找到类似这样的。也能估摸的认识到芯片的内容。

不是广告.png

       这里还是要矫正一下一些对开发板的误解,开发版的价格大约都是300左右,但是最小系统却只要20左右,这是因为开发版上含有大量的外设,比如LED,显示屏,蜂鸣器,WIFI,按钮等。学习时使用的是开发板,因为资源丰富;设计时,使用的是最小系统,因为价格便宜。
       当我们使用一款芯片的时候,首先就需要资料,一般有两个资料:参考手册(Reference Manual)数据手册(Data Sheet)这些资料是官方提供的,较为权威。STM官网
       另外我学习的时候完整的看完来野火STM32

3# 实战

       接下来我们开始实际的编程。相比于51单片机,STM32的外设非常丰富,有GPIOA-E,并且每个GPIO的寄存器控制16个引脚。有官方的库提供支持。

3#1 创建项目

  1. 创建文件夹用来存放我们的项目
    加入3个文件,
    main.c(新建,空)
    stm32f10x.h(新建,空)
    startup_stm32f10x_hd.s(官方固件库提供)启动文件
    路径为:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\startup_stm32f10x_hd.s
image.png
  1. 创建项目
image.png
  1. 放置位置
image.png
  1. 根据自己的型号进行选择
image.png
  1. 出现了CAN的库找不到(不要慌,暂时用不到)
image.png
  1. 导入步骤1中的文件
image.png

确认文件目录:

image.png
  1. 测试主函数为空
image.png

报错信息如下:
.\Objects\mini.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_hd.o)

  1. 补充 SystemInit 函数
image.png

Warning信息如下:
main.c(8): warning: #1-D: last line of file ends without a newline

3#2 解析

我们将上面的
Error信息复制如下:

.\Objects\mini.axf: 
Error: L6218E: Undefined symbol SystemInit (referred fromstartup_stm32f10x_hd.o)

提到了文件 startup_stm32f10x_hd.o 而我们实际的文件为 startup_stm32f10x_hd.s ,确实这两个文件是有关系的,.s 文件经过 gcc的编译会形成 .o 。所以解决该问题要查看 .s 文件的源码(358)。我们可以利用 SystemInit 定位信息

image.png

代码如下:

; Reset handler
Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main
                IMPORT  SystemInit
                LDR     R0, =SystemInit
                BLX     R0               
                LDR     R0, =__main
                BX      R0
                ENDP

这里定义来两个入口一个为 main 函数入口,另一个为 SystemInit 入口。SystemInit 是控制时钟频率的函数。于是当我们定义该函数的时候,程序能正常找到入口,所以不会报错。


Warning信息如下:
main.c(8): warning: #1-D: last line of file ends without a newline
Warning信息中提示了在文件的末尾要有一个新行才是符合标准的。所以加入新行后Warning 就会消失。

4# 烧录

4#1 配置

  1. 启用 Use MicroLib
    目的是为了使用串口通信的时候直接使用printf。否则会报错。(串口通信时使用)
image.png
  1. 输出配置
    目的1:生成 hex 烧录文件
    目的2:后期为了文件夹的独立性,会指定输出文件夹在 Project 中的位置,方便查找。
image.png
  1. 链接文件配置
    目的:指定链接文件(.h)文件在Project中的位置,克服.h文件在不同文件夹中无法调用的问题。
image.png
  1. debug设置
    目的:为了正常烧录,必不可少。
image.png

前提:插上STM32开发板

image.png image.png
  1. Utilities设置
    几乎不用设置
image.png

4#2 下载程序

警告:烧录后,你的开发版不会显示任何信息。并且原本的显示屏部分也不会显示信息,如果原本有外设开启,并且烧录后,外设不工作,说明烧录正常,可以开始STM32之旅。

image.png

5# 制作模版

       刚刚体验了一把配置的痛苦,各种不知名的,细小的配置,几乎毫无头绪。为了解决这个问题,我们可以制作一个模版,将我们需要的配置程序,放入模版中,使用时复制即可。

相关文章

  • 1# 最小的启动程序

    1# 一些资料 我使用的是 STM32F103VET6(野火的指南者) ,是一块开发板,并不是最小系统,购买...

  • 并发编程基础(一)

    进程 进程是程序运行、资源(CPU、内存空间、磁盘IO等)分配的最小单位,一个程序启动之前是死的,启动之后一次...

  • thunderbird 常用插件

    MinimizeToTray revived // 可以在程序运行中最小化到托盘;但是不能呢个实现“启动时最...

  • 线程和进程有什么区别

    进程:资源分配的最小单位,线程:程序执行的最小单位进程有独立的地址空间,线程没有单独的地址空间。启动一个新的进程必...

  • Java基础 (10) 进程和线程的区别

    进程是资源分配的最小单位,线程是程序执行(CPU调度f)的最小单位。 进程有自己的独立地址空间,每启动一个进程,系...

  • 线程和进程区别

    线程和进程区别 进程是资源分配的最小单位,线程是程序执行的最小单位。 进程有自己的独立地址空间,每启动一个进程,系...

  • 小程序页面状态的变化

    小程序页面状态的变化:假设现有A,B两页 1、启动小程序,进入A时: 2、在展示A时,锁屏或最小化微信时: 3、解...

  • 程序自启动方式 - ActiveX

    VC++6.0 缩小体积的头文件: 以上在 dll 文件最小化中,不怎么好用参考文章:[普及]程序自启动方式 - ...

  • 实战Java高并发程序设计笔记第二章

    Java并行程序基础 2.1 线程必知 进程: 资源分配最小单位 进程有自己独立的地址空间,每启动一个进程,系统都...

  • 线程和进程之间的区别

    进程进程是系统中正在运行的一个应用程序,应用程序启动运行就会形成一个进程。进程是系统分配资源的最小单位,每个进程都...

网友评论

      本文标题:1# 最小的启动程序

      本文链接:https://www.haomeiwen.com/subject/reeyqqtx.html