野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9359|回复: 2

为何配置了3个定时器12个通道输出PWM,但是只有前4个GPIO有输出呢??

[复制链接]
发表于 2017-9-13 18:38:46 | 显示全部楼层 |阅读模式
【新手求助】
想用3个定时器12个通道来分别控制6个驱动(每两个通道控制一个驱动),但是接在示波器上只有一个定时器(TIM8)的四个通道好用,其他都没有波形,求问这是怎么一回事呢,应该怎样改?


  1. /********************motor.c**************************/
  2. #include "motor.h"
  3. // ʹÓà TIM1
  4. static void ADVANCE_TIM1_GPIO_Config(void)
  5. {
  6. GPIO_InitTypeDef GPIO_InitStructure;

  7. RCC_APB2PeriphClockCmd(ADVANCE_TIM1_CH1_GPIO_CLK|\
  8.              ADVANCE_TIM1_CH2_GPIO_CLK|\
  9.              ADVANCE_TIM1_CH3_GPIO_CLK|\
  10.              ADVANCE_TIM1_CH4_GPIO_CLK, ENABLE);

  11. GPIO_InitStructure.GPIO_Pin = ADVANCE_TIM1_CH1_PIN|\
  12.                 ADVANCE_TIM1_CH2_PIN|\
  13.                 ADVANCE_TIM1_CH3_PIN|\
  14.                 ADVANCE_TIM1_CH4_PIN;
  15. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  16. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  17. GPIO_Init(ADVANCE_TIM1_CH1_PORT, &GPIO_InitStructure);
  18. GPIO_Init(ADVANCE_TIM1_CH2_PORT, &GPIO_InitStructure);
  19. GPIO_Init(ADVANCE_TIM1_CH3_PORT, &GPIO_InitStructure);
  20. GPIO_Init(ADVANCE_TIM1_CH4_PORT, &GPIO_InitStructure);
  21. }
  22. static void ADVANCE_TIM1_Mode_Config(void)
  23. {
  24. ADVANCE_TIM1_APBxClock_FUN(ADVANCE_TIM1_CLK,ENABLE);

  25. /* Time base Configuration */
  26. TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

  27. TIM_TimeBaseStructure.TIM_Period=TIM_PERIOD;
  28. TIM_TimeBaseStructure.TIM_Prescaler = TIM_PSC;
  29. TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  30. TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
  31. TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
  32. TIM_TimeBaseInit(ADVANCE_TIM1, &TIM_TimeBaseStructure);

  33. /* PWM1 Mode Configuration */
  34. TIM_OCInitTypeDef  TIM_OCInitStructure;
  35. TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  36. TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  37. TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

  38. /* Channel 1 */
  39. TIM_OCInitStructure.TIM_Pulse = TIM_PULSE;
  40. TIM_OC1Init(ADVANCE_TIM1, &TIM_OCInitStructure);
  41. TIM_OC1PreloadConfig(ADVANCE_TIM1, TIM_OCPreload_Enable);

  42. /* Channel 2 */
  43. TIM_OCInitStructure.TIM_Pulse = TIM_PULSE;
  44. TIM_OC2Init(ADVANCE_TIM1, &TIM_OCInitStructure);
  45. TIM_OC2PreloadConfig(ADVANCE_TIM1, TIM_OCPreload_Enable);

  46. /* Channel 3 */
  47. TIM_OCInitStructure.TIM_Pulse = TIM_PULSE;
  48. TIM_OC3Init(ADVANCE_TIM1, &TIM_OCInitStructure);
  49. TIM_OC3PreloadConfig(ADVANCE_TIM1, TIM_OCPreload_Enable);
  50. /* Channel 4 */
  51. TIM_OCInitStructure.TIM_Pulse = TIM_PULSE;
  52. TIM_OC4Init(ADVANCE_TIM1, &TIM_OCInitStructure);
  53. TIM_OC4PreloadConfig(ADVANCE_TIM1, TIM_OCPreload_Enable);


  54. TIM_Cmd(ADVANCE_TIM1, ENABLE);
  55. TIM_CtrlPWMOutputs(ADVANCE_TIM1, ENABLE);
  56. }
  57. static void ADVANCE_TIM1_Init(void)
  58. {
  59. ADVANCE_TIM1_GPIO_Config();
  60. ADVANCE_TIM1_Mode_Config();
  61. }
  62. // ʹÓà TIM8
  63. static void ADVANCE_TIM8_GPIO_Config(void)
  64. {
  65. GPIO_InitTypeDef GPIO_InitStructure;

  66. RCC_APB2PeriphClockCmd(ADVANCE_TIM8_CH1_GPIO_CLK|\
  67.              ADVANCE_TIM8_CH2_GPIO_CLK|\
  68.              ADVANCE_TIM8_CH3_GPIO_CLK|\
  69.              ADVANCE_TIM8_CH4_GPIO_CLK, ENABLE);

  70. GPIO_InitStructure.GPIO_Pin = ADVANCE_TIM8_CH1_PIN|\
  71.                 ADVANCE_TIM8_CH2_PIN|\
  72.                 ADVANCE_TIM8_CH3_PIN|\
  73.                 ADVANCE_TIM8_CH4_PIN;
  74. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  75. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  76. GPIO_Init(ADVANCE_TIM8_CH1_PORT, &GPIO_InitStructure);
  77. GPIO_Init(ADVANCE_TIM8_CH2_PORT, &GPIO_InitStructure);
  78. GPIO_Init(ADVANCE_TIM8_CH3_PORT, &GPIO_InitStructure);
  79. GPIO_Init(ADVANCE_TIM8_CH4_PORT, &GPIO_InitStructure);
  80. }
  81. static void ADVANCE_TIM8_Mode_Config(void)
  82. {
  83. ADVANCE_TIM8_APBxClock_FUN(ADVANCE_TIM8_CLK,ENABLE);

  84. /* Time base Configuration */
  85. TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

  86. TIM_TimeBaseStructure.TIM_Period=TIM_PERIOD;
  87. TIM_TimeBaseStructure.TIM_Prescaler = TIM_PSC;
  88. TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  89. TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
  90. TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
  91. TIM_TimeBaseInit(ADVANCE_TIM8, &TIM_TimeBaseStructure);

  92. /* PWM1 Mode Configuration */
  93. TIM_OCInitTypeDef  TIM_OCInitStructure;
  94. TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  95. TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  96. TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

  97. /* Channel 1 */
  98. TIM_OCInitStructure.TIM_Pulse = TIM_PULSE;
  99. TIM_OC1Init(ADVANCE_TIM8, &TIM_OCInitStructure);
  100. TIM_OC1PreloadConfig(ADVANCE_TIM8, TIM_OCPreload_Enable);

  101. /* Channel 2 */
  102. TIM_OCInitStructure.TIM_Pulse = TIM_PULSE;
  103. TIM_OC2Init(ADVANCE_TIM8, &TIM_OCInitStructure);
  104. TIM_OC2PreloadConfig(ADVANCE_TIM8, TIM_OCPreload_Enable);

  105. /* Channel 3 */
  106. TIM_OCInitStructure.TIM_Pulse = TIM_PULSE;
  107. TIM_OC3Init(ADVANCE_TIM8, &TIM_OCInitStructure);
  108. TIM_OC3PreloadConfig(ADVANCE_TIM8, TIM_OCPreload_Enable);
  109. /* Channel 4 */
  110. TIM_OCInitStructure.TIM_Pulse = TIM_PULSE;
  111. TIM_OC4Init(ADVANCE_TIM8, &TIM_OCInitStructure);
  112. TIM_OC4PreloadConfig(ADVANCE_TIM8, TIM_OCPreload_Enable);


  113. TIM_Cmd(ADVANCE_TIM8, ENABLE);
  114. TIM_CtrlPWMOutputs(ADVANCE_TIM8, ENABLE);
  115. }
  116. static void ADVANCE_TIM8_Init(void)
  117. {
  118. ADVANCE_TIM8_GPIO_Config();
  119. ADVANCE_TIM8_Mode_Config();
  120. }
  121. // ʹÓà TIM3
  122. static void GENERAL_TIM3_GPIO_Config(void)
  123. {
  124. GPIO_InitTypeDef GPIO_InitStructure;

  125. RCC_APB2PeriphClockCmd(GENERAL_TIM3_CH1_GPIO_CLK|\
  126.              GENERAL_TIM3_CH2_GPIO_CLK|\
  127.              GENERAL_TIM3_CH3_GPIO_CLK|\
  128.              GENERAL_TIM3_CH4_GPIO_CLK, ENABLE);

  129. GPIO_InitStructure.GPIO_Pin = GENERAL_TIM3_CH3_PIN|\
  130.                 GENERAL_TIM3_CH3_PIN|\
  131.                 GENERAL_TIM3_CH3_PIN|\
  132.                 GENERAL_TIM3_CH3_PIN;
  133. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  134. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  135. GPIO_Init(GENERAL_TIM3_CH1_PORT, &GPIO_InitStructure);
  136. GPIO_Init(GENERAL_TIM3_CH2_PORT, &GPIO_InitStructure);
  137. GPIO_Init(GENERAL_TIM3_CH3_PORT, &GPIO_InitStructure);
  138. GPIO_Init(GENERAL_TIM3_CH4_PORT, &GPIO_InitStructure);
  139. }
  140. static void GENERAL_TIM3_Mode_Config(void)
  141. {
  142. GENERAL_TIM3_APBxClock_FUN(GENERAL_TIM3_CLK,ENABLE);

  143. /* Time base Configuration */
  144. TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

  145. TIM_TimeBaseStructure.TIM_Period=TIM_PERIOD;
  146. TIM_TimeBaseStructure.TIM_Prescaler=TIM_PSC;
  147. TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  148. TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
  149. TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
  150. TIM_TimeBaseInit(GENERAL_TIM3, &TIM_TimeBaseStructure);

  151. /* PWM1 Mode Configuration */
  152. TIM_OCInitTypeDef  TIM_OCInitStructure;
  153. TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  154. TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  155. TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

  156. /* Channel 1 */
  157. TIM_OCInitStructure.TIM_Pulse = TIM_PULSE;
  158. TIM_OC1Init(GENERAL_TIM3, &TIM_OCInitStructure);
  159. TIM_OC1PreloadConfig(GENERAL_TIM3, TIM_OCPreload_Enable);

  160. /* Channel 2 */
  161. TIM_OCInitStructure.TIM_Pulse = TIM_PULSE;
  162. TIM_OC2Init(GENERAL_TIM3, &TIM_OCInitStructure);
  163. TIM_OC2PreloadConfig(GENERAL_TIM3, TIM_OCPreload_Enable);

  164. /* Channel 3 */
  165. TIM_OCInitStructure.TIM_Pulse = TIM_PULSE;
  166. TIM_OC3Init(GENERAL_TIM3, &TIM_OCInitStructure);
  167. TIM_OC3PreloadConfig(GENERAL_TIM3, TIM_OCPreload_Enable);

  168. /* Channel 4 */
  169. TIM_OCInitStructure.TIM_Pulse = TIM_PULSE;
  170. TIM_OC4Init(GENERAL_TIM3, &TIM_OCInitStructure);
  171. TIM_OC4PreloadConfig(GENERAL_TIM3, TIM_OCPreload_Enable);

  172. TIM_Cmd(GENERAL_TIM3, ENABLE);
  173. }
  174. void ADVANCE_TIM_Init(void)
  175. {
  176. ADVANCE_TIM1_Init();
  177. ADVANCE_TIM8_Init();
  178. }
  179. void GENERAL_TIM_Init(void)
  180. {
  181. GENERAL_TIM3_GPIO_Config();
  182. GENERAL_TIM3_Mode_Config();
  183. }

复制代码



  1. /*******************************motor.h******************************/
  2. #ifndef __MOTOR_H__
  3. #define __MOTOR_H__
  4. #include "stm32f10x.h"
  5. /* ----------------   PWMÐźŠÖÜÆÚºÍÕ¼¿Õ±ÈµÄ¼ÆËã--------------- */
  6. // ARR £º×Ô¶¯ÖØ×°ÔؼĴæÆ÷µÄÖµ
  7. // CLK_cnt£º¼ÆÊýÆ÷µÄʱÖÓ£¬µÈÓÚ Fck_int / (psc+1) = 72M/(psc+1)
  8. // PWM ÐźŵÄÖÜÆÚ T = ARR * (1/CLK_cnt) = ARR*(PSC+1) / 72M
  9. // PWM ÐźŵÄƵÂÊ F = TIM_CLK/{(ARR+1)*(PSC+1)}
  10. // Õ¼¿Õ±ÈP=CCR/(ARR+1)
  11. #define            TIM_PERIOD            (1800-1)   // AAR
  12. #define            TIM_PSC               (1-1)
  13. #define            TIM_PULSE             900     // CCR

  14. // &Ecirc;&sup1;&Oacute;&Atilde;&cedil;&szlig;&frac14;&para;&para;¨&Ecirc;±&AElig;÷ TIM1 <&Ccedil;°&Acirc;&Ouml;&iquest;&Oslash;&Ouml;&AElig;>
  15. #define            ADVANCE_TIM1                   TIM1
  16. #define            ADVANCE_TIM1_APBxClock_FUN     RCC_APB2PeriphClockCmd
  17. #define            ADVANCE_TIM1_CLK               RCC_APB2Periph_TIM1
  18. // &Ecirc;&sup1;&Oacute;&Atilde;&cedil;&szlig;&frac14;&para;&para;¨&Ecirc;±&AElig;÷ TIM8 <&ordm;ó&Acirc;&Ouml;&iquest;&Oslash;&Ouml;&AElig;>
  19. #define            ADVANCE_TIM8                   TIM8
  20. #define            ADVANCE_TIM8_APBxClock_FUN     RCC_APB2PeriphClockCmd
  21. #define            ADVANCE_TIM8_CLK               RCC_APB2Periph_TIM8
  22. // TIM1 &Ecirc;&auml;&sup3;&ouml;±&Egrave;&frac12;&Iuml;&Iacute;¨&micro;&Agrave;
  23. #define            ADVANCE_TIM1_CH1_GPIO_CLK      RCC_APB2Periph_GPIOA
  24. #define            ADVANCE_TIM1_CH1_PORT          GPIOA
  25. #define            ADVANCE_TIM1_CH1_PIN           GPIO_Pin_8
  26. #define            ADVANCE_TIM1_CH2_GPIO_CLK      RCC_APB2Periph_GPIOA
  27. #define            ADVANCE_TIM1_CH2_PORT          GPIOA
  28. #define            ADVANCE_TIM1_CH2_PIN           GPIO_Pin_9
  29. #define            ADVANCE_TIM1_CH3_GPIO_CLK      RCC_APB2Periph_GPIOA
  30. #define            ADVANCE_TIM1_CH3_PORT          GPIOA
  31. #define            ADVANCE_TIM1_CH3_PIN           GPIO_Pin_10
  32. #define            ADVANCE_TIM1_CH4_GPIO_CLK      RCC_APB2Periph_GPIOA
  33. #define            ADVANCE_TIM1_CH4_PORT          GPIOA
  34. #define            ADVANCE_TIM1_CH4_PIN           GPIO_Pin_11
  35. // TIM8 &Ecirc;&auml;&sup3;&ouml;±&Egrave;&frac12;&Iuml;&Iacute;¨&micro;&Agrave;
  36. #define            ADVANCE_TIM8_CH1_GPIO_CLK      RCC_APB2Periph_GPIOA
  37. #define            ADVANCE_TIM8_CH1_PORT          GPIOC
  38. #define            ADVANCE_TIM8_CH1_PIN           GPIO_Pin_6
  39. #define            ADVANCE_TIM8_CH2_GPIO_CLK      RCC_APB2Periph_GPIOA
  40. #define            ADVANCE_TIM8_CH2_PORT          GPIOC
  41. #define            ADVANCE_TIM8_CH2_PIN           GPIO_Pin_7
  42. #define            ADVANCE_TIM8_CH3_GPIO_CLK      RCC_APB2Periph_GPIOA
  43. #define            ADVANCE_TIM8_CH3_PORT          GPIOC
  44. #define            ADVANCE_TIM8_CH3_PIN           GPIO_Pin_8
  45. #define            ADVANCE_TIM8_CH4_GPIO_CLK      RCC_APB2Periph_GPIOA
  46. #define            ADVANCE_TIM8_CH4_PORT          GPIOC
  47. #define            ADVANCE_TIM8_CH4_PIN           GPIO_Pin_9

  48. // &Ecirc;&sup1;&Oacute;&Atilde;&Iacute;¨&Oacute;&Atilde;&para;¨&Ecirc;±&AElig;÷ TIM3 <&Ouml;&ETH;&Acirc;&Ouml;&iquest;&Oslash;&Ouml;&AElig;>
  49. #define            GENERAL_TIM3                   TIM3
  50. #define            GENERAL_TIM3_APBxClock_FUN     RCC_APB1PeriphClockCmd
  51. #define            GENERAL_TIM3_CLK               RCC_APB1Periph_TIM3
  52. // TIM3 &Ecirc;&auml;&sup3;&ouml;±&Egrave;&frac12;&Iuml;&Iacute;¨&micro;&Agrave;1
  53. #define            GENERAL_TIM3_CH1_GPIO_CLK      RCC_APB2Periph_GPIOA
  54. #define            GENERAL_TIM3_CH1_PORT          GPIOA
  55. #define            GENERAL_TIM3_CH1_PIN           GPIO_Pin_6
  56. // TIM3 &Ecirc;&auml;&sup3;&ouml;±&Egrave;&frac12;&Iuml;&Iacute;¨&micro;&Agrave;2
  57. #define            GENERAL_TIM3_CH2_GPIO_CLK      RCC_APB2Periph_GPIOA
  58. #define            GENERAL_TIM3_CH2_PORT          GPIOA
  59. #define            GENERAL_TIM3_CH2_PIN           GPIO_Pin_7
  60. // TIM3 &Ecirc;&auml;&sup3;&ouml;±&Egrave;&frac12;&Iuml;&Iacute;¨&micro;&Agrave;3
  61. #define            GENERAL_TIM3_CH3_GPIO_CLK      RCC_APB2Periph_GPIOB
  62. #define            GENERAL_TIM3_CH3_PORT          GPIOB
  63. #define            GENERAL_TIM3_CH3_PIN           GPIO_Pin_0
  64. // TIM3 &Ecirc;&auml;&sup3;&ouml;±&Egrave;&frac12;&Iuml;&Iacute;¨&micro;&Agrave;4
  65. #define            GENERAL_TIM3_CH4_GPIO_CLK      RCC_APB2Periph_GPIOB
  66. #define            GENERAL_TIM3_CH4_PORT          GPIOB
  67. #define            GENERAL_TIM3_CH4_PIN           GPIO_Pin_1

  68. void ADVANCE_TIM_Init(void);
  69. void GENERAL_TIM_Init(void);
  70. #endif /* __MOTOR_H__ */

复制代码



  1. /**************************main.c***************************/
  2. #include "stm32f10x.h"
  3. #include "motor.h"
  4. int main(void)
  5. {
  6. ADVANCE_TIM_Init();
  7. GENERAL_TIM_Init();

  8. while(1)
  9. {
  10.   TIM_SetCompare1(TIM1,TIM_PULSE); // GPIO->PA8
  11.   TIM_SetCompare2(TIM1,TIM_PULSE); // GPIO->PA9
  12.   TIM_SetCompare3(TIM1,TIM_PULSE); // GPIO->PA10
  13.   TIM_SetCompare4(TIM1,TIM_PULSE); // GPIO->PA11
  14.   
  15.   TIM_SetCompare1(TIM8,TIM_PULSE); // GPIO->PC6
  16.   TIM_SetCompare2(TIM8,TIM_PULSE); // GPIO->PC7
  17.   TIM_SetCompare3(TIM8,TIM_PULSE); // GPIO->PC8  
  18.   TIM_SetCompare4(TIM8,TIM_PULSE); // GPIO->PC9
  19.   
  20.   TIM_SetCompare1(TIM3,TIM_PULSE); // GPIO->PA6
  21.   TIM_SetCompare2(TIM3,TIM_PULSE); // GPIO->PA7
  22.   TIM_SetCompare3(TIM3,TIM_PULSE); // GPIO->PB0
  23.   TIM_SetCompare4(TIM3,TIM_PULSE); // GPIO->PB1
  24. }
  25. }


复制代码


回复

使用道具 举报

发表于 2017-9-14 09:03:02 | 显示全部楼层
你是不是只开了gpio时钟,没有开定时器时钟
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-15 18:17:51 | 显示全部楼层
随风 发表于 2017-9-14 09:03
你是不是只开了gpio时钟,没有开定时器时钟

开了时钟啊


  1. GENERAL_TIM3_APBxClock_FUN(GENERAL_TIM3_CLK,ENABLE);

复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-16 21:11 , Processed in 0.033581 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表