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 引脚必须接地。
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 引脚必须接地。
举报