【嵌入式软件-STM32】新建工程

目录

STM32的开发方式

文件杂述

01-寄存器操作方式

02-基于库函数方式开发

02.1-文件解析

02.2-条件编译

02.3-库函数点灯(操作)

02.4-最终配置

总内容解析

01-启动文件选择

02-新建工程步骤

03-工程架构


tips:以下都是自己在网课学习整理的总结跟归纳~可能有自己偏向(就是详略啦~)ヾ(◍°∇°◍)ノ゙(嗯哼 因为大部分都是网课内容而已 主要是拿来自用而已~ 所以感兴趣可以自己去看同款江协网课——

STM32的开发方式

STM32的开发方式 主要有

1)基于寄存器的方式

同51单片机的开发方式一样,是用程序直接配置寄存器,来达到我们想要的功能

这种方式最底层、最直接、效率会更高一些;但由于STM32的结构太复杂、寄存器太多,所以基于寄存器的方式目前是不推荐的

2)基于标准库的方式(也就是库函数的方式)(本课程使用的)

是使用ST官方提供的封装好的函数,通过调用这些函数来间接地配置寄存器;由于ST对寄存器封装的比较好,所以这种方式既能满足对寄存器的配置,对开发人员也比较友好,有利于提高开发效率

3)基于HAL库的方式

可以用图形化界面快速配置STM32,比较适合快速上手STM32的情况,但这种方式隐藏了底层逻辑

文件杂述

01-寄存器操作方式

        点灯操作


        GPIOC->ODR = 0x00000000;为灯开

        GPIOC->ODR = 0x00002000;为灯关

        寄存器操作需要挨个位去变,虽语句简便,但麻烦,需了解清楚每一位的表示,并且会将其他原值改变,不能只更改位,而不去影响其他位

02-基于库函数方式开发

02.1-文件解析

文件夹Libraries:库函数的文件,之后建工程时会用到

文件夹Project:官方提供的工程实例和模板,以后使用库函数的时候可以参考一下

文件夹Utilities:STM32官方评估板的相关例程,该评估板为官方用STM32做的一个小电路板,用来测评STM32的,该文件夹里存的是这个小电路板的测评程序

文件Release_Notes.html:库函数的发布文档,内有版本的说明

文件stm32f10x_stdperiph_lib_um.chm:使用手册,内有教如何使用这个库函数

Start文件夹中为启动文件

文件stm32f10x.h:STM32的外设寄存器描述文件,作用与52单片机的头文件REGX52.H一样,用来描述STM32有哪些寄存器和它对应的地址的

文件system_stm32f10x.c  

&文件system_stm32f10x.h:这两个system文件是用来配置时钟的;STM32主频72MHz,就是system文件里的函数配置的

添加内核寄存器:

由于该STM32是内核和内核外围的设备组成的,而且该内核的寄存器描述和外围设备的描述文件不是在一起的,所以我们需要添加一个内核寄存器的描述文件

文件core_cm3.c

&文件core_cm3.h:这两个cm3(Cortex-M3)文件,就是内核的寄存器描述,还带了一些内核的配置函数,所以多了个.c的文件

需要在工程选项里添加文件夹的头文件路径,否则软件会找不到.h文件

创建文件文件Library :存放库函数

misc.c是内核的库函数,其他为内核外的外设库函数(/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/STM32F10x_StdPeriph_Driver/src)

stm32f10x_conf.h文件:这个conf(configuration)文件)是用来配置库函数头文件的包含关系的,另外这里面还有个用来参数检査的函数定义,这是所有库函数都需要的

02.2-条件编译

        意思是:如果定义了USE_STDPERIPH_DRIVER(使用标准外设驱动)字符串,下面这个include conf.h语句才有效

02.3-库函数点灯(操作)

        库函数也是间接地配置寄存器
        首先是使能时钟,库函数有这样一个函数来开启时钟,叫RCC_APB2PeriphClockCmd(RCC_APB2外设时钟控制)

函数的参数解析

函数介绍

函数具体参数

02.4-最终配置(点灯)

总内容解析

01-启动文件选择

        新建工程 第一个加的就是启动文件,根据芯片型号来选择启动文件;

        表中为STM32F1系列中的型号分类:

        容量大小根据Flash大小来分,和根据芯片型号来选择:
        100型号要选择带VL的,然后再根据Flash的大小选择LD、MD还是HD

        101/102/103型号则选择不带VL的,然后再根据Flash的大小选择LD、MD、HD还是XL

        105、107型号为互联型产品,直接选择CL的启动文件,没有根据Flash大小再分类

02-新建工程步骤

        【第二步】 是为了添加工程文件准备的,建文件夹是因为文件比较多需要分类管理一下(文件夹的名称和数量没有限制,可以根据自己理解来建)

       【第三步】  是为了在Keil里方便管理文件,因为Keil没法直接添加文件夹(.h文件是不参与编译的,所以其他很多工程都是不添加.h文件的)

        【第四步】 是因为Start、Library等文件夹是自己建的,Keil不知道,所以要用自己文件夹里面的.h文件就必须声明一下这个路径(最好是自己建的所有文件都声明一下,这样就不会出现.h文件找不到的问题了)

        【第五步】 是使用库函数的条件编译,使用库函数就必须定义这个(另外,其他的工程在这个位置还声明了一个STM32F10X_MD的字符串,但Keil5在新建工程时就已经自动帮忙声明了,就不需再额外声明了)

        【第六步】 是选择调试器来进行下载的选项(用STLINK就选STLINK即可)

03-工程架构

工程结构主动执行的内容(左一、二)

        startup_xx.s启动文件:程序执行最基本的文件
        (Keil中启动文件是用汇编写的,启动文件内定义了中断向量表、中断服务函数等;该中断服务函数有个复位中断,是整个程序的入口;当STM32上电复位或者按下复位键后,程序就会进入复位中断函数执行)

        对应启动文件的这里


        复位中断函数主要做两件事情:第一个是调用SystemInit  第二个是调用main函数

        实际上单片机的程序永远也不会结束,所以main函数的最后一定要加个死循环

        SystemInit函数就是定义在system开头.c(sytem_xx.c)里面

        该函数的作用:是设置微控制器的启动,初始化嵌入式闪存接口、锁相环、更新系统内核的时钟变量;

        下面的note写的是 这个函数仅在复位后需要调用

        (我们只需要知道 在main函数之前,单片机已经执行了一堆东西了,帮我们把闪存接口、时钟等一系列杂碎的东西都配置好了;另外在启动文件还定义了STM32所有的其他中断,这些中断达到触发条件后就会自动执行

        另外也可以自定义一些用户文件来封装一些模块,供主函数和中断调用

被动执行的东西(右一)

        右一相当于STM32的资源
        在主函数和中断函数里,就可以调用这些资源


        stm32f10.hcore_cm3.c/.h 文件 就是外设和内核外设的寄存器描述
        寄存器调用比较麻烦


        下面两个为库函数文件,库函数封装了寄存器的操作,更人性化
        conf文件就是用来配置头文件的包含关系的

猜你喜欢

转载自blog.csdn.net/Aliothxx/article/details/142792784