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

第四章:STM32CubeMx 定时器基本使用方法

[复制链接]
STMCU小助手 发布时间:2021-1-13 15:30
第四章:STM32CubeMx定时器基本使用方法
第一步:
具体配置如下图:激活需要使用到的外设定时器,当系统时钟频率为64MHz时,我们希望1MS发生中断一次;就可以把时钟的预分频系数设置为64-1;计数周期设置为1000-1;计数方式为 Up 向上计数,此时得到的中断频率为:64,000,000 /64 /1000 = 1MS = 1Khz ;
4.1.jpg
第二步:
可以根据自身需要在NVIC 中断控制器中配置中断响应优先级。
4.2.jpg
第三步:
代码分析:
  1. 先看TIM7的初始化函数:static void MX_TIM7_Init(void)
    , w! n+ \1 W/ ?# R
  2. " h$ G- P& i0 j  f7 `
  3. 2 c' K9 o* Y! E9 Z
  4. static void MX_TIM7_Init(void)
    ( g) W$ v* V2 }5 P9 Y( k9 g
  5. {& o; C2 X- X9 s& ~) Q  j

  6. $ |! u4 f; Z2 g# `
  7.   /* USER CODE BEGIN TIM7_Init 0 */
    , p9 K$ `/ H! w+ C: C' n; {
  8. . q  O' N. N3 ^
  9.   /* USER CODE END TIM7_Init 0 */5 V. z0 s8 u2 a. D3 o. V1 |
  10. 7 ]2 a8 L' }7 J9 J9 A& q
  11.   TIM_MasterConfigTypeDef sMasterConfig = {0};. W# b( A" n/ g

  12. ! c. L  a& {- c$ H
  13.   /* USER CODE BEGIN TIM7_Init 1 */- j/ F4 n8 u: C5 `1 J# G7 A3 }

  14. ! d7 A+ W5 X( c; U+ l
  15.   /* USER CODE END TIM7_Init 1 */0 X/ h, `5 ]' A7 b* E5 U: N
  16.   htim7.Instance = TIM7;
    / \! n+ k( j$ b# N9 p$ P) ?
  17.   htim7.Init.Prescaler = 64-1;
    % ^8 _5 C3 B) k
  18.   htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
    $ v7 e. N, {: ~( m8 R4 Y3 G
  19.   htim7.Init.Period = 1000-1;( E/ |* a4 N0 ?$ T
  20.   htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;: ?& s" n- N' b  E( E' I; w
  21.   if (HAL_TIM_Base_Init(&htim7) != HAL_OK)* Y, {0 x8 b: F
  22.   {5 j* U  D9 e3 Z7 d
  23.     Error_Handler();
    2 ]6 ]; j# L# \- `" ^4 p0 ^  a
  24.   }
    : E8 X, y5 V4 d# c
  25.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
    ) B) q+ s. z6 ~8 n, U1 ]
  26.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;* s5 p. A% V8 T6 z) H
  27.   if (HAL_TIMEx_MasterConfigSynchronization(&htim7, &sMasterConfig) != HAL_OK)8 E6 q( @) E7 }8 E) z  Z5 D5 ]
  28.   {
    0 F* l6 e& `8 l- w& r' R
  29.     Error_Handler();
    ; p( }9 o& C4 Q, g) y3 k0 c; _
  30.   }7 a$ M% W4 F, [$ ~6 h% \
  31.   /* USER CODE BEGIN TIM7_Init 2 */
    0 a( ~8 g. I' K: c" Y! @
  32.   
    7 O8 s, t* M3 t- p1 v
  33.   
    $ F9 b2 o+ z5 g8 C
  34.    //在这这里添加这行代码,意思是初始化完成便开启定时器中断计数( Z& }" T% _% }) C& p
  35.     HAL_TIM_Base_Start_IT(&htim7);   8 B3 F; d( H" E
  36.    
    / c7 i& e  _0 p1 M. Q- q
  37.    
    4 y" E& P: _/ h5 X" j3 x
  38.   /* USER CODE END TIM7_Init 2 */6 s9 i/ L. J" l
  39. }
复制代码
  1. /* USER CODE BEGIN 4 */" E- F# P8 d1 o
  2. $ E( p- ?8 K4 j
  3. //在BEGIN 4 中添加定时器中断服务函数% l  g+ [; C  I5 S5 h$ J

  4. ; Y6 L( v2 Y" ~6 c4 x5 R& d: I
  5. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)2 N- F4 [9 o  k* Q4 D
  6. {& \2 {! [8 l, `5 G1 W) a8 J
  7.   if (htim->Instance == htim7.Instance) //如果是TIM7响应进来的中断
    / l+ M7 K# Q0 U( j
  8.   {
    3 D) K4 U2 ?' q# ~
  9.     MS ++;  //前面配置中断更新时间为1MS,那么这里进来一次MS加一次
    & V+ c. {* O6 i, t$ y  V' l3 M
  10.     if(MS == 1000)  //当MS加到1000时,即1S
    $ T4 H$ k& [' y
  11.     {
    * t2 L3 {- F) b. P, E
  12.       HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);  //即1S LED翻转一次
    ; Q2 U, i3 P: H2 O7 X# T
  13.       MS =0;  //MS用完后记得清0
    & ]3 q8 [2 q6 z
  14.     }
    3 N+ m. M& \. x$ E: e9 W8 w
  15.   }
    : Q2 j  M) t8 u, C( S; H9 `" s
  16. }: p9 n0 ^( d. D6 C" G' \- I8 x

  17. 6 i' G. Q% h5 l2 c% `. \, H* F8 h
  18. /* USER CODE END 4 */
复制代码
3 H6 @$ L: I6 |
如果能理解到这里,恭喜你已经学会了定制器的基本操作!
文章出处: 电子爱好者
' X4 m' H$ C1 Y
赞 收藏 评论0 发布时间:2021-1-13 15:30

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版