STM32
直播中

贾虎世

7年用户 1680经验值
私信 关注
[问答]

教你怎样去使用STM32CubeMX软件呢

STM32CubeMX软件该如何去安装呢?
怎样去使用STM32CubeMX软件呢?

回帖(1)

冯超

2021-11-18 11:21:33
  STM32CubeMX是ST官方开发的一款很好用的软件,主要用于STM32系列单片机的硬件驱动层的配置。网上也有一些关于STM32CubeMX的相关教程,对它的相关操作进行说明。
  从今天起,小柯希望能将自己从CubeMX入门STM32 HAL库的学习笔记分享给大家,与大家一起探索其中的奥秘~
  1. 下载安装STM32CubeMX
  对于STM32CubeMX(以下简称CubeMX)的安装与使用方法,小柯发现,知乎上有一位朋友有比较全面的讲述。在此,小柯也将链接分享给大家,希望对大家有用!同时,ST官网上也提供了免费的最新版CubeMX,只要注册一个账号即可下载。
  2. 实验准备
  STM32F103C8T6最小系统板 x 1
  ST-Link x 1
  STM32CubeMX
  3. 创建工程
  今天,小柯选用了比较便宜且普遍使用的STM32F103C8T6。这款单片机最小系统板的在某宝上大约十几元,非常适合用来入门和玩耍。
  其实CubeMX对不同型号的单片机的硬件驱动层配置大同小异,学习了一个型号之后,很容易在其他型号举一反三。这也是小柯喜欢CubeMX的原因之一。
  3.1 打开CubeMX
  打开CubeMX,你会看到以下界面。点击箭头所示按钮,开始创建。
  
  3.2 选择单片机
  点击之后,CubeMX会跳出单片机选择界面。按如下三步选择自己想要的单片机型号,既可开始工程。
  注:如果是第一次使用某一型号,需要下载对应的固件库。只要按照提示确认下载即可。
  
  然后我们就进入配置的主页啦!
  4. 调试方式选择
  首先,我们要对系统调试方式进行配置。
  在这个实验中,我们选用了ST-Link作为调试工具。所以,我们需要在 “System Core --》 SYS --》 Debug” 栏中选择 “Serial Wire (串行)” 的调试方式。
  
  注:如果左侧的菜单栏是按照字符排序,则有可能没有 System Core 菜单。对此,我们只要直接找到 SYS 选项就可以了。
  选择之后,右侧芯片上的 PA13 和 PA14 引脚会变成绿色,这就是我们 ST-Link 需要接的引脚。
  5. 时钟配置
  对于单片机系统来说,最主要的就是时钟配置。好在STM32系列的单片机基本上都有内部时钟,即使我们保持复位值,系统也可以正常运行。
  不过,一般单片机的内部时钟源精度不是特别高。如果对时钟精度要求高的话,那就需要用到外部晶振。在此,STM32提供了有源晶振和无源晶振两种时钟源的接入方式。
  由于在此实验中,我们并没有对时钟精度的需求,所以小柯就保持了其原有的配置。对于单片机时钟配置的方法,小柯也会在后续笔记中跟进,敬请关注。
  6. 项目管理
  CubeMX的 “Project Manager” 栏目提供了详细的项目配置。
  小柯选用 Keil MDK-ARM 作为编译器,故做了如下配置。
  
  同时,CubeMX还提供了一些代码生成的选项。小柯根据个人习惯,也对它进行了调整。
  
  至此,项目配置就完成了!
  7. 引脚配置
  让单片机驱动一个 LED 灯,并使他周期性闪烁,可以算作是单片机领域的 “Hello World” 工程了。在此,小柯需要利用已经接在 PC13 引脚的 LED 进行显示。如果核心板上没有相应 LED, 可以自己外接一个。
  配置引脚时,我们只要选中 PC13 引脚,选择 “GPIO_Output” 模式即可。为了方便后续操作,小柯给 PC13 引脚自定义一个标签 “LED”。
  
  
  8. 生成代码
  最后,只要点击窗口右上方的 “GENERATE CODE” 就可以生成代码了。
  如果是第一次使用,此过程可能需要下载固件
  
  生成完成后,点击 “Open Project”,即可自动打开 Keil。
  
  9. 编辑小灯代码
  网上有很多关于小灯闪烁的代码,但都大同小异。主要就是在 main 函数的 while(1) 循环中反转引脚并延时。若要以此方式实现,我们只需要找到 main.c 文件 main 函数中的 while(1) 循环,根据代码提示,在 /* USER CODE BEGIN 3 /和/ USER CODE END 3 */中间插入如下代码即可。
  HAL_Delay(500); //延时500ms
  HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); //对LED所对应引脚输出反转
  
  不过这种方式并不能一劳永逸。当插入其他代码后,小灯的闪烁频率就不再是 1Hz 了。
  为此,小柯找到了系统定时器中断的回调函数 SysTick_Handler(),在 “stm32f1xx_it.c” 的最后部分。
  在默认配置中,SysTick_Handler() 函数将每1ms被调用一次。我们对其做如下改变,就能实现小灯 1Hz的闪烁了。
  我们先删除上面在 main 函数中写的两行代码,然后在中断回调函数中加入如下代码:
  /* USER CODE BEGIN SysTick_IRQn 0 */
  millis++;
  if(millis % 500 == 0)
  HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
  /* USER CODE END SysTick_IRQn 0 */
  其中 millis 表示 milliseconds, 即千分之一秒。
  为了能在全局都可以用 millis 变量,我们可以分别在 “main.c” 和 “main.h” 中定义和声明该变量。
  由于没有在 main.h 文件中找到相应的声明变量的位置,于是借用了声明常数的位置。
  //以下代码在main.c文件中
  /* Private variables ---------------------------------------------------------*/
  /* USER CODE BEGIN PV */
  uint32_t millis = 0; //milliseconds -- 千分之一秒
  /* USER CODE END PV */
  //以下代码在main.h中
  /* Exported constants --------------------------------------------------------*/
  /* USER CODE BEGIN EC */
  extern uint32_t millis; //milliseconds -- 千分之一秒
  /* USER CODE END EC */
  10. 配置下载方式
  点击 Keil 窗口顶部的 “Options for Target” 图标,进入配置界面。
  
  选择 “Debug” 标签,选择用 ST-Link Debugger 调试。
  
  并点击 Setting, 在 Flash Download 栏中勾选 “Reset and Run”,使单片机在烧录后自动重置运行。
  
  11. 烧录验证
  将单片机的 PA13 与 PA14 引脚分别与 ST-Link 的 SWDIO 和 SWCLK 相连,并为单片机供电。依次点击 “Build” 和 “Download” 按钮进行烧录。
  烧录之后,单片机自动运行,小灯开始以 1Hz 的频率开始闪烁。
  STM32 HAL库学习笔记 - 从CubeMX创建工程 - 小灯闪烁 - 16
  12. 注意事项
  在编写小灯闪烁代码中,介绍了两种方式,请不要同时使用。
  在编辑所有由CubeMX生成的文件时,必须在其规定的位置添加用户代码。否则重新生成项目时,那些代码将被复原。为防止被复原,可以在 CubeMX 的 “Project Manager --》 Code Generator” 中勾选 “Backup previously generated files when re-generating.” 如果是自己创建的文件,则不需要遵循该规则。
  单片机的两个 BOOT 引脚必须接地。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分