目录
一、相关环境
STM32CubeMX
介绍
安装下载
相关配置完善
尝试使用该软件,点亮LED灯
项目创建
代码示例
二、任务实现
1、使用HAL库方式完成LED灯的周期闪烁
要求1
项目创建
代码示例
要求2
项目创建
代码示例
2、使用仿真软件分析仪功能观察时序波形
项目创建
结果
代码示例(同上,也可在上面粘贴)
总结
学习目标:
一. 使用HAL库方式完成LED灯的周期闪烁;
二. 使用仿真软件分析仪功能观察时序波形。
一、相关环境
STM32CubeMX
介绍
STM32CubeMX是STMicroelectronics推出的图形化配置工具,简化了STM32微控制器的初始化和配置过程。其直观的界面和自动生成初始化代码的特点,使开发人员能够轻松配置引脚分配、时钟设置和外设参数。支持多种STM32系列微控制器,包括常用的STM32F系列。集成外设配置功能,包括GPIO、UART、SPI等,同时提供硬件资源冲突检测,帮助开发人员避免潜在问题。总之,STM32CubeMX是一款强大而方便的工具,加速了STM32微控制器应用的开发过程。
安装下载
下载地址:https://www.st.com/en/development-tools/stm32cubemx.html
根据以上地址进入官网,选择合适的版本,
再根据以下步骤进行操作,完成下载安装;
点击应用程序,进入安装:
接下来选择安装位置;
等待上述进度条走完,再点击 "Next";
点击 "Done" 过后,安装成功。
相关配置完善
注意:使用之前要完成用户信息的注册
点击 "Help" ,再选择其目录下的 "Manage ......" ,进入配置界面;
选择 "STM32F1" ,再选择 1.8.5 版本。
下载过后即可完成配置。
尝试使用该软件,点亮LED灯
项目创建
左上角选择 "STM32F103C8T6" ,再选择下面的 "STM32F103C8T6" ,双击选择,即成功创建项目;
在 "Categories" 下选择 "SYS" ,然后在 "Debug" 处选择 "Serial Wrie" ;
再选择上方的 "RCC" ,在高速时钟配置下选择最后一项 "Crysta......." ;
选择Clock Configuration,根据上图所示进行调整配置;
再配置引脚PC13,选择 "GPIO_Output" ;
根据指示选择 "MDK-ARM" ,并且选择 V4 版本;
勾选合适上图所示的部分,完成基本配置。
代码示例
注意:主函数代码中在while函数中添加下列代码
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
//自定义部分
HAL_Delay(500);
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);//电平翻转函数
HAL_Delay(500);
}
/* USER CODE END 3 */
连接开发板,即可点亮。
二、任务实现
1、使用HAL库方式完成LED灯的周期闪烁
要求1
重做上一个LED流水灯作业,用GPIO端口完成2只LED灯的周期闪烁
项目创建
接上述点亮LED灯的 RCC 配置过后,操作如下:
选择PC13,PA15,PB0,设置GPIO_OUTPUT;
并将输出改为高电频模式;
再根据上述操作过后,接上上述点卡亮LED灯的后续操作,将代码同样处理即可。
代码示例
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // 灯1亮
HAL_Delay(1000); // 延时1s
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 灯1灭
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET); // 灯2亮
HAL_Delay(1000); // 延时1s
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET); // 灯2灭
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); // 灯3亮
HAL_Delay(1000); // 延时1s
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); // 灯3灭
要求2
再用GPIO端某一管脚接2个开关(用杜邦线模拟代替)。采用中断模式编程,当2分开关接高电平时,对应的两个LED灯停止工作(即停止周期性闪烁),接低电平时,恢复工作。
项目创建
较上述区别如下:
将0、1调整为下降沿触发
再保存编写代码,和上述操作一致。
代码示例
代码操作较上有区别:在main主函数外加入下述代码。
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
switch(GPIO_Pin){
case GPIO_PIN_0:
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET)
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
break;
case GPIO_PIN_1:
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1) == GPIO_PIN_RESET)
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
break;
}
}
2、使用仿真软件分析仪功能观察时序波形
具体要求:
在没有示波器条件下,使用Keil的软件仿真逻辑分析仪功能观察LED管脚的时序波形,分析上面作业按键中断时,LED灯的波形变化情况。
项目创建
接上述要求1过后的操作
保存并打开项目,自动跳转KEIL
将代码放入主函数中的while(1);
照上进行配置;
输入
(PORTB & 0X00000000)>>0
、Display Type
选择Bit
,依次输入(PORTA & 0X00008000)>>15
、(PORTC & 0X00002000)>>13
完成配置后点击Close即可。
最后点击图上的位置,完成观察。
结果
代码示例(同上,也可在上面粘贴)
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // 灯1亮
HAL_Delay(1000); // 延时1s
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 灯1灭
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET); // 灯2亮
HAL_Delay(1000); // 延时1s
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET); // 灯2灭
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); // 灯3亮
HAL_Delay(1000); // 延时1s
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); // 灯3灭
总结
相较于传统的标准外设库(SPL)和汇编语言,使用STM32的硬件抽象层(HAL)库可以带来更简化和高效的开发体验。HAL库提供了简单易用的编程接口,通过高级函数封装了对硬件的直接操作,使得代码更易读、易维护,并具有跨系列的代码兼容性。与此相比,传统方法需要更深的硬件了解、代码复杂度更高,并且在移植性方面存在挑战。因此,对于大部分应用而言,HAL库提供了更便捷、高效的开发路径,尤其是在商业应用中追求开发周期和成本效率的情况下。