完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
STM32的软件开发模式
开发者基于ST公司提供的软件开发库进行应用程序的开发,常用的STM32软件开发模式主要有以下几种: 基于寄存器的开发模式 基于寄存器编写的代码简练、执行效率高。这种开发模式有助于开发者从细节上了解 STM32 微控制器的架构与工作原理,但由于 STM32 微控制器的片上外设多且寄存器功能五花八门,因此开发者需要花费很多时间精力研究产品手册。这种开发模式的另一个缺点是:基于寄存器编写的代码后期维护难,移植性差。总的来说,这种开发模式适合有较强编程功底的开发者。 基于标准外设库的开发模式 这种开发模式对开发者的要求较低:开发者只要会调用API即可编写程序。基于标准外设 库编写的代码容错性好且后期维护简单,其缺点是运行速度相对寄存器级的代码偏慢。另外,基于标准外设库的开发模式比较不利于开发者深入掌握 STM32 微控制器的架构与工作原理。 总的来说,这种开发模式适合快速入门,大多数初学者会选择这种开发模式。 基于STM32Cube的开发模式 基于STM32Cube的开发流程如下: 开发者先根据应用需求使用图形化配置与代码生成工具对MCU片上外设进行配置; 然后生成基于HAL库或LL库的初始化代码; 最后将生成的代码导入集成开发环境进行编辑、编译和运行。 基于STM32Cube的开发模式的优点有以下几点: 初始代码框架是自动生成的,这简化了开发者新建工程、编写初始代码的过程。 图形化配置与代码生成工具操作简单、界面直观,这为开发者节省了查询数据手册了解引脚与外设功能的时间。 HAL库的特性决定了基于STM32Cube的开发模式编写的代码移植性最好。 这种开发模式的缺点是函数调用关系比较复杂、程序可读性较差、执行效率偏低以及对初学者不友好等。 另外,图形化配置与代码生成工具的“简单易用”是建立在使用者已经熟练掌握了STM32 微控制器的基础知识和外设工作原理的前提下的,否则在使用该工具的过程中将会处处碰壁。基于STM32Cube的开发模式是ST公司目前主推的一种模式,对于近年来推出的新产品, ST 公司也已不为其配备标准外设库。因此,为了顺应威廉希尔官方网站 发展的潮流,本书选取了基于 STM32Cube的开发模式,后续的任务实施的讲解,都是基于这种开发模式。 3. STM32的集成开发环境 根据 ST 公司官网显示,支持 STM32 开发的 IDEs(Integrated Development Environments,集成开发环境)有20余种,其中包括商业版软件和纯免费的软件。目前比较常用的商业版IDE有MDK-ARM与IAR-EWARM,免费的IDE包括SW4STM32、TrueSTUDIO和 CoIDE等。另外,ST官方推荐使用STM32CubeMX软件可视化地进行芯片资源和管脚的配置,然后生成项目的源程序,最后导入IDEs中进行编译、调试与下载。在2019年4月,ST公司还发布了STM32CubeIDE 1.0,它将TrueSTUDIO和STM32CubeMX工具整合在一起,是一个基于Eclipse和GCC的IDE工具。 常见的支持STM32开发的IDEs如图2-5所示。 图 2-5 支持 STM32 开发的 IDEs 一览 本书在后续的任务实施讲解中,将采用“STM32CubeMX + MDK-ARM”的开发工具组合。 具体的应用开发流程如下所示: 根据任务要求,利用STM32CubeMX进行功能配置; 生成基于MDK-ARM集成开发环境的初始代码; 添加功能逻辑完成应用开发。 2.2.3 任务实施 MDK-ARM的安装 下载安装包并安装 从Keil官网(www.keil.com)下载MDK-ARM的安装包,如:“MDK528A.EXE”。安装包下载完毕后,双击运行进入安装界面,根据向导提示点击“Next”按钮,安装目录保持默认即可,如图2-6所示。 图 2-6 MDK-ARM 的默认安装目录 安装成功后,系统将进入软件包安装欢迎界面,如图2-7所示。 图 2-7 Pack Installer 欢迎界面 安装软件包 方法一:点击图2-7中的“OK”按钮之后,将会进入软件包的安装主界面,如图2-8所 示。 图 2-8 软件包的安装主界面 在Pack Installer窗口左半部的Device列表选择相应的STM32微控制器型号,如: STM32F103VE(图2-8中的标号①处),然后点击右侧的“Intall”按钮进行在线安装(图2- 8中的标号②处),同时可通过图中标号④处的进度条观察安装进度。 注:如果下载速度较慢,可使用下载工具进行下载,将图2-8中标号③处的网址复制到下载工具中即可。 方法二:找到随书配套资源包中的 MKD 支持包: 双击进行安装。 STM32CubeMX的安装 下载安装包并安装 STM32CubeMX软件的运行依赖Java Run Time Environment(简称JRE),因此建议在安装前到Java的官网https://www.java.com下载JRE。读者应根据自己操作系统选择32 位或64位版本进行下载安装。 STM32CubeMX软件可访问其主页(https://www.st.com/stm32cube)获取,其安装过程也比较简单,根据安装向导操作即可。 嵌入式软件包的安装 打开安装好的STM32CubeMX软件,点击“Help”菜单(图2-9中标号①处),选择“Manage embedded software packages”选项(图2-9中标号②处)进入嵌入式软件包管理界面。 图 2-9 STM32Cube 嵌入式软件包的安装 选择相应的STM32微控制器系列,如:STM32F1 Series(图2-9中的标号③处),然后点击“Install Now”按钮(图2-9中的标号④处)即可下载并安装嵌入式软件包。 ST-Link驱动程序的安装 ST-Link是ST公司官方出品的一款支持STM32系列单片机的程序下载调试工具,使用前应安装相应的驱动程序。 MDK-ARM 的安装目录中包含了 ST-Link 下载调试工具的驱动程序,其位于 “C:Keil_v5ARMSTLinkUSBDriver”路径,如图2-10中的标号①处所示。 读者的PC机如果安装了64位的操作系统,则直接执行上述路径下的“dpinst_amd64.exe” 可执行文件即可完成驱动程序的安装,如图2-10中的标号②处所示。 建立工程 建立工程存放的文件夹在 D 盘根目录新建文件夹“STM32_WorkSpace”用于保存所有的任务工程,然后在该文 件夹下新建文件夹“task1_ProjectFirst”用于保存本任务工程。 新建STM32CubeMX工程打开STM32CubeMX工具,点击“ACCESS TO MCU SELECTOR(选择MCU)”按钮,如图图 2-11所示。 图 2-11 点击“MCU 选择”按钮 进入“MCU选择”窗口,如图2-12所示。 图 2-12 查找 MCU 型号 在图2-12中的标号①处,输入MCU型号的关键字,如:STM32F103VE。点击标号②处的 MCU型号,然后点击标号③处的“Start Project”按钮新建STM32CubeMX工程。(3)配置GPIO功能假设开发板的“PE6”引脚与LED灯——“LED2”相连。在STM32CubeMX工具的配置主界面,用鼠标左键点击MCU的“PE6”引脚处,选择功能“GPIO_Output”。如图2-13所示。 图 2-13 配置 GPIO 功能 然后用鼠标右键点击“PE6”引脚,选择“Enter User Label”选项,输入值“LED2”,将“PE6”引脚的“用户标签”值配置为“LED2”,点击“GPIO”,选中“PE6”,确保PE6引脚的配置如图2-14中的④~⑥所示。 图 2-14 配置 GPIO 引脚的用户标签 配置调试端口 STM32微控制器支持通过JTAG接口或SWD接口与仿真器相连进行在线调试。完整的JTAG 接口为20Pin,接口体积大且占用较多GPIO引脚资源,一般用于J-Link仿真器。而SWD接口最少只需3根连线即可实现,一般用于ST-Link仿真器。 接下来以ST-Link仿真器为例,讲解调试端口的配置过程。 展开“Pinout & Configuration”标签页左侧的“System Core(系统内核)”选项(图 2-15中标号①处),选择“SYS(系统)”选项(图2-15中标号②处),将“Debug(调试)” 下拉菜单改为“Serial Wire(串口线)”选项(图2-15中标号③处)。即可将“PA13”引脚配置为SWDIO功能(图2-15中标号⑤处),“PA14”引脚配置为SWCLK功能(图2-15中标号 ④处)。 图 2-15 SWD 调试端口的配置 配置MCU时钟树选择“Pinout & Configuration”标签页左侧的“RCC(复位、时钟配置)”选项,如图 2-16 的标号①所示。将 MCU 的“High Speed Clock(HSE,高速外部时钟)”配置为 “Crystal/Ceramic Resonator(晶体/陶瓷谐振器)”,如图2-16的标号②所示。同样地,将MCU的“Low Speed Clock(LSE,低速外部时钟)”配置为“Crystal/Ceramic Resonator (晶体/陶瓷谐振器)”,如图2-16的标号③所示。配置完毕后,MCU的“Pinout View(引脚视图)”中相应的引脚功能将被配置,如图216中的标号④和⑤所示。 图 2-16 配置 HSE 和 LSE 时钟源 切换到“Clock Configuration(时钟配置)”标签,进行STM32微控制器的时钟树配 置,如图2-17所示。图中各个标号的含义如下:标号①:“PLL Source MUX(锁相环时钟源选择器)”的时钟源选择为“HSE”,即:8MHz 外部晶体谐振器;标号②:“PLLMul(锁相环倍频)”配置为“9”; 标号③:“System Clock MUX(系统时钟选择器)”的时钟源选择为“PLL”;标号④:配置“SYSCLK(系统时钟)”为72MHz;标号⑤:配置“HCLK(高性能总线时钟)”为72MHz; 标号⑥:配置“Cortex System timer(Cortex内核系统嘀嗒定时器)”的时钟源为HCLK 的八分之一,即:9MHz;标号⑦:配置“APB1 Peripheral clocks(低速外设总线时钟)”为HCLK的二分频, 即:36MHz。标号⑧:配置“APB2 Peripheral clocks(高速外设总线时钟)”为HCLK的一分频,即:72MHz。 图 2-17 配置 STM32 微控制器的时钟树 (6)保存STM32CubeMX工程点击“File(文件)”菜单,选择“Save Project(保存工程)”选项,如图2-18中标号①和标号②所示。然后定位到文件夹“D:STM32_WorkSpacetask1_ProjectFirst”,点击“确定”保存STM32CubeMX工程。 图 2-18 保存 STM32Cube 工程 (6)生成C代码初始工程切换到“Project Manager(工程管理)”标签,进行“C代码工程”的配置,如图2-19 所示。 图 2-19 代码生成的相关配置 点击左侧“Code Generator(代码生成)”配置标签,将“STM32Cube Firmware Library Package”单选框的选项改为“Copy only the necessary library files”,如图2-19 中的标号①所示。 在“Generated files”复选框中增加勾选“Generate peripheral initialization as a pair of “.c/.h” files per peripheral”选项。如图2-19中标号②所示。 点击左侧的“Project(工程)”配置标签进行“C代码工程”保存的相关配置。由于之前已保存过STM32CubeMX的工程,因此“Project Name(工程名)”和“Project Location (工程存放位置)”处的信息已填好(分别如图2-20的标号①和标号②处所示)。 图 2-20 工程保存相关配置 点击图2-20中的“Toolchain/IDE”下拉菜单(图2-20中标号③处),选择集成开发环境为“MDK-ARM V5”。 最后点击“GENERATE CODE(生成代码)”按钮(图2-20中标号④处),即可生成相应的 C代码工程。 5. 完善main()函数 生成的C代码工程位于工程文件夹中的“MDK-ARM”中,如图2-21中的标号①处所示。 双击工程文件(图2-21中标号②处),使用MDK-ARM工具打开。 图 2-21 打开 MDK-ARM 工程 打开后的工程如图2-22所示,展开左侧的“工程列表”窗口,打开“main.c”文件(图 2-22的标号①处),在while(1)代码段中添加标号②处所示的两行代码。 图 2-22 为主函数添加代码 5. C代码工程配置 点击快捷工具栏中的 图标进行C代码工程的配置(图2-23中标号①处)。 切换到“Debug”标签(图2-23中标号②处),选择相应的调试工具,如:ST-Link Debugger (图2-23中标号③处)。 图 2-23 调试工具的选择 点击图2-23中的“Settings”按钮(标号④处)进入“调试与下载配置”界面,将调试 工具端口改为“SW”,如图2-24子图(a)中标号①处所示。如果STM32微控制器连接正常,则会在右上角的“SW Device”窗口看到已连接的设备(图2-24子图(a)中标号②处)。 点击“Flash Download”标签切换到“下载配置”界面(图2-24子图(b)中的标号③ 处),勾选“Reset and Run”选项(图2-24子图(b)中的标号④处)。经过这样的配置以后,程序下载到STM32开发板后会自动重启并运行。 图 2-24 调试工具端口选择与下载配置 6. 编译工程、下载并运行 M3主控模块上的开关拨为NC位置(方向朝下),如图2-25所示。 工程编写完毕后,可点击工具栏中的“Build(F7)”按钮进行工程的编译。编译无误后,点击工具栏中的“DownLoad(F8)”按钮进行工程的下载并运行。如图2-26中的标号①和标号②处所示。 图 2-26 工程的编译下载并运行 本工程运行的现象是LED2闪烁,亮1秒灭1秒,周期为2秒。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1959 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1740 浏览 1 评论
1212 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
803 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1766 浏览 2 评论
2010浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
862浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
304浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
654浏览 3评论
654浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-13 22:23 , Processed in 0.701296 second(s), Total 45, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191