完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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 引脚必须接地。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1777 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1080 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1678 浏览 2 评论
1937浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
595浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
553浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 01:01 , Processed in 0.576013 second(s), Total 43, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号