当前位置:首页 > 单片机 > 单片机
[导读]简介写这篇教程主要是和大家分享使用STM32的基本方法,也是给自己学习过程的总结、记录和备忘,避免重复学习之前明白但又忘记的知识和操作。我现在也是刚开始接触学习STM32,我是在STM32的固件库V3基础上进行学习。在

简介

写这篇教程主要是和大家分享使用STM32的基本方法,也是给自己学习过程的总结、记录和备忘,避免重复学习之前明白但又忘记的知识和操作。我现在也是刚开始接触学习STM32,我是在STM32的固件库V3基础上进行学习。在这里我和大家分享一下使用V3.x库的方法,希望大家喜欢,如有错误请指出。

这篇教程分以下几个方面,一:建立工程,设置工程属性。二:建立条理清晰的GROUP;三:使用JLINK仿真调试。下面就分别逐个说明。

一、新建MDK工程

1、首先,打开MDK软件,再点击Project->New uVision Project…,如下图所示:

弹出如下对话框:


新建一个文件夹MDK工程,然后把工程名字设为test,点击保存。弹出选择器件的对话框,

我们使用的是stm32单片机,所以选择STMicroelectronics下面的器件,如STM32F107VCT6,如图所示:


点击OK,MDK会弹出一个对话框,如图所示:问是否加载启动代码到当前工程下面,


如果选择是,则这个启动代码是旧版本库的启动代码,新版本的启动代码和这个不同,需要自己添加。在这里我们使用的是新版本的库,所以点击否,自己添加启动代码。

启动代码是一段和硬件相关的汇编代码,是必不可少的!这个代码具体如何工作,感兴趣可以研究一下,现在可以不必关心它。

2、接下来我们需要对工程进行一些设置。

在工程区,右键点击Target1,选择Options for Target‘Target1’ 如图所示:


弹出如下窗口,选择Output标签,设置目标文件的生成路径及其他相关参数。



如图点击Select Folder for Objects 在弹出的窗口中点空白处新建“Obj”文件夹,然后双击“Obj” 文件夹,如图中所示的Path后,点击OK.

点击Listing标签,新建“list”文件夹,设置链接文件的生成路径,及相关参数。如图所示:


【友情提示:Obj和list这两个文件夹会保存Keil编译连接过程中产生的一些文件,虽然是一个不起眼的细节但是也请大家关注,不然在工程目录下面“邋遢”的很,所以强烈建议创建这两个文件夹!】

点击Debug标签,选择使用的仿真器,我们使用JLINK V8进行仿真调试,对应的,在此选择Cortex-M/R J-LINK/J-Trace。Cortex-M/R J-LINK/J-Trace前的Use要选中,否则J-LINK调试会出问题。如图所示:


点击右侧的Setting,配置JLINK下载参数,主要是选择目标处理器系列,添加目标芯片对应的烧写算法。


图中要勾选Reset and Run 选项,如果Flash Download 算法不对,请点击Add 重新添加Flash算法。

点击Utilities,进行公共参数设置


至此,我们已经完成了一个RVMDK工程参数设置。

二、介绍MDK工程的文件管理方面的功能。

我们在使用ST标准的固件库进行代码设计时,一个工程内可能会包含很多的库文件,因此对文件进行管理就非常的必要。

如下图所示,右键点击Target1,选择Manage Components,进入分类文件管理设置。


在弹出的选择框中,可以设置工程名,增加、删减文件夹。以及在某个文件夹内添加删除文件。

在完成以上操作后,一个MDK工程就设置完成了,只需要依据实际应用要求编写相关代码即可。

【友情提示:Groups下的文件夹不是实际存在的(如果这里的名字跟实际工程中的文件夹同名也不要以为它是真实的,否则不同名时,你在硬盘中是找不到它们的),只是为了工程管理建立的。】

我个人觉得标准的库文件“埋”的太深,使用起来有点不方便,所以我一般对这些文件进行一些整理,把相关文件放在一起,并取上一个标准化的名字,这些文件夹的名字一般和原始固件库文件夹的名字相同,只是把需要的文件放在一起。一般在工程目录下面我会建立以下几个文件夹,如图所示。当然还会建立前面已经建立的两个很有用的文件夹(List和Obj)

自己建立的文件夹和库文件的对应关系:

StdPeriph_Driver文件夹内的内容与标准库保持一致。

STM32F10x_StdPeriph_Lib_V3.5.0LibrariesSTM32F10x_StdPeriph_Driver

StartUp文件夹内的文件在库中的位置:

STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10xStartUp

CMSIS文件夹内的文件在库中的位置:

STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10x

stm32f10x.h,system_stm32f10x.c, system_stm32f10x.h

STM32F10x_StdPeriph_Lib_V3.5.0ibrariesCMSISCM3CoreSupport

core_cm3.c, core_cm3.h



Groups文件夹的名称和工程文件夹的名称尽量保持一致,如上图所示。为每个Group添加同名文件夹下的源文件或者头文件,为了便于查看代码,我把源文件和头文件都添加进Group中(除StdPeriph_Driver),在这里注意过滤文件的类型。StdPeriph_Driver中只添加需要的源文件,例如建立一个LED闪烁的工程,那么这个工程除了进行必要的初始化之外,只需要包含GPIO的操作函数,当然需要使用GPIO就必须要使能GPIO的时钟,RCC是绝对少不了的。所以只需要包含misc.c,stm32f10x_gpio.c和stm32f10x_rcc.c。添加需要的文件之后,工程目录如图所示。

现在重新说明一下一个工程建立的文件夹:

MDK工程:内有List和Obj两个文件夹

CMSIS:包含系统的内核文件

StartUp:包含各种启动文件

User:用户编写的应用文件

StdPeriph_Driver:内有src和inc两个文件夹,是标准库提供的源文件和头文件。

当然也有人直接将List和Obj两个文件夹放在User文件夹内,然后去掉MDK工程文件夹。这样也是可以的,看个人爱好了。我习惯将User文件夹独立出来不放List、Obj和**.uvproj等文件,只放自己编写的应用文件,这样当项目有很多应用文件的时候可以在User内建立src和inc两个文件夹存放源文件和头文件,使文件结构看起来更加清晰。


需要说明的是,虽然在有些Group中包含了一些头文件,但是Keil在编译连接的时侯却不知道头文件在什么地方,所以一定要指定头文件的路径。


【重要】指定的头文件为:..CMSIS;..StdPeriph_Driverinc;..User

【重要】两个重要的宏也一定要指定:USE_STDPERIPH_DRIVER,STM32F10X_MD

三、J-LINK仿真调试。

【强调】:Debug标签,使用JLINK V8进行仿真调试,对应的Cortex-M/R J-LINK/J-Trace前的Use要选中,否则J-LINK调试会出问题。

这部分我就不多说了,在实际硬件平台上多多练习吧,祝大家在学习过程中不断提高。

注:此文档参考了网上的一篇文章和神舟开发手册的部分内容。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在嵌入式开发中,STM32的时钟系统因其灵活性和复杂性成为开发者关注的焦点。然而,看似简单的时钟配置背后,隐藏着诸多易被忽视的陷阱,轻则导致系统不稳定,重则引发硬件损坏。本文从时钟源选择、PLL配置、总线时钟分配等关键环...

关键字: STM32 时钟系统

在嵌入式系统开发中,STM32系列微控制器的内部温度传感器因其低成本、高集成度特性,广泛应用于设备自检、环境监测等场景。然而,受芯片工艺差异和电源噪声影响,其原始数据存在±1.5℃的固有误差。本文从硬件配置、校准算法、软...

关键字: STM32 温度传感器

在能源效率与智能化需求双重驱动下,AC-DC转换器的数字控制技术正经历从传统模拟方案向全数字架构的深刻变革。基于STM32微控制器的PFM(脉冲频率调制)+PWM(脉冲宽度调制)混合调制策略,结合动态电压调整(Dynam...

关键字: AC-DC STM32

当前智能家居产品需求不断增长 ,在这一背景下 ,对现有浇花装置缺陷进行了改进 ,设计出基于STM32单片机的全 自动家用浇花机器人。该设计主要由机械结构和控制系统构成 ,机械结构通过麦克纳姆轮底盘与喷洒装置的结合实现机器...

关键字: STM32 麦克纳姆轮 安全可靠 通过性强

用c++编程似乎是让你的Arduino项目起步的障碍吗?您想要一种更直观的微控制器编程方式吗?那你需要了解一下Visuino!这个图形化编程平台将复杂电子项目的创建变成了拖动和连接块的简单任务。在本文中,我们将带您完成使...

关键字: Visuino Arduino ESP32 STM32

基于STM32与LoRa技术的无线传感网络凭借其低功耗、广覆盖、抗干扰等特性,成为环境监测、工业自动化等场景的核心解决方案。然而,如何在复杂电磁环境中实现高效休眠调度与动态信道优化,成为提升网络能效与可靠性的关键挑战。本...

关键字: STM32 LoRa

在实时控制系统、高速通信协议处理及高精度数据采集等对时间敏感的应用场景中,中断响应延迟的优化直接决定了系统的可靠性与性能上限。STM32系列微控制器凭借其灵活的嵌套向量中断控制器(NVIC)、多通道直接内存访问(DMA)...

关键字: STM32 DMA

数字电源技术向高功率密度、高效率与高动态响应方向加速演进,STM32微控制器凭借其基于DSP库的算法加速能力与对LLC谐振变换器的精准控制架构,成为优化电源动态性能的核心平台。相较于传统模拟控制或通用型数字控制器,STM...

关键字: STM32 数字电源

STM32微控制器凭借其针对电机控制场景的深度优化,成为高精度、高可靠性驱动系统的核心选择。相较于通用型MCU,STM32在电机控制领域的核心优势集中体现在FOC(磁场定向控制)算法的硬件加速引擎与PWM死区时间的动态补...

关键字: STM32 电机控制

无线充电技术加速渗透消费电子与汽车电子领域,基于Qi协议的无线充电发射端开发成为智能设备能量补给的核心课题。传统模拟控制方案存在响应滞后、参数调整困难等问题,而基于STM32的数字PID控制结合FOD(Foreign O...

关键字: STM32 无线充电
关闭