了解并掌握STM32中断原理,HAL库函数开发方法
GPIO端口完成3只LED红绿灯的周期闪烁
搭建开发环境
安装jdk
1.由于STM32CubeMX是Java实现的,需要安装jdk环境。
①下载jdk
jdk官网下载链接:https://www.oracle.com/java/technologies/javase-downloads.html
②以管理员身份运行
③按步骤安装即可
安装STM32CubeMX
1.下载地址:[https://www.st.com/en/development-tools/stm32cubemx.html]https://www.st.com/en/development-tools/stm32cubemx.html)
2.安装过程:
①以管理员身份运行并安装 SetupSTM32CubeMX-4.27.0.exe ,进入下面这个界面后,点击Next
②勾选"I accept the terms of this license agreement",接着选择Next
③选择安装位置,默认位置是安装在C盘中
④选择Next
⑤安装完成后,选择Next
⑥点击Done就完成安装
3.安装固件库
①运行CubeMX
②选择 Help->Magne … 安装固件库
③选择STM32F1->1.8.4版本,点击下面Install进行安装(需要注册账号)
CubeMX建项目
1.新建File->Project
2.在part name里选择自己的芯片,点击信息栏中的具体芯片信息选中,点击start project:
3.点击system core,进入SYS,在debug下选择serial wire:
4.配置时钟,进入上面的rcc,有两个时钟,一个是hse和lse,我们要用是GPIO接口,而这些接口都在APB2里:
接下来观察时钟架构,APB2总线的时钟由hse控制,同时在这个界面得把PLLCLK右边选上:
5.将hse那里设为Crystal/Ceramic Resonator:
6.接下来就是点击相应的引脚设置输出寄存器了,就是output那一项,一共选了三个,是PA4,PB9,PC15:
7.点击project manager,配置好自己的路径和项目名,然后IDE那项改为MDK-ARM:
8.进入 code generate界面,选择生成初始化.c/.h文件,后面点击generate code,选择open project,然后就到KEIL5了:
keil仿真调试
1.打开.uvprojx文件(或者在上一步选择open project):
2.打开main.c文件,滑倒主函数那一部分:
3.将下面代码放入主函数中(替代里面的内容):
SystemClock_Config();//系统时钟初始化
MX_GPIO_Init();//gpio初始化
while (1)
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);//PA4亮灯
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯
HAL_Delay(1000);//延时1s
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//PA4熄灯
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9亮灯
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯
HAL_Delay(1000);//延时1s
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//PA4熄灯
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15亮灯
HAL_Delay(1000);//延时1s
}
4.点击编译生成hex文件,零错误零警告:
5.点击Download,下载进芯片:
6.实验结果:
观察输出波形,并分析时序状态与高低电平转换周期
1.Target界面中,选择正确的晶振大小,使用8MHz的外部晶振:
2.Debug页的设置:
3.点击Debug,进入调试界面:
4.选择逻辑分析仪:
5.选择要观察的引脚:
①点击Setup Logic Analyzer
②添加要观察的引脚:
6.相关设置:
7.运行程序:
8.观察波形:
引脚为低电平的灯亮,高电平的灯不亮,高低电平转换周期(LED闪烁周期)为1s左右
stm32外部中断模式控制灯亮灭
STMCube配置项目
1.引脚配置:
A4输出控制灯的亮灭,设置为GPIO_Output
A1持续输出高电平,设置同上
A7持续输出低电平,设置同上
C13个人习惯开启做测试用,设置同上
B5模拟开关,设置为GPIO_EXTI5
2.配置EXIT
3.配置SYS
4.配置GPIO
把A1配置为高电平、A7配置为低电平
把B5中断配置为上升沿和下降沿都触发
5.代码创建出勾上这个
6.创建项目
通过KEil配置代码
1.打开生成的项目,找到stm32f1xx_it.c
2.找到EXTI9_5_IRQHandler这个函数,选中HAL_GPIO_EXTI_IRQHandler这个语句按F12跳到该函数
3.往下找到HAL_GPIO_EXTI_Callback这个函数,用下列函数替换:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
if(GPIO_Pin == SWITCH_Pin){
//获取B5的电位
GPIO_PinState pinState = HAL_GPIO_ReadPin(SWITCH_GPIO_Port,SWITCH_Pin);
//低电位
if(pinState==GPIO_PIN_RESET)
HAL_GPIO_WritePin(LED_A4_GPIO_Port,LED_A4_Pin,GPIO_PIN_RESET);//把A4变为低电位
//高电位
else
HAL_GPIO_WritePin(LED_A4_GPIO_Port,LED_A4_Pin,GPIO_PIN_SET);//把A4变为高电位
}
}
编译,零错误零警告:
4.编译生成hex文件并下载:
5.实验结果: