OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2401|回复: 3

32F103tim3通道输不出四路pwm,求助。

[复制链接]

1

主题

9

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2019-8-13
在线时间
7 小时
发表于 2019-10-30 19:40:42 | 显示全部楼层 |阅读模式
1金钱
根据原子哥的源代码改编了一下,不知道哪里出了问题,只有PB5能输出pwm。其他通道的设置就是不行。源代码如下
#include"pwm.h"

void Time_PWM_Init(u16 arr,u16 psc)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
       

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);  
       
        GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);   


        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);


        TIM_TimeBaseStructure.TIM_Period = arr;
        TIM_TimeBaseStructure.TIM_Prescaler =psc;
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
       

        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

        TIM_OC1Init(TIM3, &TIM_OCInitStructure);
        TIM_OC2Init(TIM3, &TIM_OCInitStructure);       
        TIM_OC3Init(TIM3, &TIM_OCInitStructure);
        TIM_OC4Init(TIM3, &TIM_OCInitStructure);
               
        TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);  
        TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
        TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
        TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
       
        TIM_CtrlPWMOutputs(TIM3,ENABLE);



        TIM_Cmd(TIM3, ENABLE);

       
}


int main(void)
{               
        u16 led0pwmval=0;
        u8 dir=1;       
        delay_init();                     

        Time_PWM_Init(899,0);       
           while(1)
        {
                delay_ms(5);         
                if(dir)led0pwmval++;
                else led0pwmval--;

                if(led0pwmval>400)dir=0;
                if(led0pwmval==0)dir=1;                                                                                 
                TIM_SetCompare2(TIM3,led0pwmval);                  
        }         
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2019-10-30 19:40:43 | 显示全部楼层
  1. #include "timer3.h"
  2. void TIM3_PWM_Init(u16 arr, u16 psc)
  3. {
  4.     TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
  5.     TIM_OCInitTypeDef TIM_OCInitStructure;
  6.     GPIO_InitTypeDef GPIO_InitStructure;

  7.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  8.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); //复用时钟

  9.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
  10.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  11.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  12.     GPIO_Init(GPIOA, &GPIO_InitStructure);

  13.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
  14.     GPIO_Init(GPIOB, &GPIO_InitStructure);

  15.     TIM_TimeBaseInitStructure.TIM_Period = arr;
  16.     TIM_TimeBaseInitStructure.TIM_Prescaler = psc;
  17.     TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;                                //只有高级定时器需要设置,其他定时器可以不设置。
  18.     TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  19.     TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
  20.     TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure);

  21.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  22.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  23.     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

  24.     TIM_OC1Init(TIM3, &TIM_OCInitStructure);                                                        //TIM3_OC1   PA6
  25.     TIM_OC2Init(TIM3, &TIM_OCInitStructure);                                                        //TIM3_OC2   PA7
  26.     TIM_OC3Init(TIM3, &TIM_OCInitStructure);                                                        //TIM3_OC1   PB0
  27.     TIM_OC4Init(TIM3, &TIM_OCInitStructure);                                                        //TIM3_OC1   PB1

  28.     TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
  29.     TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
  30.     TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
  31.     TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);

  32.     TIM_Cmd(TIM3, ENABLE);
  33. }


  34. //APB1时钟分频为2  TIM2-7 时钟数为APB1 2倍
  35. // Tout= (arr+1)*(psc+1) / Tclk
  36. void TIM3_PWM_Rem_Init(u16 arr, u16 psc)
  37. {
  38.     TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
  39.     GPIO_InitTypeDef GPIO_InitStructure;
  40.     TIM_OCInitTypeDef TIM_OCInitStructure;

  41.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  42.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB, ENABLE);   //复用时钟

  43.         //禁止J-Tag引脚功能 需要2步  1.使能复用时钟功能  2.禁止JTAG  PB4 PA13 PA14 PA15
  44.         //RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);                                
  45.         GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE);                         //Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST
  46.        
  47.     GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);                     //定时器3 部分重映射

  48.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5;
  49.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  50.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  51.     GPIO_Init(GPIOB, &GPIO_InitStructure);

  52.         GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);                         //JTAG-DP Disabled and SW-DP Enabled/
  53.        
  54.     TIM_TimeBaseInitStructure.TIM_Period = arr;
  55.     TIM_TimeBaseInitStructure.TIM_Prescaler = psc;
  56.     TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;                                //只有高级定时器需要设置,其他定时器可以不设置。
  57.     TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  58.     TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
  59.     TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure);

  60.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  61.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  62.     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  63.        
  64.         TIM_OC1Init(TIM3, &TIM_OCInitStructure);                                                        //TIM3_OC1   PA6-->PB4
  65.     TIM_OC2Init(TIM3, &TIM_OCInitStructure);                                                        //TIM3_OC2   PA7-->PB5
  66.     TIM_OC3Init(TIM3, &TIM_OCInitStructure);                                                        //TIM3_OC1   PB0
  67.     TIM_OC4Init(TIM3, &TIM_OCInitStructure);                                                        //TIM3_OC1   PB1

  68.         //未选择预装载特性,写入的数值会立即传输至当前寄存器。 允许预装载功能,写入的数值发生更新事件时,才会传输到比较寄存器中
  69.     TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
  70.     TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
  71.     TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
  72.     TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
  73.        
  74.     TIM_Cmd(TIM3, ENABLE);
  75. }
复制代码


回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2019-8-13
在线时间
7 小时
 楼主| 发表于 2019-10-30 21:10:37 | 显示全部楼层
TIM_SetCompare1(TIM3,ledpwmval);
TIM_SetCompare2(TIM3,ledpwmval);
TIM_SetCompare3(TIM3,ledpwmval);
TIM_SetCompare4(TIM3,ledpwmval);
主函数加了这一段也没用,我好像找不到问题出在哪里了。。。。
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2019-8-13
在线时间
7 小时
 楼主| 发表于 2019-10-31 18:15:55 | 显示全部楼层
谢谢大佬,但是我还是看不出来我的代码错在哪里,除了PB4的jtag接口没屏蔽外。其他通道设置应该没问题
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-28 14:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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