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

STM32F103C8T6 PWM输出配置问题

[复制链接]
liuyangzys 提问时间:2017-7-10 14:19 /
  1. #include "hard_pwm.h"
  2. #include "stm32f10x_gpio.h"
  3. #include "stm32f10x_rcc.h"
  4. #include "stm32f10x_tim.h"

  5. #define MOTOR_PERIOD 15000

  6. // pwm¹Ü½Å·ÖÅä
  7. // TIM2_CH1 PWM1 PA0
  8. // TIM2_CH2 PWM2 PA1
  9. // TIM2_CH3 PWM3 PB10
  10. // TIM2_CH4 PWM4 PB11
  11. // TIM3_CH1 PWM5 PA6
  12. // TIM3_CH2 PWM6 PA7
  13. // TIM4_CH1 PWM7 PB6
  14. // TIM4_CH2 PWM8 PB7

  15. char is_pwm_output_enable = 0;

  16. void pwm_output(char m_ch, short m_value)
  17. {
  18.     switch (m_ch)
  19.     {
  20.     case 1:
  21.         TIM2->CCR1 = m_value;
  22.         break;
  23.     case 2:
  24.         TIM2->CCR2 = m_value;
  25.         break;
  26.     case 3:
  27.         TIM2->CCR3 = m_value;
  28.         break;
  29.     case 4:
  30.         TIM2->CCR4 = m_value;
  31.         break;
  32.     case 5:
  33.         TIM3->CCR1 = m_value;
  34.         break;
  35.     case 6:
  36.         TIM3->CCR2 = m_value;
  37.         break;
  38.     case 7:
  39.         TIM4->CCR1 = m_value;
  40.         break;
  41.     case 8:
  42.         TIM4->CCR1 = m_value;
  43.         break;
  44.     default:
  45.         break;
  46.     }
  47. }

  48. static void pwm_gpio_init(void)
  49. {
  50.     GPIO_InitTypeDef gpio;
  51.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
  52.                                RCC_APB2Periph_AFIO,
  53.                            ENABLE);

  54.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3 |
  55.                                RCC_APB1Periph_TIM4,
  56.                            ENABLE);

  57.     GPIO_PinRemapConfig(GPIO_PartialRemap2_TIM2, ENABLE);

  58.     gpio.GPIO_Mode = GPIO_Mode_AF_PP;
  59.     gpio.GPIO_Speed = GPIO_Speed_50MHz;
  60.     gpio.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_6 | GPIO_Pin_7;
  61.     GPIO_Init(GPIOA, &gpio);
  62.     gpio.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_10 | GPIO_Pin_11;

  63.     GPIO_Init(GPIOB, &gpio);
  64. }

  65. static void pwm_tim_init(void)
  66. {
  67.     TIM_TimeBaseInitTypeDef tim_timebase_structure;
  68.     TIM_OCInitTypeDef tim_ocinit_stucture;

  69.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3 |
  70.                                RCC_APB1Periph_TIM4,
  71.                            ENABLE);

  72.     // TIMʱÖÓ·ÖÆµ£¬Êä³öPWMÖÜÆÚ50Hz
  73.     tim_timebase_structure.TIM_Period = MOTOR_PERIOD;
  74.     tim_timebase_structure.TIM_Prescaler = 72 - 1;
  75.     tim_timebase_structure.TIM_ClockDivision = TIM_CKD_DIV1;
  76.     tim_timebase_structure.TIM_CounterMode = TIM_CounterMode_Up;

  77.     TIM_TimeBaseInit(TIM2, &tim_timebase_structure);
  78.     TIM_TimeBaseInit(TIM3, &tim_timebase_structure);
  79.     TIM_TimeBaseInit(TIM4, &tim_timebase_structure);

  80.     tim_ocinit_stucture.TIM_OCMode = TIM_OCMode_PWM1;
  81.     tim_ocinit_stucture.TIM_OutputNState = TIM_OutputState_Enable;
  82.     tim_ocinit_stucture.TIM_Pulse = 1000;
  83.     tim_ocinit_stucture.TIM_OCPolarity = TIM_OCPolarity_High;

  84.     TIM_OC1Init(TIM2, &tim_ocinit_stucture);
  85.     TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);

  86.     TIM_OC2Init(TIM2, &tim_ocinit_stucture);
  87.     TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);

  88.     TIM_OC3Init(TIM2, &tim_ocinit_stucture);
  89.     TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);

  90.     TIM_OC4Init(TIM2, &tim_ocinit_stucture);
  91.     TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);

  92.     TIM_OC1Init(TIM3, &tim_ocinit_stucture);
  93.     TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);

  94.     TIM_OC2Init(TIM3, &tim_ocinit_stucture);
  95.     TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

  96.     TIM_OC1Init(TIM4, &tim_ocinit_stucture);
  97.     TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);

  98.     TIM_OC2Init(TIM4, &tim_ocinit_stucture);
  99.     TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);

  100.     TIM_ARRPreloadConfig(TIM2, ENABLE);
  101.     TIM_ARRPreloadConfig(TIM3, ENABLE);
  102.     TIM_ARRPreloadConfig(TIM4, ENABLE);

  103.     TIM_Cmd(TIM2, ENABLE);
  104.     TIM_Cmd(TIM3, ENABLE);
  105.     TIM_Cmd(TIM4, ENABLE);
  106. }

  107. static void pwm_gpio_deinit(void)
  108. {
  109.     GPIO_DeInit(GPIOA);
  110.     GPIO_DeInit(GPIOB);
  111. }

  112. static void pwm_tim_deinit(void)
  113. {
  114.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3 |
  115.                                RCC_APB1Periph_TIM4,
  116.                            ENABLE);
  117.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3 |
  118.                                RCC_APB1Periph_TIM4,
  119.                            DISABLE);
  120. }

  121. void pwm_output_init(void)
  122. {
  123.     if (is_pwm_output_enable == 0)
  124.     {
  125.         pwm_gpio_init();
  126.         pwm_tim_init();

  127.         for (int i = 1; i < 9; ++i)
  128.             pwm_output(i, 1000);
  129.         is_pwm_output_enable = 1;
  130.     }
  131. }

  132. void pwm_output_deinit(void)
  133. {
  134.     if (is_pwm_output_enable == 1)
  135.     {
  136.         pwm_tim_deinit();
  137.         // pwm_gpio_deinit();
  138.         is_pwm_output_enable = 0;
  139.     }
  140. }
复制代码
以上是我的配置代码,单pwm没有输出,请问各位是哪配置错了吗?
收藏 评论4 发布时间:2017-7-10 14:19

举报

4个回答
xmshao 回答时间:2017-7-10 15:39:51
看你有多个REMAP动作,APB2的外设AFIO的时钟开了没有?
liuyangzys 回答时间:2017-7-11 17:17:38
xmshao 发表于 2017-7-10 15:39
看你有多个REMAP动作,APB2的外设AFIO的时钟开了没有?

不是那的问题,写错了一个地方
tim_ocinit_stucture.TIM_OutputNState 应该是 tim_ocinit_stucture.TIM_OutputState,自动补全一滑丢点偏了
五哥1 回答时间:2018-4-29 20:52:21
跟踪调试了吗?这个片段不好分析,是用原子程序改的吗?系统板上测的吗?程序和硬件都可能造成这个结果,自己一个一个去排除

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

sasikawyh 回答时间:2018-10-24 11:23:54
.......

所属标签

相似问题

官网相关资源

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