定时器中断实验 一、实验说明: i% v2 O' ]' U; a& y5 f4 u9 Q4 ? 平台:STM32F103RCT6 本实验为定时器中断实验,使用STM32cube max 配置TIM3定时中断。 注:实验中使用了串口,所以可以沿用上一个串口中断实验的配置。2 w( q- {& N; I* y1 r 二、实验操作 1、STM32系统基础配置。: R8 A4 X! a1 P ~: w P 详见上一个实验的步骤1 – 4。$ Q$ q/ f. k% I/ w8 e1 n * C0 G9 x: x x- u! b) V 2、配置好串口1。 详见上一个实验。9 m, Y" H$ i9 |& m1 m5 I( M3 | + X# T0 O% S9 |, Y, O 3、配置定时器, Y' E' ~& Y2 }! v6 i" z7 p% L , `4 r I; ]% t+ r. U8 c. s" { 如上图选择定时器3,出现如下界面: + T7 e+ j$ p( @ 3 R8 N8 p6 U7 T" o' ~( I S 然后配置具体参数: 上一步选择后就会出现这个界面,配置好分频值,计数装载值,注意,第三个箭头那里要使能(ENABLE)自动重新装置值。* ]9 {6 ]; b8 J6 C ) |- q7 W* r- | f& N4 M 时间的计算5 K( Y& K* x0 I " `% f" n1 _2 x& n 这里 Tout = (5000*7200)/72MHZ = 0.5秒,所以0.5秒进一次中断。 4、定时器中断配置 ' @" W: P9 v+ V3 b % p9 k$ }; f. l% J 5、然后生成代码( L; y4 |+ J. Y% K7 j 6、工程中添加代码 首先要明确我们使用的是定时器的定时中断,也就是更新中断,所以要找对回调函数。 void TIM3_IRQHandler(void) 在stm32f1xx_it.c中 ) p( d9 N7 W% C- R0 l- z9 x HAL_TIM_IRQHandler(&htim3); - k4 ?5 z6 g( |: o+ W) R# } HAL_TIM_PeriodElapsedCallback(htim); # ?0 J& N" J( Y s __weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) ( }, b/ M( l. H& ?; V& n 这就是这几个函数的跳转顺序,最后一个就是更新中断的回调函数,把它 复制到TIM.c中,如下图6 J$ D, W; P* }" B! q- l , u$ S7 K- _5 t 7、开启中断! z- P, A$ G: j4 K& w3 {9 e! Z0 | HAL_TIM_Base_Start_IT(&TIM3_Handler); + L C) y; C& V8 m1 K( l 8、测试,在中断中写句输出测试一下(实际开发,不会这样干的。) % B# t0 {+ }& u1 T 因为要输出检查下串口。6 J( u% G2 r& U3 j- a( D* g 下载程序,测试: 结果如下,0.5秒输出一次。$ L2 p& r H A1 Q! {, z+ \1 _; b & F* u6 F# T9 o X- u) O |
定时器剩余通道是否可以做PWM输出呢?
基于STM32双定时器+ADC+DMA实战经验分享
基于STM32的定时器触发ADC时可能遇到的情形
【NUCLEO-U545RE-Q评测】5. 基本计时器
基于STM32的定时器不按设定超时产生中断
基于stm32用两个16位定时器级联成32位定时器经验分享
基于STM32利用TIMER事件和栈帧体验中断响应经验分享
基于STM32的Timer 结合 DMA 2D 通道实现不同波形输出
基于STM32软件定时器+中断方式模拟PWM经验分享
基于STM32高精度定时器中single-shot计数模式不工作