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

【经验分享】STM32 ~ STM32 TIM重映射

[复制链接]
STMCU小助手 发布时间:2022-1-21 22:18
复用功能没有重映射部分重映射完全重映射
TIM3_CH1PA6PB4PC6
CH2PA7PB5PC7
CH3PB0PB0PC8
CH4PB1PB1PC9
  1. /**重映射 tim3 使得PC7 PC8输出Pwm波     @4 G$ v: j: w1 [6 g/ P
  2.   ******************************************************************************- C6 P# n5 _* S! ~) D
  3.   * @file    Project/Template/main.c
    , F. t  S! I; @4 j1 Z- T( V
  4.   * @author  MCD Application Team
      S0 `( e, y8 e* v3 _: _) |& Y9 h
  5.   * @version V3.0.03 l* T8 e. S8 K  o& H9 M6 o
  6.   * @date    04/06/2009
    3 s, G6 ^% I% x- V6 t. z- G
  7.   * @brief   Main program body" y7 r+ c+ z5 p
  8.   ******************************************************************************0 k$ O2 O  `9 L1 h
  9.   * @copy' U5 l5 x7 P: {
  10.   */ p3 a/ G" j5 H+ t
  11.   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS5 W) o% M, ^  y6 c* k) |
  12.   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE% M8 M3 B+ {9 C, ^4 v  o% s! \/ Y
  13.   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY" M2 I$ j5 G/ J) M5 r- V
  14.   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING3 H, W! r/ t, R% M6 q+ v$ L% \
  15.   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
      _3 Y3 i& \1 M# l0 w1 ^
  16.   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.4 F/ \4 I  `& m# d1 }% W: t
  17.   *
    9 ]. `" D# _& o+ `  c% d& f0 t
  18.   * <h2><center>© COPYRIGHT 2009 STMicroelectronics</center></h2>
    ( e3 `' ]; |0 [6 t1 G1 {7 Z# f: w
  19.   */+ D1 ^. ^( D6 T, F+ Y# e
  20. /* Includes ------------------------------------------------------------------*/2 T# k: e; w! t& W
  21. #include "stm32f10x.h"; F) I8 f: Y3 X7 h
  22. #include "stm32f10x_tim.h", G, s( ~' }- P' k$ o; g
  23. #include "misc.h"$ C# L; G  ?- b) K
  24. void GPIO_AFIODeInit(void);//这个函数不能落下,否则不能成功8 f2 U  ]  Z$ n/ C* o  x: L
  25. TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;//配置PWM需要使用的结构体声名
    ( J5 K( I: x$ U6 M! @
  26. TIM_OCInitTypeDef          TIM_OCInitStructure;
    " e' ?6 |- F; G! q
  27. u16 CCR3_Val =250;+ `1 l, h, @1 ]% e/ x" s. \. x2 `* Y
  28. u16 CCR4_Val =250;
    7 K$ ]; [, c6 y, \
  29.                 6 _; C$ F' T+ S. I3 N3 C
  30. void GPIO_Config(void);
    + N, f7 M' [# H% W. J7 v
  31. void Timer_Config(void);4 l9 N( T4 M6 f3 I& u4 Z
  32. /**/ r& R; }2 s" ?
  33.   * @brief  Delay program.
    / h4 R6 {' j  C' v4 t
  34.   * @param  None. L& l# Q2 u4 f) s" N8 h/ T
  35.   * @retval : None
    2 j8 d+ R; U5 B; R$ C6 L0 A
  36.   */0 y( O1 X) e' t
  37. void  Delay (u32 nCount)- b2 ~8 R7 z* Z+ D) K; ~$ ]' u7 G2 I
  38. {; e" A# `) `- i  }0 T  h9 _2 `  h+ S
  39.   for(; nCount != 0; nCount--);& f; F6 \& P5 Y& P/ ~$ h
  40. }% H2 o, j; [$ z: Y) m
  41. /**! ?) K: t! R) w, `, f- J: |  y
  42.   * @brief  Main program.
    * y% O* f$ H! Q- _. O
  43.   * @param  None
    5 q8 l" e4 `2 C! o" z  J
  44.   * @retval : None, T6 W6 Z' c. n' X4 y
  45.   */4 s3 h; E/ O% I8 T2 j% j; S
  46. int main(void)+ k3 h& N3 W6 j* V$ l& }# Q0 B
  47. {
    # R' ]7 s- P6 H5 z" C- r- F
  48. /* Setup STM32 system (clock, PLL and Flash configuration) */8 ~+ S' R/ V' i% f  M. {
  49. SystemInit();  Z* d* `) q' U  ~. Z5 S$ g) I* j% J
  50. GPIO_Config();( I$ l7 X) P( L& U
  51. Timer_Config();& b$ \& j6 V3 V2 V1 P8 |( e4 C
  52. /* Infinite loop */- v9 T$ [$ N4 D
  53. while (1) {, A% ~' o, ~! V4 M' q( V
  54.                }
    3 U" V: O, Z  |1 e' o# }; |
  55. }
    ; R2 M$ q6 J' J4 L8 a& q
  56. /**, M( ~- Y" u4 F2 `2 l% [* B, P
  57.   * @brief  GPIO_Config program.7 l/ @# q0 C: `
  58.   * @param  None
    0 H8 d8 \2 I0 K$ {- [
  59.   * @retval : None; y/ \" l% n/ C& Z# S
  60.   */3 e  V2 L$ [7 I, [& i
  61. void GPIO_Config(void)6 g+ f' h8 B+ |9 U- Z" i- Y
  62. {* N; L9 b, O, }) E
  63.   GPIO_InitTypeDef GPIO_InitStructure;
    8 v4 _" e& o- _  M  [" B  C
  64.    ! \8 R! H% I5 W) e( N
  65.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |            RCC_APB2Periph_GPIOC |RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE);
    % Y  _# l  c. H, I# |- d5 V  e8 L

  66. 3 g* k3 g3 C8 @. i
  67.    GPIO_AFIODeInit();  //刚开始没有这个语句,所以一直没有重映射成功7 X7 p  L+ f% G( D( d; _
  68.    GPIO_PinRemapConfig(GPIO_FullRemap_TIM3 , ENABLE); //这个就是重映射功能函数6 C$ g% o% u9 Q' T' ]4 M* D& H, B
  69. /*GPIOA Configuration: TIM3 channel 3 and 4 as alternate function push-pull */7 r$ \. D; P+ v* u
  70.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 | GPIO_Pin_1;
    2 A. |4 W3 G/ l
  71.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //这里也要注意. z* f* {, J8 V$ n2 x& G
  72.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 2 ^5 p9 T+ B, ]: E' o0 H
  73.   GPIO_Init(GPIOB, &GPIO_InitStructure); //这四句是为了校验究竟PB0,PB1是否还有PWM输出
    0 U6 S& L5 c4 c. L" u
  74.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8 | GPIO_Pin_9;
    8 J* Y2 `/ S  t  A& |) s- k
  75.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;- @# S$ f9 }2 q
  76.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    6 m1 k. Z6 o; ^, ?
  77.   GPIO_Init(GPIOC, &GPIO_InitStructure);
    ' r0 A3 t/ A1 E6 O  n
  78.    
      q/ X: r# y  b: }
  79.    
    " j" _- d1 g0 B8 u: H1 f
  80. }! z' r9 X! b  W+ e1 l, {
  81. void Timer_Config(void): V' {" m* s0 b$ K
  82. {
    ! R- c! o0 m- U5 w( N0 v: o
  83. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);* N6 p. \1 f5 G- a, P
  84. 7 ?8 B/ a: |  a( [0 y$ C" S0 h
  85.   TIM_DeInit(TIM3);
    + m0 z, G& ?; e7 m& J% J5 r
  86.   TIM_TimeBaseStructure.TIM_Period = 999;  //在下一个更新事件装入活动的自动重装载寄存器周期的值. n$ C: j; w) C! e
  87.   TIM_TimeBaseStructure.TIM_Prescaler = 0; //  设置了用来作为 TIMx 时钟频率除数的预分频值
    2 L8 Q8 _! P4 R) I# f8 d
  88.   TIM_TimeBaseStructure.TIM_ClockDivision = 0;   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    " ?3 f& `" j/ D  @5 Y& i
  89.   TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
    + a0 e: ?7 K2 q9 S3 J( K
  90.   /* PWM1 Mode configuration: Channel3 */1 ]& s  M! w: k- E0 [3 `0 O- _8 v8 c
  91.   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;  //TIM_OCMode: f3 Q  U5 e% n  {1 O, n) C" }
  92.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    & c0 ?# _, f) E( B& f
  93.   TIM_OCInitStructure.TIM_Pulse = CCR3_Val;      //设置了待装入捕获比较寄存器的值. b& ]) u3 s7 c1 h/ _- I
  94.   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //TIM_OCPolarity :TIM 输出比较极性高/ E* W+ y! b# d9 |$ l3 t* Z
  95.   TIM_OC3Init(TIM3, &TIM_OCInitStructure);
    % W3 n2 w. x; z- W8 s3 M
  96.   TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能或者失能 TIM3 在 CCR3 上的预装载寄存器9 n$ _* f$ A7 ?9 U* n
  97.   /* PWM1 Mode configuration: Channel4 */5 g3 n; O: o* W9 Z
  98.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; . F5 _+ q2 _4 {
  99.   TIM_OCInitStructure.TIM_Pulse = CCR4_Val;
    : |6 Y- f& i6 m( T" A
  100.   TIM_OC4Init(TIM3, &TIM_OCInitStructure);
    1 W2 q% r9 y# [# F2 ^
  101.   TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
    ( o7 m: w1 F. z9 J; Y
  102.   /* TIM3 enable counter */
    1 ^$ q1 w' |: C( l
  103.   TIM_Cmd(TIM3, ENABLE);          //开启时钟,别落下% a& Y/ u! L7 d1 b, [+ E
  104. }
    * R, |# O  W) l* P
  105. /**  J5 B: w+ t" V  b+ Y( a; f6 t
  106.   * @brief  EXTI_Config Program.
    0 q: F" s# ^7 A( b. M6 N
  107.   * @param  None5 I9 ^- M) p3 l3 c
  108.   * @retval : None1 z$ h' y# V3 \; J. Y8 h) u
  109.   */1 c3 ?9 u# _" a- h7 `0 k
  110. 2 _5 H& R; }2 f& v$ E" N, W
  111. /**
    ( F, o" a' s* X# K  p/ y" k
  112.   * @brief  Configures the nested vectored interrupt controller.. A8 I( q, T4 Q
  113.   * @param  None
    0 t) T: K8 O. ^* l+ a6 J* I$ O" @
  114.   * @retval : None
    $ b. o# y+ |9 B4 `
  115.   */- j: Z4 I2 p- r& X
  116. ) m& R5 q" e+ ]0 e/ h
  117. #ifdef  USE_FULL_ASSERT
    3 g+ }* o, s9 H9 ~$ z: O
  118. /**
    . l& [& P, r3 ?! a% Y& _
  119.   * @brief  Reports the name of the source file and the source line number
    3 M* f+ v- o% H, G  Q
  120.   *   where the assert_param error has occurred.; R& f0 q& K/ S( v- P) s
  121.   * @param file: pointer to the source file name
    ! a1 H  A4 ?& S3 R/ j2 I+ n
  122.   * @param line: assert_param error line source number6 k% F) m- _  s8 Z2 s* b6 O
  123.   * @retval : None
    . O. A" }9 G& G% `' S; G
  124.   */, g1 [8 }, Z4 u6 |& D1 t3 s: s1 b  v
  125. void assert_failed(uint8_t* file, uint32_t line), D( ]% N- q7 [, e. j; s. k
  126. {
    6 h* n8 _5 \- O# k; M  e! {
  127.   /* User can add his own implementation to report the file name and line number,
      @3 K; @: ~9 ]7 j/ w2 x
  128.      ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
    ' ]5 ^) B' G( u2 Z+ @
  129.   /* Infinite loop */! V2 F2 L% I6 V5 Z+ R. J- P
  130.   while (1)
    9 W# h0 B4 j- S+ v! W
  131.   {
    $ ^" ~( ^$ U! x. f7 C, O8 g5 }
  132.   }, w# d7 V6 v; O7 Z
  133. }3 I/ `9 W4 Q/ |; B' e
  134. #endif
    0 j8 H/ p4 `. }  A
  135. /**
    2 Z; k) L, H$ ~0 ~
  136.   * @}* }+ Q- }7 T8 i6 i8 Q; \
  137.   */0 ~& N9 h& L/ {* A4 T6 B3 C

  138. . Q. z, I0 i* o" o5 x1 m9 Y6 }
  139. /******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
复制代码

) p. f& ~7 [6 y  t
收藏 评论0 发布时间:2022-1-21 22:18

举报

0个回答

所属标签

相似技术帖

官网相关资源

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