了解并掌握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.实验结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值