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

基于cube的stm32f407定时器应用,125ms定时,晶振25M

[复制链接]
stm32_beginner 发布时间:2015-1-8 09:14
本帖最后由 stm32_beginner 于 2015-1-8 09:20 编辑
- P2 i$ y: E4 W, T* Y; F& }$ D
) i5 E& L+ C9 X: E$ t; W; D: C9 f1 [基于cube的stm32f407定时器应用,125ms定时,晶振25M
& }, x" s: p$ o. p$ O2 g1 _1 w, g& T3 p' v
时钟配置:9 ^. p2 H- c! x8 V8 P
void SystemClock_Config(void)
$ }: p: N* y0 l! q  i{
6 o1 k& _4 O: X
9 Q- s; g# y9 G  RCC_ClkInitTypeDef RCC_ClkInitStruct;
$ I; }5 r$ S3 h* @6 N$ ?  RCC_OscInitTypeDef RCC_OscInitStruct;) w" a" S9 R7 l7 Z5 c$ H$ E, K

  f  V1 h! W7 k7 o) H* \  /* Enable Power Control clock */
/ O7 C# U* |- r- `. U+ W8 ]  __PWR_CLK_ENABLE();
- O+ u& z5 I. j2 b- D9 Y7 O7 Z! s3 b( v) S
  /* The voltage scaling allows optimizing the power consumption when the device is
0 b9 i/ c, |8 v# X0 d5 A     clocked below the maximum system frequency, to update the voltage scaling value 2 ]2 g3 c' g) \3 n/ v6 a* k
     regarding system frequency refer to product datasheet.  */
0 p: M/ E( _; i$ z, L1 H  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);7 V" v: l" [7 [( r/ s

5 ^0 ]: d2 N* `  /* Enable HSE Oscillator and activate PLL with HSE as source */
  Y) _% Q. Y/ q4 e  [  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
( o5 J) n# }' i$ f! a4 L5 y  RCC_OscInitStruct.HSEState = RCC_HSE_ON;% A4 L8 H: ?8 |& q4 t: Y
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;; N4 {2 ?) ^( I8 |+ D5 \
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
( x0 N- x  s" j9 f  RCC_OscInitStruct.PLL.PLLM = 8;
6 \9 p2 G! w9 V# P7 S# b1 n  RCC_OscInitStruct.PLL.PLLN = 336;" N7 w7 d& N% i* u, W% y7 y# |6 P
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;% Q" A( D6 O9 Z9 y7 ~
  RCC_OscInitStruct.PLL.PLLQ = 7;( x$ Y, k5 e' H4 z
  HAL_RCC_OscConfig(&RCC_OscInitStruct);
1 A! C7 ~9 H( u
+ B1 Q8 o* ^) v4 X  /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */8 O& C" _8 c; Q  {0 I' K( H
  RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);: {0 Z" O2 a3 I+ _/ F$ G
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;' w& g: G( A) B
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;" _& [6 l5 [$ X* e
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;  " E' R+ p8 Y, c0 g4 W; e
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;  / I# `2 j' [& E  v# u
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
; Y# r" L4 s3 R+ v  Q9 y& k) b% E* i+ d- @4 u' ]0 n& x
}6 ^7 |3 _. c6 T

" J2 I0 U2 ?& ^9 V$ \' y定时器初始化:# k! H6 B6 N% `, C! x
/* TIM6 init function */( V# \1 y1 h+ ?6 G8 M2 A4 @5 R
void MX_TIM6_Init(void)- a. d: s7 C. Z  m( _
{5 l/ l* y/ s* ^. b6 i) r
        
6 o3 ~, G8 s. K3 l& q$ q" K        /* -----------------------------------------------------------------------# j; U: Q2 G# N
    In this example TIM3 input clock (TIM3CLK) is set to 2 * APB1 clock (PCLK1), + u3 `7 y7 k- \/ e+ m5 \$ h
    since APB1 prescaler is different from 1.   
4 _. M4 ?2 E' \. ?4 _( s9 m      TIM3CLK = 2 * PCLK1  
& W& X) C: N1 o4 s0 R      PCLK1 = HCLK / 4
3 }3 L" V) @* J) ^" o) a/ B6 a      => TIM3CLK = HCLK / 2 = SystemCoreClock /2 =84* ?1 T% x, ?0 a) Q0 ?& @0 _( u
    To get TIM3 counter clock at 10 KHz, the Prescaler is computed as following:0 F: I! D  ?2 N. p; h! L
    Prescaler = (TIM3CLK / TIM3 counter clock) - 1
8 l9 Q8 g  O4 p+ _/ |    Prescaler = ((SystemCoreClock /2) /10 KHz) - 1% p) |% l0 s2 N* ]) R$ W3 T: {

' v" z' z9 \. L/ O% [    Note:
+ o/ r9 H& z$ y, H; W     SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f4xx.c file.
: D8 b6 \/ ?7 @     Each time the core clock (HCLK) changes, user had to update SystemCoreClock
" m& K  X9 I' w6 e7 [8 Z  O     variable value. Otherwise, any configuration based on this variable will be incorrect.7 P6 B/ S' [1 \) N5 Z: G
     This variable is updated in three ways:# g. o+ p8 Y! k; y8 ~( c
      1) by calling CMSIS function SystemCoreClockUpdate()
/ }  [4 l/ N9 p' h, l6 I9 ?      2) by calling HAL API function HAL_RCC_GetSysClockFreq()) y3 K- @; H; K5 _' H; ?
      3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency  
+ d- F0 u" h8 S, F( w/ Z- v  ----------------------------------------------------------------------- */  # \: [* x+ }, D0 Z5 k6 @
  /* Compute the prescaler value to have TIM3 counter clock equal to 10 KHz */
* X7 z" R& C) K; }( i; y% @  uwPrescalerValue = (uint32_t) ((SystemCoreClock /2) / 10000) - 1;                        //10KHz·ÖƵ 1ÃëÖÓ10000´Î
: @6 o* ?+ x7 J4 a# k' R) Y, f- q5 {# H; m$ T* y/ v
  /* Set TIMx instance */+ W* k. ?! i$ C" a% U. w
  htim6.Instance = TIM6;
1 N* |2 x3 X$ b) Z( G+ `- o! \6 o$ q" ^5 c2 v, o6 j5 ^2 m
  /* Initialize TIM3 peripheral as follow:
/ D4 W9 @+ F% Y& Z9 t4 N: F       + Period = 10000 - 1
# |! Y  H) o8 j! @  N# N       + Prescaler = ((SystemCoreClock/2)/10000) - 1
+ r# m- e4 f+ x4 d$ i       + ClockDivision = 0
# y, G" n4 j8 c# \. N       + Counter direction = Up
- Q+ t0 I" R* z2 F1 D" J7 K4 x0 }  */
) Q: \) h! \- S! i6 E/ B9 z! F( u  //htim6.Init.Period = 5000 - 1;                                                                " Y$ i  J# S; K; s
        htim6.Init.Period = 1250 - 1;                                                                * d: A2 z+ Y6 T/ R9 ^
  htim6.Init.Prescaler = uwPrescalerValue;& T- V  A0 p0 y3 Y4 e
  htim6.Init.ClockDivision = 0;
. Z# b$ R' d, o; ^3 G% S  htim6.Init.CounterMode = TIM_COUNTERMODE_UP;# ^3 X0 N) b  @! b5 _6 i: M
  if(HAL_TIM_Base_Init(&htim6) != HAL_OK)& g  ^+ R' E4 N- P! L8 r
  {
( Q% a. F- B3 v" u* ~$ B    /* Initialization Error */; S% `" c! G: p0 R. ~  I
    //Error_Handler();6 {: {2 p7 @; e9 M
  }
4 W$ n, S5 w$ `- ?& J: {8 K3 t! o0 y
  /*##-2- Start the TIM Base generation in interrupt mode ####################*/7 S1 v' M( B6 O6 b- E
  /* Start Channel1 */
! R9 }; u5 R* S6 D, e: l  if(HAL_TIM_Base_Start_IT(&htim6) != HAL_OK)
- _* I) X* M) d/ C. {1 i  {9 j# _0 r3 t3 x
    /* Starting Error */
9 x0 I. V) \8 v) Q1 `. ^6 P5 U7 `    //Error_Handler();/ o% x: I. t% E
  }  ]( M8 Y) H) x1 B: j
7 T) d( R. C& B$ O3 j" ~
}) a2 K; ~( f' {$ h6 m) }/ c: B

; e. C( X+ k' u. Q中断处理,125msx4=500ms:& U) x7 r3 O; a+ x
& u; O4 ]. W- G1 Q* a
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
+ b, ?' T, E* E% m# N{7 ]7 T/ n3 L0 @5 x& j8 g, t* s. z
  //BSP_LED_Toggle(LED4);HAL_GPIO_TogglePin(GPIO_PORT[Led], GPIO_PIN[Led]);2 C" E4 v/ S2 W# Y! Y& u" K
        
. a( l8 H0 f& j9 V5 Y& L/ j+ ^        if(++flag_125ms == 4)9 L' `, r- R8 q) a* F0 C) R/ |
        {
5 ^4 ]! k3 t/ q4 k* r4 M; q                HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12);  //TestLed7 [' m* ~  V7 r# |* P- y* N
                flag_125ms = 0;        
$ S( G4 n1 r6 C        }; M2 H+ j3 y0 `3 r( r8 X
}
' T' C, n* J" P; E$ R# k
' W% f0 x5 y0 N8 p
: C6 t8 k+ z) H$ b2 e) x附加源码(里面其他应用内容准备在板子上应用的,才写了初始化和配置,请忽略不计,懒得删除了); E5 n  O1 P4 m+ ~
TEST_TIM6_125ms.part01.rar (9 MB, 下载次数: 149)
赞 收藏 评论4 发布时间:2015-1-8 09:14

举报

4个回答
三创电子(Tcreate) 回答时间:2015-1-8 09:15:21
不错  F4到手后一直没有时间弄  回头得弄下  
foxglove 回答时间:2015-2-13 15:28:41
感谢分享。。。
nighstar 回答时间:2018-12-17 15:16:20
感谢分享,我来学习学习
nighstar 回答时间:2018-12-17 15:55:29
缺少压缩包03?

所属标签

相似技术帖

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