OpenEdv-开源电子网

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

请教一下大家,关于TIM3和TIM8输出PWM的问题

[复制链接]

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
发表于 2025-3-17 15:47:14 | 显示全部楼层 |阅读模式
20金钱
请教一下大家,关于TIM3和TIM8输出PWM的问题,想用TIM1-4和TIM8输出PWM,TIM1、2、4都成功了,TIM3和TIM8一直输出不正确,TIM3的引脚PB0、PB1、PB4、PB5输出PWM,TIM8的PC6、PC7、PC8、PC9输出PWM一直不成功,大家帮忙看一下,谢谢了。
  1. void TIM3_PWM_Init(u16 arr, u16 psc)
  2. {
  3.     GPIO_InitTypeDef GPIO_InitStructure;
  4.     TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
  5.     TIM_OCInitTypeDef TIM_OCInitStructure;

  6.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);                                                        //?????3??
  7.     RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);        //??GPIO??
  8.        
  9.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1|GPIO_Pin_4 | GPIO_Pin_5;
  10.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  11.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  12.     GPIO_Init(GPIOB, &GPIO_InitStructure);


  13.     //???TIM3
  14.     TIM_TimeBaseInitStructure.TIM_Period = arr;
  15.     TIM_TimeBaseInitStructure.TIM_Prescaler = psc;
  16.     TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  17.     TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
  18.     TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure);

  19.     //???TIM3_CH1  PWM ??
  20.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  21.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  22.     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  23.     TIM_OC1Init(TIM3, &TIM_OCInitStructure);

  24.     //???TIM3_CH2  PWM ??
  25.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  26.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  27.     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  28.     TIM_OC2Init(TIM3, &TIM_OCInitStructure);

  29.     //???TIM3_CH3  PWM ??
  30.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  31.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  32.     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  33.     TIM_OC3Init(TIM3, &TIM_OCInitStructure);

  34.     //???TIM3_CH4  PWM ??
  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.     TIM_OC4Init(TIM3, &TIM_OCInitStructure);

  39.     //??TIM3?CCR????????
  40.     TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
  41.     TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
  42.     TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
  43.     TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
  44.     //??TIM3
  45.     TIM_Cmd(TIM3, ENABLE);
  46.                 //TIM_CtrlPWMOutputs(TIM3, ENABLE);
  47. }


  48. void TIM8_PWM_Init(u16 arr,u16 psc)
  49. {  
  50.        
  51.         GPIO_InitTypeDef GPIO_InitStructure;
  52.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  53.         TIM_OCInitTypeDef  TIM_OCInitStructure;
  54.        

  55.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);        //?????3??
  56.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  //??GPIO???AFIO????????
  57.        

  58.    //????????????,??TIM8 CH2?PWM????        GPIOB.5
  59.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; //TIM_CH2
  60.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //??????
  61.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  62.         GPIO_Init(GPIOC, &GPIO_InitStructure);//???GPIO

  63.    //???TIM8
  64.         TIM_TimeBaseStructure.TIM_Period = arr; //???????????????????????????
  65.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //??????TIMx???????????
  66.         TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1; //??????:TDTS = Tck_tim
  67.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM??????
  68.         TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); //??TIM_TimeBaseInitStruct?????????TIMx???????
  69.        
  70.         //???TIM8 Channel2 PWM??         
  71.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //???????:TIM????????2
  72.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //??????
  73.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //????:TIM???????
  74. //        TIM_OCInitStructure.TIM_Pulse=CCR1_Val;
  75.         TIM_OC1Init(TIM8, &TIM_OCInitStructure);  //??T??????????TIM8 OC2

  76.         TIM_OC1PreloadConfig(TIM8, TIM_OCPreload_Enable);  //??TIM8?CCR2????????

  77.         TIM_CtrlPWMOutputs(TIM8,ENABLE);
  78.        
  79.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //??????
  80.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //????:TIM???????
  81. //        TIM_OCInitStructure.TIM_Pulse=CCR2_Val;
  82.         TIM_OC2Init(TIM8, &TIM_OCInitStructure);  //??T??????????TIM8 OC2

  83.         TIM_OC2PreloadConfig(TIM8, TIM_OCPreload_Enable);  //??TIM8?CCR2????????
  84.        
  85.         TIM_CtrlPWMOutputs(TIM8,ENABLE);
  86.        
  87.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //??????
  88.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //????:TIM???????
  89.         //TIM_OCInitStructure.TIM_Pulse=CCR3_Val;
  90.         TIM_OC3Init(TIM8, &TIM_OCInitStructure);  //??T??????????TIM8 OC2

  91.         TIM_OC3PreloadConfig(TIM8, TIM_OCPreload_Enable);  //??TIM8?CCR2????????
  92.        
  93.         TIM_CtrlPWMOutputs(TIM8,ENABLE);
  94.        
  95.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //??????
  96.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //????:TIM???????
  97.         //TIM_OCInitStructure.TIM_Pulse=CCR4_Val;
  98.         TIM_OC4Init(TIM8, &TIM_OCInitStructure);  //??T??????????TIM8 OC2

  99.         TIM_OC4PreloadConfig(TIM8, TIM_OCPreload_Enable);  //??TIM8?CCR2????????
  100.        
  101.         TIM_CtrlPWMOutputs(TIM8,ENABLE);
  102.        
  103.         TIM_Cmd(TIM8, ENABLE);  //??TIM8
  104. }

复制代码


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

使用道具 举报

2

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
311
金钱
311
注册时间
2022-4-13
在线时间
50 小时
发表于 2025-3-18 11:57:46 | 显示全部楼层
应该是端口没有重映射导致的,建议你转hal库,使用cubemx直接生成外设的配置代码,可以尽量避免配置出错的问题
回复

使用道具 举报

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
 楼主| 发表于 2025-3-18 14:13:20 | 显示全部楼层
65968535 发表于 2025-3-18 11:57
应该是端口没有重映射导致的,建议你转hal库,使用cubemx直接生成外设的配置代码,可以尽量避免配置出错的 ...

好的,能帮找一下里面的问题吗
回复

使用道具 举报

11

主题

2139

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4809
金钱
4809
注册时间
2015-1-10
在线时间
602 小时
发表于 2025-3-19 09:12:37 | 显示全部楼层
支持者2400 发表于 2025-3-18 14:13
好的,能帮找一下里面的问题吗

GPIO没有remap
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-2 02:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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