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

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

[复制链接]
STMCU小助手 发布时间:2022-1-21 22:18
复用功能没有重映射部分重映射完全重映射
TIM3_CH1PA6PB4PC6
CH2PA7PB5PC7
CH3PB0PB0PC8
CH4PB1PB1PC9
  1. /**重映射 tim3 使得PC7 PC8输出Pwm波   
    : T5 V/ h* d2 Y) A4 \, n
  2.   ******************************************************************************  N) a8 ]6 w$ d; o  e) T( Y
  3.   * @file    Project/Template/main.c
    * o1 D, D+ l2 E1 r3 D4 o
  4.   * @author  MCD Application Team
      z5 U; o6 a' D# P0 h
  5.   * @version V3.0.0
      D' A# `- ~0 N, p. p7 z8 a' B
  6.   * @date    04/06/2009
    5 @, ?& u0 \" H+ ?- \* J
  7.   * @brief   Main program body
    " [% j: r8 |% `% I. U
  8.   ******************************************************************************3 {: c, k& F% C# P0 f+ d. p* J( ~
  9.   * @copy
    % R: z. Z% m! O4 t! {
  10.   *5 {9 b/ r7 i: Q+ ^* r
  11.   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS) x' T4 h" x9 \. I
  12.   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE! z& e$ d7 d1 z( G0 t
  13.   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
    0 H. ^5 l- j9 ^5 f4 D  ]' X2 r1 }! D
  14.   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
    ; C  f9 f7 |6 n9 S- m( A  y
  15.   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE1 R6 T$ Q' p" W. L* e- a1 p: q
  16.   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
    " J0 _9 Z: E! R/ C. A4 V2 D
  17.   *
    ! S8 N2 u7 l. |' n
  18.   * <h2><center>© COPYRIGHT 2009 STMicroelectronics</center></h2>
    1 C" u& Z7 Z, B1 k( C( o. }* [! j
  19.   */
    . E2 f5 v( i- ]# C$ o  y0 W
  20. /* Includes ------------------------------------------------------------------*/
    0 k# V! @1 _# J9 b6 c
  21. #include "stm32f10x.h"
    + U6 k8 p4 c8 c
  22. #include "stm32f10x_tim.h"
    $ z1 N; [1 o" W5 j7 C! e* l( V- M
  23. #include "misc.h"% Z* U. q3 z# s, o% H
  24. void GPIO_AFIODeInit(void);//这个函数不能落下,否则不能成功) g/ E* R- E! A$ C, l% c
  25. TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;//配置PWM需要使用的结构体声名( z$ K& X+ c5 z7 G
  26. TIM_OCInitTypeDef          TIM_OCInitStructure;$ i! n' F! @' C. c8 A. m
  27. u16 CCR3_Val =250;. ^9 `  Z" h, Z- d# T7 {
  28. u16 CCR4_Val =250;
    1 b( r. ]( a0 L, {
  29.                 . W2 w4 u- B5 i& Q+ S1 f, q
  30. void GPIO_Config(void);, M7 M+ \: A: j4 E! o
  31. void Timer_Config(void);6 w+ m$ Q% ~+ p* m6 ?
  32. /**
    2 X+ u3 U% l5 q1 r5 D( @
  33.   * @brief  Delay program.
    ! R1 b) H5 E4 j8 U
  34.   * @param  None! k  W+ _2 t# ^) d# N
  35.   * @retval : None
    $ f5 k6 ]- R& c% p' t: O
  36.   */2 E0 n* v, D% z3 v+ n
  37. void  Delay (u32 nCount)
    8 G3 }7 y+ C) ~1 s; g7 k
  38. {% o7 l9 u0 J, Q& ^1 A$ @
  39.   for(; nCount != 0; nCount--);
    . d+ P) ]4 H* e0 L
  40. }
    5 P$ ^) K1 E2 d3 s& \
  41. /**; I9 W2 ~8 P; b
  42.   * @brief  Main program.
    " x% J/ Z- w! N  W( p( B5 p
  43.   * @param  None( D) u& V  N! K( G
  44.   * @retval : None
    ( r3 G6 K3 B2 R: s
  45.   */5 t/ \9 X( D0 d: w' \7 |& m
  46. int main(void)
    ( {8 g- }6 F) T0 j1 \: H' O
  47. {
    2 A) w% c1 l9 F. a3 \5 l9 H5 O  [
  48. /* Setup STM32 system (clock, PLL and Flash configuration) */+ R- a, }) }/ s* H' l" W, T
  49. SystemInit();: x/ Z, m! Z2 m( M* S
  50. GPIO_Config();% n0 u1 o1 O; s: k7 B- M# ~
  51. Timer_Config();
    & U5 R3 Z& Z) u; J! q" z' Q8 }
  52. /* Infinite loop */9 X( u- p; d8 u
  53. while (1) {% S  v* n4 I0 h' b6 r% p6 S0 g
  54.                }
    * M4 j, }3 ~5 ~6 K
  55. }
    , w/ y' z  A7 ~' _) [/ q
  56. /**
    ; y: ~( f) z0 m' m
  57.   * @brief  GPIO_Config program.
    4 I4 u' A6 ]& ?+ d
  58.   * @param  None# x0 c- T  {, R9 A1 g  C
  59.   * @retval : None, a- G" }0 B8 N2 L8 p( @0 l
  60.   */7 A: w) [! K* B# b( ^' u) A/ Q  U
  61. void GPIO_Config(void)# e! b# S5 T. N4 h$ l1 [4 u# H' N
  62. {
    . x- C, G/ T6 X
  63.   GPIO_InitTypeDef GPIO_InitStructure;
    ( F0 i- z& I+ O: ?7 t4 z7 y
  64.    
    4 i8 b! r3 ]5 _( [
  65.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |            RCC_APB2Periph_GPIOC |RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE);
    " i2 O" i; s! W4 A' |
  66. ; m$ f0 T/ p0 {7 S9 {2 N
  67.    GPIO_AFIODeInit();  //刚开始没有这个语句,所以一直没有重映射成功2 J) k# ^/ t3 R! Y& M% Q' x/ d$ s
  68.    GPIO_PinRemapConfig(GPIO_FullRemap_TIM3 , ENABLE); //这个就是重映射功能函数
    " ]0 B! ?1 F( e& U/ T; u
  69. /*GPIOA Configuration: TIM3 channel 3 and 4 as alternate function push-pull */$ D; h5 N+ [) O* l1 h* I- n
  70.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 | GPIO_Pin_1;* r1 G( E  q7 j7 @$ q5 f* |) e! [* k
  71.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //这里也要注意) G' c3 s& @( r3 Q9 r
  72.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    : d1 d" x% {) U
  73.   GPIO_Init(GPIOB, &GPIO_InitStructure); //这四句是为了校验究竟PB0,PB1是否还有PWM输出
    " }# {+ ^4 `% `! Y8 F7 N: J; U" F5 J
  74.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8 | GPIO_Pin_9;9 s6 _) L) @+ W( v6 c
  75.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    / d) ^% q( Y3 e7 L3 X  s0 ^
  76.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 7 C9 U0 E) r, |
  77.   GPIO_Init(GPIOC, &GPIO_InitStructure);; g7 u7 m4 k& ]+ x
  78.    7 @4 M+ l1 h1 j1 |9 l; V7 `
  79.    
    ) H0 T9 b5 R" W8 C7 h2 E  ^
  80. }5 d0 g% L9 r& F( D
  81. void Timer_Config(void)2 |0 L  U) {- \7 ^. q. T. F
  82. {
    : g0 n% x* y2 W* D) C* z
  83. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);; i; I  Y$ e( H1 o; g$ t
  84. ( \* P* o. z. H- _! l' v/ E
  85.   TIM_DeInit(TIM3);, h( ^! ^0 b2 V; A* X/ H
  86.   TIM_TimeBaseStructure.TIM_Period = 999;  //在下一个更新事件装入活动的自动重装载寄存器周期的值
    ' d9 e9 I  @8 e( y, t; _
  87.   TIM_TimeBaseStructure.TIM_Prescaler = 0; //  设置了用来作为 TIMx 时钟频率除数的预分频值
      b% g. G. |+ t* B
  88.   TIM_TimeBaseStructure.TIM_ClockDivision = 0;   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; " r9 u$ u* u+ u1 g- S
  89.   TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
    / r2 z# ^7 W0 Q1 Y% J/ R  J
  90.   /* PWM1 Mode configuration: Channel3 */( B% `: u3 _4 a0 A' v3 g" @
  91.   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;  //TIM_OCMode( c' t1 [' _* T* x
  92.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    2 e' ?- R7 f8 t6 X
  93.   TIM_OCInitStructure.TIM_Pulse = CCR3_Val;      //设置了待装入捕获比较寄存器的值0 Q$ b! T/ x1 U/ T* {
  94.   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //TIM_OCPolarity :TIM 输出比较极性高
    8 b3 A' M( Q* w( g9 n& j
  95.   TIM_OC3Init(TIM3, &TIM_OCInitStructure);
    2 }- q& J% V) ]1 V5 ~+ R
  96.   TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能或者失能 TIM3 在 CCR3 上的预装载寄存器0 V( T9 {0 G; W9 _( A
  97.   /* PWM1 Mode configuration: Channel4 */& l) {1 z9 K3 C& i4 D+ S
  98.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; ) B. H% Y2 Q$ T$ l# I+ T- ~4 z  d, s
  99.   TIM_OCInitStructure.TIM_Pulse = CCR4_Val;7 t9 H+ O. F( S, r" @" @
  100.   TIM_OC4Init(TIM3, &TIM_OCInitStructure);
    8 y% h# _. ~$ \2 Q, O  `
  101.   TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);2 r1 g# ^' }1 f/ z3 u
  102.   /* TIM3 enable counter */* a$ N" r: }1 c& b' a( ~6 m
  103.   TIM_Cmd(TIM3, ENABLE);          //开启时钟,别落下
    + G# a6 U' f7 r5 k) m" I
  104. }9 j. K4 J! |$ m/ d! `0 o' b
  105. /**9 a- j6 E! ?, d8 Y7 ]
  106.   * @brief  EXTI_Config Program.
    2 b2 t7 l$ z; P2 F4 U% @
  107.   * @param  None2 y' u* h/ F/ d' m$ ^, O1 e& V
  108.   * @retval : None
    ; ^, g6 r8 c+ x! ^' Q
  109.   */0 L* K. D) }/ c  S7 X- K5 C

  110. 2 _5 X9 h+ A8 D' W
  111. /**) M2 p9 h; K* r
  112.   * @brief  Configures the nested vectored interrupt controller.
    . y9 n& X0 {- o4 H7 x9 d
  113.   * @param  None: G4 r' j8 E( T" K/ ?( e9 c2 m/ i% Y
  114.   * @retval : None
    $ s* z# H+ c8 ?
  115.   */
      v9 D4 }& Y& p
  116. 9 u# ~8 K2 {9 ^  b* {
  117. #ifdef  USE_FULL_ASSERT% f! t. F" M5 c1 Z
  118. /**
    $ U$ B3 q$ E0 U2 ~6 M- O/ l: H
  119.   * @brief  Reports the name of the source file and the source line number
    ' L! e2 a; ?( B
  120.   *   where the assert_param error has occurred.# N9 h# a: K' ^: t
  121.   * @param file: pointer to the source file name8 O7 i3 C$ k+ x% }/ [% U& T7 f
  122.   * @param line: assert_param error line source number
    $ A! S: o9 I' X6 @; Z* Z* _
  123.   * @retval : None
    7 k2 P' g0 F$ w) Q9 I
  124.   */7 v5 d0 M; V* G8 _! n
  125. void assert_failed(uint8_t* file, uint32_t line)4 O& O' C. ?. Y6 M# L
  126. {
    2 f. Z, w* R6 L0 ]# {2 C
  127.   /* User can add his own implementation to report the file name and line number," C0 d3 U" t, H9 D+ V8 v1 l4 R
  128.      ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
    - F: ~5 F, M% h( d2 C  y
  129.   /* Infinite loop */, n- T0 `/ N( B. g: z. M9 _7 s
  130.   while (1)
    3 G: ?6 _  t, R6 W0 O
  131.   {
    8 d8 G* J5 G. j# c1 i7 }, o
  132.   }
    ! P+ f! ^8 j0 g7 n& K0 R) C
  133. }; i/ d8 M, A0 ^" ~% v* d
  134. #endif
    ; c8 U/ R- e2 j% c: v( ]
  135. /**: _, f3 y- r% @
  136.   * @}
      W1 E# i2 p5 x. y
  137.   */
    / ?# e# H& ]9 X/ G9 ]6 r7 S

  138. ' Q$ l7 H7 q9 x( |- Y! ^
  139. /******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
复制代码
. S* f! ?  x: e' E) C; p
收藏 评论0 发布时间:2022-1-21 22:18

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版