本帖最后由 聪聪哥哥 于 2025-8-5 20:57 编辑
我这边经常使用keil对arm架构的单片机进行开发,本次活动我也是使用该开发软件。对于STM32u385RG的底层驱动部分,我使用STM32cube MX软件进行配置,也是非常方便的,而且熟练的掌握HAL库的操作,开发软件很方便。
一:keil5 mdk的下载网址如下:
https://www.keil.com/download/product/
我们可以根据自己的需求进行下载:
在弹出的兑换框内需要填写一些个人信息,这里不需要管,随便填写一下,提交就好了。
这里我们随便填写以下信息就可以,然后再弹出的界面,直接下载keil5的安装包就可以,现在目前最新的版本是5.42a,但是我电脑上面安装的程序版本是5.38a,也是不影响使用的,这里没有选择最高版本的原因是,高版本安装支持包的时候会有问题,而且编译器的太高了,对我之前的程序编译有问题,这里也没做升级。
二:STM32cube Mx软件的安装过程 STM32CubeMX作为一种图形化工具,可以用于配置任何STM32器件。这款简单易用的图形用户界面为Cortex-M内核生成初始化C代码,并为Cortex-A内核生成Linux器件树。 第一步包括选择与所需外设集匹配的意法半导体STM32微控制器、微处理器或开发平台,同时包括在特定开发平台上运行的示例。 对于微处理器,第二步允许配置GPIO和设置整个系统的时钟,并交互地将外设分配给Arm® Cortex®-M或Cortex®-A内核。特定实用工具(如DDR配置和微调)增强了STM32微处理器的易用性。对于Cortex®-M内核,配置包含了额外步骤,与微控制器的十分相似。 对于微控制器和微处理器Arm® Cortex®-M,第二步为通过引脚分配冲突处理器、时钟树设置助手、功耗计算器,以及用于配置外设(如GPIO或USART)和中间件栈(如USB或TCP/IP)的实用工具来配置各个必需的嵌入式软件。 借助增强型STM32Cube扩展包,可扩展默认软件和中间件栈。可直接通过STM32CubeMX中可用的专用包管理器,直接下载意法半导体或意法半导体合作伙伴提供的软件包,其他软件包可以从本地驱动器进行安装。 此外,STM32CubeMX中的独特实用程序STM32PackCreator可帮助开发人员构建自己的增强型STM32Cube扩展包。 最终,用户可以生成与所选配置匹配的软件包。这一步提供Arm® Cortex®-M初始化C代码(可随时用于多个开发环境),或面向Arm® Cortex®-A的部分Linux®设备树。 STM32CubeMX在STM32Cube中交付。 我们需要再STM32 的生态社区下载软件
三:STM32CubeProgrammer 软件的使用 STM32CubeProgrammer (STM32CubeProg) 是一款用于编程STM32产品的全功能多操作系统软件工具 它提供了一个易用高效的环境,通过调试接口(JTAG和SWD)和自举程序接口(UART、USB DFU、I2C、SPI和CAN)读取、写入及验证器件内存。 STM32CubeProgrammer的功能广泛,可以对STM32内部存储器(如Flash、RAM和OTP)以及外部存储器进行编程。 STM32CubeProgrammer还允许选择编程和上传、编程内容验证以及通过脚本自动编程。 STM32CubeProgrammer提供了GUI(图形用户界面)和CLI(命令行界面)版本。
我们可以升级一下,开发板板载的调试器,然后设置一下MCO输出的工作频率,为U385提供外部晶振的时钟来源。同时升级过后,也可以在ST-link虚拟的U盘中,直接打开开发板U385的资料,也是很方便的。四:初建项目工程;
任务:建立开发环境,(最好有版本管理控制)。成果展示:以视频或gif动图的方式展示您的LED闪烁结果;
4.1 打开 STM32cube MX 配置软件(不用的时候记得更新)
4.2 选择 STM32u385RG 芯片,直接选择带开发板的就可以
4.3 首先配置芯片的调试功能,然后配置时钟树就可以,
这里为了将芯片的工作频率配置成成96Mhz,所以配置的时钟来源为MSIS时钟,(第一次使用该时钟,目前还不太了解)。
4.4 配置定时器6为系统的时基基准
这里只需要配置好预分频系数和重装值就可以,然后使能定时器6的中断。为了方便查看效果,定时器中断时间为100MS一次。
4.5 查看板载LED灯使用的引脚
可以看到 使用PA5引脚,这里ST的开发基本上都是使用PA5引脚,作为LED的引脚。
直接生成代码功能就可以。
五:软件代码如下:
5.1 定时器的初始化:
- void MX_TIM6_Init(void)
- {
- /* USER CODE BEGIN TIM6_Init 0 */
- /* USER CODE END TIM6_Init 0 */
- TIM_MasterConfigTypeDef sMasterConfig = {0};
- /* USER CODE BEGIN TIM6_Init 1 */
- /* USER CODE END TIM6_Init 1 */
- htim6.Instance = TIM6;
- htim6.Init.Prescaler = 9499;
- htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim6.Init.Period = 999;
- htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
- if (HAL_TIM_Base_Init(&htim6) != HAL_OK)
- {
- Error_Handler();
- }
- sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
- sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
- if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN TIM6_Init 2 */
- HAL_TIM_Base_Start_IT(&htim6);
- /* USER CODE END TIM6_Init 2 */
- }
在官方的初始化完成函数中,调用开启定时器6中断功能即可。
5.2 定时器回调函数编写- void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
- {
- /* USER CODE BEGIN Callback 0 */
- /* USER CODE END Callback 0 */
- /* USER CODE BEGIN Callback 1 */
- if (htim->Instance == TIM6)
- {
- HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
- }
- }
六:试验现象:
七:工程测试代码:
01LED.zip
(6.66 MB, 下载次数: 1)
至此,使用定时器6完成LED灯闪烁的功能完成。
|