STMCU小助手
发布时间:2022-4-7 16:37
|
实验内容:使用基本定时器,实现LED灯以1S间隔进行亮灭切换。9 e, E4 V( ^2 x3 C) \ 6 x3 A, U1 R w; Y+ v. s; D 一、原理图
4 ~" W8 A% a: |# Z& R6 U 二、 CubeMX配置 4 E9 D G4 L1 j Step1.打开 STM32CubeMX,点击“New Project”,选择芯片型号,STM32F103VETx。 ) [$ v& O5 o. W
Step2.选择时钟源,并配置时钟树。选择Crystal/Ceramic Resonator,并配置系统时钟为72M。/ x3 Z9 A% l8 M
: `8 R8 n9 [% `( p5 Z, m! D) j
Step3.配置SYS,我们这里选择的是Serial Wire。(正常情况配置不配置不影响,debug可以使用。但是你不可以把这两个引脚用于其他复用功能,如果用于其他复用功能,debug就不起作用了。) ) ]) C# C2 }8 @- R# V0 j
/ T/ n5 H# b- ?- R: [ Step4.配置时基以及定时器中断。% D5 U* d3 S+ F0 J& ^
- N) v: C6 N/ q" J; W# H$ w, n 到这里关于定时器参数配置基本已经完成,只需要根据之前文章《STM32Cube HAL:GPIO输入/输出(一)》Step4-Step8,设置相关工程参数和生成代码。8 j3 I1 T" |" K) _+ Z 三、添加功能代码8 `8 C# _3 v& S 首先在主函数中开启定时器,并使能定时器中断(更新中断),并在while(1)循环中添加一个判断语句,在定时器中断1000次以后,进行LED灯电平的翻转,并将中断计数清零。
回调函数,主要是用来计录定时器中断的次数,与while(1)循环中的判断语句相呼应。从而实现定时器计时1S,LED灯状态切换一次的效果。5 d$ `5 f+ ^+ | D% U7 ]: N# j
定时器注意要点在于时基的配置。 这里我们先了解几个参数和概念。 定时器的定时时间等于计数器的中断周期乘以中断的次数。 定时器的时钟:TIMxCLK 计数器时钟:CK_CNT! T; a* T( ~8 R 预分频数:PSC 定时器周期: ARR( 注意:这里的周期指的不是时间而是计数个数!!!计数器能计数的最大数值,有时候这里很容易混淆 ) 计数器的时钟频率等于定时器的时钟频率除以预分频数: TIMxCLK/(PSC+1) 0 w) V4 P6 \# B( U) H, a r. u$ t; K 计数器计一个数的时间等于计数器时钟频率的倒数: (PSC+1)/TIMxCLK" f7 O6 @/ g$ K1 H3 j 产生一次中断的时间(中断周期)则等于计一个数的时间乘以计数的个数(定时器周期 ): (ARR+1)*(PSC+1)/TIMxCLK 如果在中断服务程序里面设置一个变量 time ,用来记录中断的次数,那么就可以计算出我们需要的定时时间等于:5 b( k3 ^6 \9 G3 z time*(ARR+1)*(PSC+1)/TIMxCLK2 E+ Y' L* _* d0 b) a |
【经验分享】STM32语音识别的智能蓝牙音箱(源程序+原理图+PCB+设计说明书+PPT)
想找个ST芯片
[GPIO] 使用新型抽象开始C++嵌入式编程,从GPIO开始
技术手册stm32f1xx中的一个小问题
【经验分享】STM32 HAL库移植FreeModbus详细步骤
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
实战经验 | Keil工程使用NEAI库的异常问题
经验分享 | 利用TIMER定时和捕获功能实现编解码演示
STM32 LSE 不起振排查指南:五大核心原因与快速解决方案
我心中的ST中文论坛
微信公众号
手机版