实验任务:
一. 了解并掌握STM32中断原理,HAL库函数开发方法。安装 stm32CubeMX,配合Keil,使用HAL库方式完成下列任务:
1、重做上一个LED流水灯作业,即用GPIO端口完成3只LED红绿灯的周期闪烁。
2、用stm32F103核心板的GPIOA端某一管脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED流水灯工作;
接低电平时,LED流水灯停止工作。
二. 在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。
请用此功能观察第1题中3个GPIO端口流水灯的输出波形,并分析时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。
STM32CubeMX生成代码使用HAL库点亮流水灯
1.安装STM32CubeMX
官网下载STM32CubeMX - STM32Cube initialization code generator - STMicroelectronics
1.1解压安装包后以管理员身份运行
1.2点击Next
1.3勾选"I accept the terms of this license agreement",接着点击Next
1.4勾选“I have read and underrstood...”,并点击Next
1.5选择安装路径
1.6点击确定
1.7选择Next后等待安装完成,点击Done退出
2.安装HAL库
2.1在Help中选择Manage embedded software packages,并选择需要的单片机HAL库
2.2点击Install安装(需要登陆账号)
3.新建项目
3.1点击ACCESS TO MCU SELECTOR
3.2选择STM32F103C8T6,点击信息栏中的具体芯片信息,点击start project
.3.3点击system core,选择SYS,在Debug中选择serial wire
3.4选择RCC,点击Clock Configuration,选择PLLCLK
3.5修改High Speed Clock(HSE)为Crystal/Ceramic Resonator
3.6 选择GPIO,并选择需要的引脚输出
选择GPIO_Output设置输出寄存器
3.7设置PA0、PA1、PA2
3.8点击project manager,配置好路径和项目,在IDE那项改为MDK-ARM
3.9进入 code generate界面,选择生成初始化.c/.h文件,点击generate code,选择open project
3.10生成成功
4.Keil5仿真
4.1打开.uvprojx文件
4.2选择main.c文件
修改代码如下:
SystemClock_Config();//系统时钟初始化
MX_GPIO_Init();//gpio初始化
while (1)
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
HAL_Delay(1000);//延时1s
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
HAL_Delay(1000);//延时1s
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
HAL_Delay(1000);//延时1s
}
4.3电路连接
STM32F103C8与USB转TTL线连接
STM32F103开发板 | USB转TTL线 |
GND | GND |
PA9 | RXD |
PA10 | TXD |
3V3 | 3V3 |
LED的电路连接
LED-RED | LED-YELLOW | LED-GREEN |
电源正极 | 电源正极 | 电源正极 |
PA0 | PA1 | PA2 |
4.4运行
LED_HEL
4.5观察GPIO端口的输出波形
(1)选择晶振
(2)修改Debug设置
(3)点击进入Debug界面
(4)选择逻辑分析仪并设置观察引脚
(5)点击运行
(6)波形观察
高低电平转换周期(LED闪烁周期)为1s左右。
stm32外部中断模式控制灯亮灭
1.新建项目
1.1点击ACCESS TO MCU SELECTOR
1.2选择STM32F103C8T6,点击信息栏中的具体芯片信息,点击start project
1.3点击system core,选择SYS,在Debug中选择serial wire
1.4修改High Speed Clock(HSE)为Crystal/Ceramic Resonator
1.5选择GPIO,并选择需要的引脚输出
选择 LED 灯引脚 PA6,设置引脚为输出模式 GPIO_Output;
选择作为外部中断的引脚 PB14,设置为与中断线 GPIO_EXTI14 连接
设置PB14下沿触发
设置NVIC
1.5点击project manager,配置好路径和项目,在IDE那项改为MDK-ARM
1.6生成成功
2.Keil5仿真
2.1打开.uvprojx文件
2.2选择main.c文件
编写外部中断函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if( GPIO_Pin == EX_Pin ) // 判断外部中断源
{
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); // 翻转LED状态
}
}
2.3电路连接
STM32F103C8与USB转TTL线连接:同上
LED的电路连接:
2.4运行
LED-HEL2