STM32CubeIDE的MCU开发_stm32cubeide免费吗-程序员宅基地

技术标签: stm32  嵌入式开发  mcu  

        以前做stm32嵌入式开发均使用的是破解版的keil软件,现在工作需要无法按照此步骤进行,最近针对ST官方免费软件STM32CubeIDE进行了相关调研工作。

1 STM32CubeIDE简介

        目前主流的STM32开发环境是ARM公司的KEIL软件, 由于KEIL对于STM32大部分型号是收费的, 使用需要破解, 存在版权问题。 并且使用KEIL编译大型工程, 编译太慢了, 编译耗时长。

        STM32CubeIDE是ST公司推出的免费多功能STM32开发工具,采用了行业标准的开放式许可条款,为简化和加快基于STM32的嵌入式设计,新增了STM32专用功能,包括功能强大的STM32CubeMX微控制器配置和项目管理工具。用户能够最大限度地提高产品的功能和性能,缩短研发周期,降低开发成本。

        STM32CubeIDE是一个多操作系统集成开发工具,它是STM32Cube软件生态系统的一部分。STM32CubeIDE具有STM32 MCU和MPU的外设配置、代码生成、代码编译和调试功能,它基于Eclipse/CDT框架和GCC工具链进行开发,GDB进行调试。STM32CubeIDE集成了STM32的配置和项目创建功能,提供了一体化的工具体验,节省安装和开发时间。在开发过程中任何时间,用户都能返回到外设/中间件的初始化和配置,并且在不影响用户代码的情况下生成初始化代码。

2 STM32CubeIDE下载与安装

2.1 STM32CubeIDE下载

        进入意法半导体的官网 STM32CubeIDE - STM32的集成开发环境 - STMicroelectronics,选择最新版本,按照提示下载STM32CubeIDE软件安装包,如下图所示。

图1 官网获取最新安装包

       例如,作者的电脑是windows操作系统,选择了当前最新版本1.6.1 STM32CubeIDE-Win的安装包进行下载。

2.2 STM32CubeIDE安装

        软件下载成功后,解压缩软件安装包,右键.exe文件 —> 以管理员身份运行,注意:安装目录中不允许有中文路径

 图2 管理员身份运行

        弹出的界面,点击Next。

 图3 安装界面

        弹出的界面,点击I Agree。

图4 同意安装

        选择安装路径,点击Next。

图5 选择安装路径

        勾选“SEGGER J-Link drivers”和“ST-LINK drivers”,点击“Install”,等待安装完成。

图6 勾选调试工具

        安装完成,点击Next。

图7 安装完成

        弹出的界面,点击Finish。

图8 Finish

2.3 STM32CubeIDE器件包安装

        双击软件STM32CubeIDE 1.6.1.exe  ,点击help —> Manage Embedded Software Packages 。

图9 安装器件包

        根据项目需要选择安装STM32器件库,例如要使用STM32F1系列和STM32F4系列,勾选最新的器件库,点击Install Now直接安装即可。

图10 STM32F1系列器件包

图11 STM32F4系列器件包

        安装成功后勾选框显示为绿色,查看器件包的安装路径,点击Window —> Preferences 。

图12 查看已器件包路径

        在STM32Cube —> Firmware Updater中可以看到器件库的默认安装路径,此路径也可以自行修改。

图13 器件包默认路径

        查看此路径,可以看到已经安装成功的器件库,项目开发就可以正常使用该系列的STM32芯片。

图14 已安装器件包文件夹

3 STM32CubeIDE的使用

        下面以STM32F407ZGT6型号为例,开发和调试LED闪烁、串口中断回环的功能,介绍STM32CubeIDE软件的基本使用方法。

3.1 资料准备

        STM32F407ZG - 带DSP和FPU的高性能基础系列ARM Cortex-M4 MCU,具有1 MB Flash、168 MHz CPU、ART加速器、以太网和FSMC - STMicroelectronics

《STM32参考手册》,用于查询STM32各类寄存器的使用方法;

《STM32数据手册》(产品规格书),用于查询STM32的物理结构(总线架构、时钟树、管脚功能等);

《板卡原理图》

3.2 搭建工程

        点击File —> New —> STM32 Project 。

图15 新建工程

        弹出的界面,在1中搜索项目使用的STM32芯片型号,点击2处,然后再点击Next。

图16 搜索STM32芯片型号

        设置project名,点击Finish 。

图17 工程命名

        此时弹出与STM32CubeMX相同的图形化外设配置界面,根据本次例程的功能,我们需要配置时钟、IO、串口、中断等功能。

        首先配置时钟管脚, 选择晶振(板卡上配置频率为8MHz的)作为外部高速时钟(HSE),外部低速时钟(LSE)暂时不需要。

图18 配置外部高速时钟HSE

        配置系统管脚,debug用,选择4pin的jtag功能。

图19 配置调试接口

        配置LED IO引脚为输出功能引脚,查看板卡原理图,LED0连接在PF9引脚、LED1连接在PF10引脚,那么分别将PF9和PF10配置为OUTPUT引脚。

图20 配置LED0管脚

图21配置LED1管脚

        修改引脚命名。

图22 修改LED0名

图23 修改LED1名

        配置串口,本次测试使用USART3,配置USART的IO引脚、波特率、中断等参数。

图24 配置串口3管脚

图25 配置串口3中断

        开启USART3的中断功能,由于本次测试仅使用一个串口中断的功能,所以在界面中的中断优先级分组、抢占优先级和子优先级按默认设置即可。

图26 配置串口3中断

        配置时钟树,此处将APB1配置为最高的42MHz,APB2配置为最高的84MHz。

图27 配置时钟树

        STM32F407时钟树,HSE(高速外部时钟信号)、LSE(低速外部时钟信号)、HSI(高速内部时钟信号)、LSI(低速内部时钟信号)。

图28 STM32F4时钟树结构

        工程设置,先查看工程名和路径,再选择生成的Code格式。

图29 确认工程名和路径

图30 勾选生成的code特征

        保存.ioc文件,生成project code模板。

图31 生成code

        可以看到生成的工程文件夹结构。

图32 生成的project结构

3.3 用户程序编写

        用户程序的编写只能在注释有“USER CODE BEGIN”与“USER CODE END”之间进行,防止修改.ioc文件后重新生成project code时将已经编写的用户程序覆盖掉。

图33 用户程序编写区域

3.4 编译、调试

        工程编译。

图34 工程编译

        设置调试工具。

图35 调试工具设置

        选中当前工程,设置调试器,本次测试使用JLINK进行调试,因此调试探头选中SEGGER J-LINK,接口选中JTAG接口,调试初始速度默认为4000kHz。

图36 选择jlink

        1表示下载程序(.elf文件),2表示Debug程序。

图37 下载与调试

        下载程序成功。

图38 程序下载

        Debug程序成功,程序运行暂停在main函数内的第一条语句。

图39 程序debug

        全速运行程序后,从板卡上可以看到led0(红色)开始闪烁/led1(绿色)常亮,这是因为我们在STM32CubeIDE的.ioc中配置了这两个IO(默认低电平,低电平常亮),但是应用程序中只针对led0做了翻转功能,所以现象就是红灯闪烁、绿灯常亮。

图40 LED0灭、LED1亮

图41 LED0亮、LED1亮

图42 STM32CubeMX中GPIO的默认状态

        测试串口中断回环功能。

图43 串口中断回环测试

5 STM32CubeIDE软件使用遇到的问题记录

5.1 设置tab键与空格键的关系(tab == 4 spaces)

  1. Window ——> Preferences
  2. General ——> Editors ——> Text Editors
    1. 选中"Insert spaces for tabs"
    2. 选中"Show whitespace characters(configure visibility)"
      1. 在(configure visibility)中可以根据使用习惯显示or不显示space/enter等
  3. C/C++ ——> Code Style ——> Formatter
    1. 点击"Formatter"页面中的"New..."新建格式
    2. 在"Profile name"中输入"spaces_4_tab"
    3. 点击"OK"
    4. 在弹出的Profile 'spaces_4_tab'页面中,在"Tab policy”中将"Tabs only"改为"Spaces only"
    5. 点击"Apply" ——> "OK"
  4.  点击"Apply” ——> "Apply and Close"
  5. 可以在.c和.h文件中使用Tab键进行4个spaces的快捷操作

5.2 STM32CubeIDE在无联网的情况下加载设置MCU Packages

  1. Help ——> Manage Embedded Software Packages
  2. 点击"From Local..."
  3. 此时需要提前准备好在官网下载的STM32系列的配置包
    1. 网页上搜索"STM32Cube MCU & MPU Packages - Products"
    2. 进入ST官网配置包页面后,选择"Product selector",下载需要的MCU配置包
    3. 这里以STM32CubeF1为例
    4. 下载Patch_CubeF1和STM32CubeF1,实际加载使用的为STM32CubeF1,从官网上看到当前下载的STM32CubeF1版本为1.8.0
  4. 选中刚刚准备好的STM32CubeF1包,注意该包的版本为1.8.0,等待软件加载配置包
  5. 加载完成后可在Embedded Software Packages Manager页面的STM32F1下看到安装的配置包及其版本

5.3 报错“The Firmware Package (STM32Cube FW_F1 V1.8.5) or one of its dependencies required by the Project is not available in your STM32CubeMX Repository”

  1. 方法1
    1. 在.ioc中,找到ProjectManager下的Project,可以看到Frimware Package Name and Version默认按照最新的版本(当前最新的版本为"STM32Cube_FW_F1 V1.8.5")进行使用,此处将"Use latest available"取消,同时将"STM32Cube_FW_F1 V1.8.5调整为STM32Cube_FW_F1 V1.8.0"即可正常
  2. 方法2
    1. 新建STM32工程时,输入完Project Name之后,注意不要点击"Finish",点击"Next"
    2. 这里会进入Firmware Library Package Setup页面,这里可以进行配置包的选择,默认为最新的"V1.8.5",手动切换为"V1.8.0"后,点击"Finish"即可

5.4 需要使用.hex文件或.bin文件进行单独烧写

        STM32CubeIDE软件默认编译后不会生成.hex或者.bin文件,需要对软件进行设置

  1. Project ——> Properties
  2. C/C++ Build ——> Settings
  3. MCU Post build output ——> 选中"Convert to binary file (-O binary)"和"Convert to Intel Hex filr (-O ihex)" ——> Apply ——> Apply and Close
  4. 重新编译,可以在工程路径的Debug文件夹中找到对应的bin文件和hex文件

6 STM32CubeIDE使用小结

  1. 使用STM32CubeMX的图形化界面生成和修改底层驱动,可操作性更强、入门难度更小、开发效率更高,我们只需要将重心放在应用程序的开发上即可;
  2. STM32CubeIDE软件是免费软件,无需破解,程序运行大小不受影响,对于我们进行STM32嵌入式开发的成本更低。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_22324309/article/details/120024616

智能推荐

【史上最易懂】马尔科夫链-蒙特卡洛方法:基于马尔科夫链的采样方法,从概率分布中随机抽取样本,从而得到分布的近似_马尔科夫链期望怎么求-程序员宅基地

文章浏览阅读1.3k次,点赞40次,收藏19次。虽然你不能直接计算每个房间的人数,但通过马尔科夫链的蒙特卡洛方法,你可以从任意状态(房间)开始采样,并最终收敛到目标分布(人数分布)。然后,根据一个规则(假设转移概率是基于房间的人数,人数较多的房间具有较高的转移概率),你随机选择一个相邻的房间作为下一个状态。比如在巨大城堡,里面有很多房间,找到每个房间里的人数分布情况(每个房间被访问的次数),但是你不能一次进入所有的房间并计数。但是,当你重复这个过程很多次时,你会发现你更有可能停留在人数更多的房间,而在人数较少的房间停留的次数较少。_马尔科夫链期望怎么求

linux以root登陆命令,su命令和sudo命令,以及限制root用户登录-程序员宅基地

文章浏览阅读3.9k次。一、su命令su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。命令su的格式为:su [-] username1、后面可以跟 ‘-‘ 也可以不跟,普通用户su不加username时就是切换到root用户,当然root用户同样可以su到普通用户。 ‘-‘ 这个字符的作用是,加上后会初始化当前用户的各种环境变量。下面看下加‘-’和不加‘-’的区别:root用户切换到普通..._限制su root登陆

精通VC与Matlab联合编程(六)_精通vc和matlab联合编程 六-程序员宅基地

文章浏览阅读1.2k次。精通VC与Matlab联合编程(六)作者:邓科下载源代码浅析VC与MATLAB联合编程浅析VC与MATLAB联合编程浅析VC与MATLAB联合编程浅析VC与MATLAB联合编程浅析VC与MATLAB联合编程  Matlab C/C++函数库是Matlab扩展功能重要的组成部分,包含了大量的用C/C++语言重新编写的Matlab函数,主要包括初等数学函数、线形代数函数、矩阵操作函数、数值计算函数_精通vc和matlab联合编程 六

Asp.Net MVC2中扩展ModelMetadata的DescriptionAttribute。-程序员宅基地

文章浏览阅读128次。在MVC2中默认并没有实现DescriptionAttribute(虽然可以找到这个属性,通过阅读MVC源码,发现并没有实现方法),这很不方便,特别是我们使用EditorForModel的时候,我们需要对字段进行简要的介绍,下面来扩展这个属性。新建类 DescriptionMetadataProvider然后重写DataAnnotationsModelMetadataPro..._asp.net mvc 模型description

领域模型架构 eShopOnWeb项目分析 上-程序员宅基地

文章浏览阅读1.3k次。一.概述  本篇继续探讨web应用架构,讲基于DDD风格下最初的领域模型架构,不同于DDD风格下CQRS架构,二者架构主要区别是领域层的变化。 架构的演变是从领域模型到C..._eshoponweb

Springboot中使用kafka_springboot kafka-程序员宅基地

文章浏览阅读2.6w次,点赞23次,收藏85次。首先说明,本人之前没用过zookeeper、kafka等,尚硅谷十几个小时的教程实在没有耐心看,现在我也不知道分区、副本之类的概念。用kafka只是听说他比RabbitMQ快,我也是昨天晚上刚使用,下文中若有讲错的地方或者我的理解与它的本质有偏差的地方请包涵。此文背景的环境是windows,linux流程也差不多。 官网下载kafka,选择Binary downloads Apache Kafka 解压在D盘下或者什么地方,注意不要放在桌面等绝对路径太长的地方 打开conf_springboot kafka

随便推点

VS2008+水晶报表 发布后可能无法打印的解决办法_水晶报表 不能打印-程序员宅基地

文章浏览阅读1k次。编好水晶报表代码,用的是ActiveX模式,在本机运行,第一次运行提示安装ActiveX控件,安装后,一切正常,能正常打印,但发布到网站那边运行,可能是一闪而过,连提示安装ActiveX控件也没有,甚至相关的功能图标都不能正常显示,再点"打印图标"也是没反应解决方法是: 1.先下载"PrintControl.cab" http://support.businessobjects.c_水晶报表 不能打印

一. UC/OS-Ⅱ简介_ucos-程序员宅基地

文章浏览阅读1.3k次。绝大部分UC/OS-II的源码是用移植性很强的ANSI C写的。也就是说某产品可以只使用很少几个UC/OS-II调用,而另一个产品则使用了几乎所有UC/OS-II的功能,这样可以减少产品中的UC/OS-II所需的存储器空间(RAM和ROM)。UC/OS-II是为嵌入式应用而设计的,这就意味着,只要用户有固化手段(C编译、连接、下载和固化), UC/OS-II可以嵌入到用户的产品中成为产品的一部分。1998年uC/OS-II,目前的版本uC/OS -II V2.61,2.72。1.UC/OS-Ⅱ简介。_ucos

python自动化运维要学什么,python自动化运维项目_运维学python该学些什么-程序员宅基地

文章浏览阅读614次,点赞22次,收藏11次。大家好,本文将围绕python自动化运维需要掌握的技能展开说明,python自动化运维从入门到精通是一个很多人都想弄明白的事情,想搞清楚python自动化运维快速入门 pdf需要先了解以下几个事情。这篇文章主要介绍了一个有趣的事情,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。_运维学python该学些什么

解决IISASP调用XmlHTTP出现msxml3.dll (0x80070005) 拒绝访问的错误-程序员宅基地

文章浏览阅读524次。2019独角兽企业重金招聘Python工程师标准>>> ..._hotfix for msxml 4.0 service pack 2 - kb832414

python和易语言的脚本哪门更实用?_易语言还是python适合辅助-程序员宅基地

文章浏览阅读546次。python和易语言的脚本哪门更实用?_易语言还是python适合辅助

redis watch使用场景_详解redis中的锁以及使用场景-程序员宅基地

文章浏览阅读134次。详解redis中的锁以及使用场景,指令,事务,分布式,命令,时间详解redis中的锁以及使用场景易采站长站,站长之家为您整理了详解redis中的锁以及使用场景的相关内容。分布式锁什么是分布式锁?分布式锁是控制分布式系统之间同步访问共享资源的一种方式。为什么要使用分布式锁?​ 为了保证共享资源的数据一致性。什么场景下使用分布式锁?​ 数据重要且要保证一致性如何实现分布式锁?主要介绍使用redis来实..._redis setnx watch

推荐文章

热门文章

相关标签