你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32Cube 中断控制器NVIC

[复制链接]
STMCU小助手 发布时间:2022-4-25 20:55
7.1 新建NVIC工程
7.1.1 新建工程文件

在桌面新建文件夹,命名为“NVIC_Project”(根据实际需求选择文件夹存放路径和命名,其中路径不能包含中文),用于存放串口实验的工作空间。打开STM32CubeIDE软件,点击“Browse…”按钮,选择 “NVIC_Project”文件夹路径作为工作空间存放路径,然后点击“Launch”按钮,启动运行STM32CubeIDE。

MBQN{S3WYG0K7A5HLTGO24L.png

点击“Start New STM32 project”按钮。

B5[(T9_C%M0~W00YI0CMW.png

在搜索栏中输入需要配置的STM32芯片名称进行搜索,例如本文使用的芯片就输入“STM32H743II”,并单击选择对应封装“ LQFP176”,即可进入下一步。

)H0@8$%V{UUTF4_DIRL]W{H.png

在进入芯片详细页面后,可以点击“Block Diagram”或者“Datasheet”对芯片进行概览。在确认芯片信息与手头的芯片一致后,点击Next下一步开始配置芯片。

1e1c540b95e9416a996d9069b0c57bd0.png

输入工程名,其余选型默认,点击“Finish”按钮。操作该步骤前需要保证网络正常,因为STM32CubeIDE需要下载对应芯片的数据包,也可以到STM官网上下载可离线安装的数据包。

P`(O`T56LX0M[5JG]RIE$@E.png

点击“Yes”按钮。

820e31a8c0f84c34bcd0ae4430b0f99c.png

点击“Project Manager->Code Generator”,将“Generated files”第1和第2选项勾选,其余默认。

(73$A[U]9R29MF08LR1NK.png

点击“Pinout & Configuration->System Core->RCC”,在“RCC Mode”中将“High Speed Clock(HSC)”设置为“Crystal/Ceramic Resonator”,其余保持默认。

~CE($Z[LA1)1V`{8(~75$A6.png

第一个选项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”,然后按回车键,其他暂不设置,保持默认。

_W~8O516F(V~W_8$N4J8I[Q.png

7.1.2 配置芯片内核
点击左边菜单栏“System Core”的“CORTEX_M7”进入M7的配置页面。

LW3%7M(NC0ESZ68EO8DB3TP.png

CPU ICache:使能I-Cache,用来缓存指令,选择打开。
CPU DCache:使能D-Cache,用来缓存数据,选择打开,其他选项不变。
点击左侧“Trace and Debug”,进入“DEBUG”页面,用自己所用的调试方式,选的是“Serial Wire”。下面的选项是外部触发调试,暂且不开。

R@C}2V~Y@WJD_H4NZF4OGTA.png

7.1.3 配置GPIO用于LED
点击“Pinout & Configuration”,在软件右下角的引脚搜索框输入“PB0”,此时,STM32H743IIT6可视化图的PB0引脚闪烁,点击“PB0”引脚,在弹出的PB0功能列表中选择“GPIO_Output”功能。

%9}_Z(UD`X5}K]P{5BOS_R0.png

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

ba05291721434209ade8fe1828fcfccb.png

点击“Pinout & Configuration->System Core->GPIO->PB0”,在“PB0 Configuration”中,按照下图对PB0进行配置。

6G]$S]T_MEM(TEPTTB({6(4.png

同理,对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使用内部时钟。



此时系统时钟需要刷新才能自动分配给定时器中断。点击“Clock Configuration”,点击“撤销”返回上一步,再点击“前进”复原以达到刷新的效果。

5S6{M{I19F]7LAP714J78IQ.png

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

]}2LVGA@MYNVK4QC9V7RG5I.png

接着点击“NVIC Settings”开启定时器中断即可。
TIM1为高级定时器,开启“ update interrupt”即可。

ZQ_D}YC@S`R))_CMPLSINHD.png

其余普通定时器正常开启定时器即可。

4dc5cfb33b9e4c10bc9e1275d574169b.png

7.2.2 编写程序代码

点击保存,并生成代码。

OMAERI2YQD`E]S9)_(6_)KX.png

新建NVIC自己的HARDWAVE文件夹以及.c和.h文件,并添加路径调用。(详见5.8章)

0420ad9dbbf7463cb50dd9b3d09c81d9.png

f3447adb6d5d47fcbc8eabb29e8571c5.png



在“NVIC.h”中完成中断初始化函数以及回调函数的调用,同时调用“GPIO.h”“TIM.h”

42c1f1ec89db4772ab353d479074ab38.png

在“NVIC.c”中调用“NVIC.h”后,将定时器中断初始化代码以及回调函数添加即可。

b55c840edf71459ab68d2a997f529cdc.png

最后在“ main”函数中调用定时器中断初始化即可。

51084b9444764f15bc862753a66b8009.png

烧录程序 至单片机开发板,可以看到定时器正常控制LED闪烁。

0a8a3a1dc38a411396f3c6569f80341c.png

附上程序:
  1. #ifndef INC_NVIC_H_
  2. #define INC_NVIC_H_
  3. #endif /* INC_NVIC_H_ */
  4. #include "main.h"
  5. #include "tim.h"
  6. #include "gpio.h"
  7. void NVIC_Init(void);
  8. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);
复制代码
  1. /** Configure pins
  2.      PB0   ------> IO_LED0_Pin
  3.      PB1   ------> IO_LED1_Pin
  4. */
  5. #include "NVIC.h"
  6. void NVIC_Init(){
  7.         HAL_TIM_Base_Start_IT(&htim1);        //HAL库开启定时器1

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





收藏 评论0 发布时间:2022-4-25 20:55

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版