你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32CubeIDE快速开发流程经验分享

[复制链接]
攻城狮Melo 发布时间:2023-4-7 14:39
一、cubeIDE下载、安装
        STM32CubeIDE是STM32Cube软件生态系统的一部分,是面向st芯片的高级C/C++开发平台,具有STM32微控制器和微处理器的外设配置、代码生成、代码编译和调试功能。它基于Eclipse®/CDT™框架和用于开发的GCC工具链,以及用于调试的GDB。它支持集成数以百计的现有插件,正是这些插件使Eclipse® IDE的功能趋于完整。STM32CubeIDE集成了STM32CubeMX的STM32配置与项目创建功能,在通过所选板卡或示例选择一个空的STM32 MCU或MPU,或者预配置微控制器或微处理器之后,将创建项目并生成初始化代码。在开发过程的任何时间,用户均可返回外设或中间件的初始化和配置阶段,并重新生成初始化代码,期间不会影响用户代码。

c4f0ba8449fa419ea0bf844015a11677.png   

下载完stmcubeIDE后,双击安装包完成安装:

4dd81e8f69bf405aa6bb393b1233136b.png

安装完成后,去help->install new software配置安装汉化包

fd2da482167648da9b61cafc5a435de7.png

选择简体中文完成在线安装

f5e4f5a7fa4444ec8300f4fdec9c5a67.png

二、创建工程及配置芯片引脚
        汉化完后,重启软件,在文件->新建工程->stm32 project,输入自有芯片型号,本文是STM32L496VGTx

31f75739597244c9a4c28b7571347b04.png

点击下一步,输入工程名,选择工程路径,完成工程创建

5516bbb2d9434da9be5c855494ba70f2.png

         工程完成创建后,直接弹出cubeMX配置界面,可以图形化配置芯片引脚接口

        开启USB串口能力

6f0570e5f95b420fa865330947d8c708.png

         本文仅开始外部高速时钟(HSE)

73d612e17d7a4f0898a188f8d793ad4c.png

         系统时钟频率直接拉满到80MHz

563c5200977f40798d2c981301d8a3ec.png

         为了简单测试工程,仅仅配置三个按键及三个LED灯的GPIO

11d7ba975a014eb7a563d695571eae54.png

         工程管理,保持默认设置,

562df507c9874f41a35825e23699ffbc.png

         代码生产页面,只按需生成,为每个接口类型生成独立头文件及源码文件

3103dc753c66489cb9be69e7bb5d2fd4.png

         高级设置页面,保持设置,1)本**PIO选择HAL库实现,也可以点击选择LL库,2)GPIO初始化调用直接生成(main.c中实现),也可在Do Not Generate Call勾选去掉,也可以去掉Visibility(Static)选项,不生成GPIO初始化函数

1bb8d8f7d59a4c959f410425ec916bd7.png

         点击菜单栏保存或代码生产按钮,实现cubeMX配置到源码生成

6f3a90fcb455448b91429df83dbb01aa.png

代码生成后,GPIO接口映射信息配置在main.h中

45238402b5194957a52cb9eccafab3cd.png

         生成GPIO接口源码为gpoi.h/c,仅仅提供了GPIO初始化函数,实现时调用HAL库函数来实现的。

2d1ff9c9aa1f4adf94657d7b7f90f5cd.png

        先创建自己的按键及LED驱动,该驱动同样是基于HAL库提供的函数实现,而HAL库和底层硬件打交道,间接帮我们实现对硬件读写控制等能力。


三、编码及编译
        在工程目录右键->新建->source Folder创建一个源目录,并添加key.h/c、led.h/c四个源文件

79db70cd289b491690acb7ed03902d95.png

         key.h
  1. /*
  2. * key.h
  3. *
  4. *  Created on: Sep 29, 2022
  5. *      Author: py_hp
  6. */

  7. #ifndef KEY_H_
  8. #define KEY_H_

  9. #include "main.h"
  10. #include "gpio.h"

  11. GPIO_PinState get_key0_val();
  12. GPIO_PinState get_key1_val();
  13. GPIO_PinState get_key2_val();

  14. #endif /* KEY_H_ */
复制代码

key.c
  1. /*
  2. * key.c
  3. *
  4. *  Created on: Sep 29, 2022
  5. *      Author: py_hp
  6. */
  7. #include "key.h"

  8. GPIO_PinState get_key0_val()
  9. {
  10.         return HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin);
  11. };

  12. GPIO_PinState get_key1_val()
  13. {
  14.         return HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin);
  15. };

  16. GPIO_PinState get_key2_val()
  17. {
  18.         return HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin);
  19. };
复制代码


led.h
  1. /*
  2. * led.h
  3. *
  4. *  Created on: Sep 29, 2022
  5. *      Author: py_hp
  6. */

  7. #ifndef LED_H_
  8. #define LED_H_
  9. #include "main.h"
  10. #include "gpio.h"

  11. void Toggle_led0();
  12. void Toggle_led1();
  13. void Toggle_led2();

  14. void set_led0_val(GPIO_PinState PinState);
  15. void set_led1_val(GPIO_PinState PinState);
  16. void set_led2_val(GPIO_PinState PinState);

  17. #endif /* LED_H_ */
复制代码

led.c
  1. /*
  2. * led.c
  3. *
  4. *  Created on: Sep 29, 2022
  5. *      Author: py_hp
  6. */
  7. #include "led.h"

  8. void Toggle_led0()
  9. {
  10.         HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);
  11. }

  12. void Toggle_led1()
  13. {
  14.         HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
  15. }

  16. void Toggle_led2()
  17. {
  18.         HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
  19. }

  20. void set_led0_val(GPIO_PinState PinState)
  21. {
  22.         HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,PinState);
  23. };

  24. void set_led1_val(GPIO_PinState PinState)
  25. {
  26.         HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,PinState);
  27. };

  28. void set_led2_val(GPIO_PinState PinState)
  29. {
  30.         HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,PinState);
  31. };
复制代码

        在main.c加入key和led实现,在代码预留用户自行区域加入自主编写代码,这样cubeMX改动后再次生产代码不会修改抹去自己已经写入或修改的代码

        添加头文件

8761282e3c5a47228b95dfc8bb19e60b.png

         添加函数调用实现,可自行斟酌调用

ec76797598bf425ebdccd8c6eefe3cd6.png

          右键点击项目,进入属性页面(也可以直接菜单进入),勾选本项目编译程序输出文件格式支持

37fc1ae9d2a74b60ad7a608342cf7195.png

         点击编译按钮完成编译

ef6f05b27c524b0096f4f66378b2a963.png


四、加载已编译程序到硬件及测试
        点击help->ST-Link更新,运行配置更新,便于直接将编译好的软件下载的硬件上。

03d2f645130642a888a7d5e9acec7c91.png

        点击运行工具按钮的运行配置,进入配置页面,在STM32 C/C++ Application新建调试配置,每个项目仅配置一次,后面就可以直接点击运行按钮加载编译好的软件到硬件,

ea188220de4d4ed29e1951d485731ea9.png

5a25da299d8e4c92826f620cf30bafe0.png

        将电脑与硬件用数据线连接,点击运行下载程序

4ce304e2ee5f469ca23b922e33ebd259.png

         或者采用其他下载工具,如STM32 ST-LINK Utility加载

8e6b4813a59849e6937a4b00119d0e11.png

五、程序运行效果
        展示效果如下:
  1.    Toggle_led2();//闪灯
  2.           set_led0_val(get_key0_val());//按键亮灯
  3.           HAL_Delay(100);
复制代码

        【1】闪灯

23e5ea2f47a6412aa7db675750266d84.png

         【2】按键亮灯

2efd57ebd5f9409f8c7630dfe3b75e91.png

————————————————
版权声明:py_free-物联智能
如有侵权请联系删除



收藏 评论0 发布时间:2023-4-7 14:39

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版