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

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

[复制链接]
STMCU小助手 发布时间:2022-1-21 22:18
复用功能没有重映射部分重映射完全重映射
TIM3_CH1PA6PB4PC6
CH2PA7PB5PC7
CH3PB0PB0PC8
CH4PB1PB1PC9
  1. /**重映射 tim3 使得PC7 PC8输出Pwm波   
    8 ~9 d+ `. r6 @7 W6 G; u& w' k9 s! g2 _
  2.   ******************************************************************************
    & ~4 l9 U2 X+ f
  3.   * @file    Project/Template/main.c7 d6 h* q% C. u4 I+ U, J, E
  4.   * @author  MCD Application Team
    * S5 X1 L6 e$ K0 t  A2 f$ Z
  5.   * @version V3.0.0
    - G5 T) f& [- y/ e8 H4 n% z+ w
  6.   * @date    04/06/2009
    4 r+ E' J2 ?4 l2 z! M
  7.   * @brief   Main program body, U- _. J" h5 C  ^6 V1 z& W
  8.   ******************************************************************************
    2 b; C8 J* T8 w' i; a; ?
  9.   * @copy: a8 R; m; A: Q! S
  10.   *
    ! A' j5 r- t- ]
  11.   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS1 m4 v& a+ U! W4 _5 p) {
  12.   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE7 J7 {9 Q) ~7 Z( B# Z, D0 t
  13.   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY, n% p! a+ Z! ^5 j: e" I
  14.   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING) M' a! D2 p: L+ {7 t
  15.   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE8 W( }1 O: y, i! A2 F- W
  16.   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.! }% j) b& A" _2 U
  17.   *+ A- M4 Z. N9 n5 z2 f* V' U- y4 t! B
  18.   * <h2><center>© COPYRIGHT 2009 STMicroelectronics</center></h2>! T/ G& |; ?1 S5 w! u) J7 L/ p& S
  19.   */. ~8 R3 k3 E6 z5 {  V% u; f
  20. /* Includes ------------------------------------------------------------------*/
    . K( ~- z7 |0 B
  21. #include "stm32f10x.h"4 n/ G3 L. [  e) B
  22. #include "stm32f10x_tim.h"
    5 j/ M/ @4 }! t( h% W
  23. #include "misc.h"1 h4 [- v) I! ]$ B* c
  24. void GPIO_AFIODeInit(void);//这个函数不能落下,否则不能成功  d1 G# ^5 J# ]2 o. O
  25. TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;//配置PWM需要使用的结构体声名
    - H+ X3 s; ^; J6 L9 m( w8 g0 ^# e
  26. TIM_OCInitTypeDef          TIM_OCInitStructure;. y! }/ ~9 D, n0 ^
  27. u16 CCR3_Val =250;# I) r, L! |9 x, N! _; r6 Z
  28. u16 CCR4_Val =250;2 T% A2 m5 V% i# y' c7 p8 z
  29.                 & P& y5 {: A5 w% z2 a$ n+ O
  30. void GPIO_Config(void);
    + w$ s; @( ~7 d+ x. M5 h) L
  31. void Timer_Config(void);0 p% d7 y1 M5 p4 i2 e1 s; c
  32. /**: D0 [- j* @8 e$ }0 ?$ Y
  33.   * @brief  Delay program.
    3 H0 w  f9 Z8 }, p3 T' Q
  34.   * @param  None
    , O( @" ^; g8 [
  35.   * @retval : None8 x7 G+ c' w) z) Z% H3 b0 t
  36.   */
    5 D% d( s) X( q* g, x7 H
  37. void  Delay (u32 nCount)* S1 h/ A1 l4 h
  38. {# g- w+ z4 @/ S# k. T+ q8 t: F6 ?
  39.   for(; nCount != 0; nCount--);
    / K+ ]- S1 t6 ]+ n/ q
  40. }
    - f1 Q# b( q5 c. ?
  41. /**9 Q, e1 e& I3 A& ~# J
  42.   * @brief  Main program.' {+ J5 x- c4 A: @, D* ^1 q- ~7 \1 l
  43.   * @param  None& @/ U  e; d8 [; ]5 E
  44.   * @retval : None
    , j7 V& I/ X* Z# w
  45.   */6 a. @1 C% @( E
  46. int main(void)
    2 \1 `8 f/ j& }9 U: _
  47. {
    , L' E6 J' j) f6 u* Y
  48. /* Setup STM32 system (clock, PLL and Flash configuration) */% D( |! Q6 V, L5 P8 }
  49. SystemInit();
    9 ^+ j1 q3 B+ x: A: a& [7 y
  50. GPIO_Config();  c4 k; E# P) R$ b& Q& n1 T
  51. Timer_Config();# d& q+ R" k+ [; ?
  52. /* Infinite loop */
    ) R$ r$ J# D% Z
  53. while (1) {
      P+ A, T  R! d7 {5 A  f
  54.                }3 i; [1 Q. @6 O2 U/ y/ ]
  55. }5 h2 R' c  N: {" u
  56. /**, N6 D) q4 ^8 E5 J5 D. i
  57.   * @brief  GPIO_Config program.
    4 Y% J' o- J# L1 h
  58.   * @param  None
    ) ^# N7 C, k5 I$ E9 @7 U
  59.   * @retval : None
    * A- |1 j' t: y9 t& f
  60.   */
    8 Y+ O7 k. R, l5 O" `8 J7 r8 @
  61. void GPIO_Config(void), ]1 G) [! o4 v9 |
  62. {( `& i4 y$ v1 F# f6 I
  63.   GPIO_InitTypeDef GPIO_InitStructure;  M+ M9 u! ^9 W4 l$ n  O* p
  64.    1 d" C3 y% O  \4 N$ ~) K1 g
  65.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |            RCC_APB2Periph_GPIOC |RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE);
    3 S- V2 Q+ d+ \/ \. W

  66. ! `- B& P( k$ D: U, Z5 N- j* H3 V
  67.    GPIO_AFIODeInit();  //刚开始没有这个语句,所以一直没有重映射成功
    9 X( s& B# [) l0 }% S
  68.    GPIO_PinRemapConfig(GPIO_FullRemap_TIM3 , ENABLE); //这个就是重映射功能函数; T' x# S6 v" l- |
  69. /*GPIOA Configuration: TIM3 channel 3 and 4 as alternate function push-pull */
    9 T7 {$ z! h* b" ~! d& P1 Q; }7 U4 k
  70.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 | GPIO_Pin_1;: U$ v3 `; {" C" H9 ~- o& m
  71.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //这里也要注意
    ! [- ?. @- B; R
  72.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    : a& `3 P- F( I3 M
  73.   GPIO_Init(GPIOB, &GPIO_InitStructure); //这四句是为了校验究竟PB0,PB1是否还有PWM输出 & s) |, y# i+ l2 h8 L
  74.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8 | GPIO_Pin_9;
    1 J7 A. F& `/ j: ?! V6 _
  75.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;7 ], V% f; h6 o8 E0 c5 b! i
  76.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; * ^. R+ q$ c) H4 b/ s! B3 u; X
  77.   GPIO_Init(GPIOC, &GPIO_InitStructure);
    ( C- g- c* @0 W, A4 p% x$ e
  78.    ( J5 W' j5 r$ G4 {1 S
  79.    
      W7 N% l- y4 f1 G
  80. }
    8 R* k0 L2 U/ z* `3 A8 [
  81. void Timer_Config(void)
    7 l& c$ G& K% ^% j% g/ e+ S
  82. {) x% Z  ?' K4 s, x# ~. g
  83. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);1 w- u0 ~( J! h" Q
  84. 7 f. [+ w* J, `! W% J
  85.   TIM_DeInit(TIM3);; G  ~: C. \  R) S9 i
  86.   TIM_TimeBaseStructure.TIM_Period = 999;  //在下一个更新事件装入活动的自动重装载寄存器周期的值+ \: d' a) l! n# P* f* l
  87.   TIM_TimeBaseStructure.TIM_Prescaler = 0; //  设置了用来作为 TIMx 时钟频率除数的预分频值! l- F: O2 b: p3 r. M
  88.   TIM_TimeBaseStructure.TIM_ClockDivision = 0;   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + m7 K5 Q0 _. u" P
  89.   TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
    ; g3 I9 B0 D. r. v2 c" D
  90.   /* PWM1 Mode configuration: Channel3 */2 K* |  i: ?* |
  91.   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;  //TIM_OCMode
    : Q/ D) [$ C. j4 W% m8 L
  92.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;3 F6 I; b, J; }" J
  93.   TIM_OCInitStructure.TIM_Pulse = CCR3_Val;      //设置了待装入捕获比较寄存器的值8 q. O* p) b0 s) Q( r* X
  94.   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //TIM_OCPolarity :TIM 输出比较极性高. Q2 G: P" H1 i# k
  95.   TIM_OC3Init(TIM3, &TIM_OCInitStructure);. e0 W) _# l9 z& X5 p
  96.   TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能或者失能 TIM3 在 CCR3 上的预装载寄存器/ s/ k+ n- ^& b8 ]9 ]2 r
  97.   /* PWM1 Mode configuration: Channel4 */
    $ y: _' w# C; G4 u4 c% ^% R% n/ s
  98.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    * M6 ?; N9 D, @2 }) O% g: Y
  99.   TIM_OCInitStructure.TIM_Pulse = CCR4_Val;
    . [! q9 a6 e, S3 J7 W
  100.   TIM_OC4Init(TIM3, &TIM_OCInitStructure);/ Y. ^' y9 P; g- S2 @0 q
  101.   TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
    3 T+ R0 ^# Y5 G4 I
  102.   /* TIM3 enable counter */
    # B. N. ~4 m7 b% m9 E
  103.   TIM_Cmd(TIM3, ENABLE);          //开启时钟,别落下
    + L& T8 L0 \$ i: ?
  104. }
    4 `" D9 z; K+ ]& b4 m
  105. /**
    . `) Y* Q* k2 ]7 I/ P/ }9 S+ N
  106.   * @brief  EXTI_Config Program.
    " Z% \5 Y& t* S+ \8 j
  107.   * @param  None1 B, `8 H: c5 s6 b: Z! M! F# S
  108.   * @retval : None. }4 L/ I* f! f; s' m5 q+ j
  109.   */7 M& C6 Z$ ~* E& u* \0 n

  110. 9 F* Z/ E: L7 A) R5 U. n8 \1 x1 n
  111. /**5 J5 f. F7 W# t; d2 b0 |
  112.   * @brief  Configures the nested vectored interrupt controller.
    4 w, Y3 c$ d4 N* a- q
  113.   * @param  None  _" t3 k1 I- Y. I% z
  114.   * @retval : None/ `' ~. y* o) p$ g$ c6 @
  115.   */1 J" G1 {% _6 T, X) g3 b0 g% D, F
  116. 5 B1 I- k! ]8 }) Y# [
  117. #ifdef  USE_FULL_ASSERT
    3 }, T+ B5 k6 ^( Q2 U
  118. /**
    % i# ]4 f( n' m, }7 S3 a
  119.   * @brief  Reports the name of the source file and the source line number
    0 k; A& U  k' e4 q( I: a4 X* Y  h
  120.   *   where the assert_param error has occurred./ \4 t" }' T( R- _& {9 h
  121.   * @param file: pointer to the source file name
    9 K' G3 Q0 \! g) d" z  b  p( V
  122.   * @param line: assert_param error line source number" S( d' Y- R+ M7 ~' n6 E! z, G
  123.   * @retval : None
    2 n( N! i. b! x0 x
  124.   */
    4 a+ W0 y! p" A1 H
  125. void assert_failed(uint8_t* file, uint32_t line)
    & T8 h/ a8 W" n. {. y
  126. {% T& H0 d* o! `- n. m
  127.   /* User can add his own implementation to report the file name and line number,
    3 {' }  F7 m4 j9 u- e. ^$ f
  128.      ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */7 g6 l4 ^2 G" u8 e8 Q0 @
  129.   /* Infinite loop */
    ) Z9 Z- S6 C1 a  r
  130.   while (1)
    $ E4 T! {; U: n
  131.   {
    ' L. _& F: t! ?$ C' L
  132.   }8 |0 L5 |' t4 a
  133. }. E, T( F* b9 `
  134. #endif+ ~5 F' w# ~; n
  135. /**
    & b$ I4 `  C& C+ q1 f) h0 n
  136.   * @}1 y0 _: d& s/ v9 f/ l
  137.   */
    - }8 \' `% E7 m5 }. Z9 ?
  138. ( N4 |8 N8 u" _+ P( _: f: B% d  w
  139. /******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
复制代码

4 ~* l8 b. {3 N1 F! T
赞 收藏 评论0 发布时间:2022-1-21 22:18

举报

0个回答

所属标签

相似技术帖

官网相关资源

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