【STM32Cube笔记】11-中断控制器NVIC

【STM32Cube笔记】系列文章目录

1-基于STM32的VSCode入门级教程前言
2-STM32Cube安装教程
3-STM32CubeIDE汉化
4-STM32Cube配置时钟设置
5-跑马灯引脚配置
6-Cortex-M7内核基本配置
7-新建用于储存代码的文件夹以及c/h文件
8-STM32CubeIDE点亮跑马灯
9-STLink调试
10-异步串口收发USART
11-中断控制器NVIC
12-配置外部中断
13-使用定时器产生PWM输出
14-使用定时器捕获上升/下降沿
15-数模转换AD/DA
16-STM32Cube个性化定制


7.1 新建NVIC工程

7.1.1 新建工程文件
在桌面新建文件夹,命名为“NVIC_Project”(根据实际需求选择文件夹存放路径和命名,其中路径不能包含中文),用于存放串口实验的工作空间。打开STM32CubeIDE软件,点击“Browse…”按钮,选择 “NVIC_Project”文件夹路径作为工作空间存放路径,然后点击“Launch”按钮,启动运行STM32CubeIDE。
【STM32Cube笔记】11-中断控制器NVIC_第1张图片

点击“Start New STM32 project”按钮。
【STM32Cube笔记】11-中断控制器NVIC_第2张图片

在搜索栏中输入需要配置的STM32芯片名称进行搜索,例如本文使用的芯片就输入“STM32H743II”,并单击选择对应封装“ LQFP176”,即可进入下一步。
【STM32Cube笔记】11-中断控制器NVIC_第3张图片

在进入芯片详细页面后,可以点击“Block Diagram”或者“Datasheet”对芯片进行概览。在确认芯片信息与手头的芯片一致后,点击Next下一步开始配置芯片。
【STM32Cube笔记】11-中断控制器NVIC_第4张图片

输入工程名,其余选型默认,点击“Finish”按钮。操作该步骤前需要保证网络正常,因为STM32CubeIDE需要下载对应芯片的数据包,也可以到STM官网上下载可离线安装的数据包。
【STM32Cube笔记】11-中断控制器NVIC_第5张图片

点击“Yes”按钮。

在这里插入图片描述

点击“Project Manager->Code Generator”,将“Generated files”第1和第2选项勾选,其余默认。
【STM32Cube笔记】11-中断控制器NVIC_第6张图片

点击“Pinout & Configuration->System Core->RCC”,在“RCC Mode”中将“High Speed Clock(HSC)”设置为“Crystal/Ceramic Resonator”,其余保持默认。
【STM32Cube笔记】11-中断控制器NVIC_第7张图片

第一个选项High Speed Clock选择Crystal/Ceramic Resonator。其余选项无特殊需求不用打开。点击“Clock Configuration”,在“Input Frequency”输入“25”,在“PLL Source Mux”选择“HSE”作为时钟输入,在“System Clock Mux”选择“PLLCLK”作为时钟输入,在“SPI1,2,3 Clock Mux”输入“480”,然后按回车键,其他暂不设置,保持默认。
【STM32Cube笔记】11-中断控制器NVIC_第8张图片

7.1.2 配置芯片内核
点击左边菜单栏“System Core”的“CORTEX_M7”进入M7的配置页面。
【STM32Cube笔记】11-中断控制器NVIC_第9张图片

CPU ICache:使能I-Cache,用来缓存指令,选择打开。
CPU DCache:使能D-Cache,用来缓存数据,选择打开,其他选项不变。
点击左侧“Trace and Debug”,进入“DEBUG”页面,用自己所用的调试方式,选的是“Serial Wire”。下面的选项是外部触发调试,暂且不开。
【STM32Cube笔记】11-中断控制器NVIC_第10张图片

7.1.3 配置GPIO用于LED
点击“Pinout & Configuration”,在软件右下角的引脚搜索框输入“PB0”,此时,STM32H743IIT6可视化图的PB0引脚闪烁,点击“PB0”引脚,在弹出的PB0功能列表中选择“GPIO_Output”功能。
【STM32Cube笔记】11-中断控制器NVIC_第11张图片

同理,为PB1引脚选择“GPIO_Output”功能。

【STM32Cube笔记】11-中断控制器NVIC_第12张图片

点击“Pinout & Configuration->System Core->GPIO->PB0”,在“PB0 Configuration”中,按照下图对PB0进行配置。
【STM32Cube笔记】11-中断控制器NVIC_第13张图片

同理,对PB1进行如下配置:
GPIO output leval:GPIO的输出电平,选High为打开高电平。
GPIO mode:选择GPIO的模式,开漏或者推挽,这边选Push Pull为推挽模式
GPIO Pull-up/Pull-down:GPIO上下拉模式,这根据电路LED选上拉模式。
Maximum output speed:GPIO的IO口响应速度。选择High高速模式。
User Label:GPIO的程序使用标签,例如本文这边将PB0的名称改为IO_LED0。
7.2 使用基本定时器中断
7.2.1 内部定时器设置
首先我们需要在定时器配置栏中将定时器初始化。
点击“Timers”-“TIM1”-“Clock Source”设置为“Internal Clock”将定时器1使用内部时钟。
【STM32Cube笔记】11-中断控制器NVIC_第14张图片

此时系统时钟需要刷新才能自动分配给定时器中断。点击“Clock Configuration”,点击“撤销”返回上一步,再点击“前进”复原以达到刷新的效果。
【STM32Cube笔记】11-中断控制器NVIC_第15张图片

接着回到之前的TIM页面,将下方新增的“Configuration”将“ Prescaler”分频数设为48000,将“Counter Period”计数个数设为1000。由于系统时钟为480MHZ,因此将分频数设为48000得到10KHZ频率,10KHZ一次读数记10微秒,计数1000使定时器1在100ms时中断,并打开“auto-reload”开启自动清零。
【STM32Cube笔记】11-中断控制器NVIC_第16张图片

接着点击“NVIC Settings”开启定时器中断即可。
TIM1为高级定时器,开启“ update interrupt”即可。
【STM32Cube笔记】11-中断控制器NVIC_第17张图片

其余普通定时器正常开启定时器即可。
在这里插入图片描述

7.2.2 编写程序代码
点击保存,并生成代码。
【STM32Cube笔记】11-中断控制器NVIC_第18张图片

新建NVIC自己的HARDWAVE文件夹以及.c和.h文件,并添加路径调用。(详见5.8章)
【STM32Cube笔记】11-中断控制器NVIC_第19张图片

【STM32Cube笔记】11-中断控制器NVIC_第20张图片

在“NVIC.h”中完成中断初始化函数以及回调函数的调用,同时调用“GPIO.h”“TIM.h”
【STM32Cube笔记】11-中断控制器NVIC_第21张图片

在“NVIC.c”中调用“NVIC.h”后,将定时器中断初始化代码以及回调函数添加即可。
【STM32Cube笔记】11-中断控制器NVIC_第22张图片

最后在“ main”函数中调用定时器中断初始化即可。
【STM32Cube笔记】11-中断控制器NVIC_第23张图片

烧录程序 至单片机开发板,可以看到定时器正常控制LED闪烁。
【STM32Cube笔记】11-中断控制器NVIC_第24张图片

附上程序:

#ifndef INC_NVIC_H_
#define INC_NVIC_H_
#endif /* INC_NVIC_H_ */
#include "main.h"
#include "tim.h"
#include "gpio.h"
void NVIC_Init(void);
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);

/** Configure pins
     PB0   ------> IO_LED0_Pin
     PB1   ------> IO_LED1_Pin
*/
#include "NVIC.h"
void NVIC_Init(){
	HAL_TIM_Base_Start_IT(&htim1);	//HAL库开启定时器1

}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {	//中断回调函数
if (htim->Instance == htim1.Instance) {					//判断是哪个定时器产生中断
	HAL_GPIO_TogglePin(IO_LED0_GPIO_Port, IO_LED0_Pin);	//HAL库控制IO_LED0电平反转
}
}

你可能感兴趣的:(STM32入门级使用心得,单片机,stm32,嵌入式硬件)