OpenEdv-开源电子网

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

想问一下为什么这样开时钟3的四个通道失败了,最后好像只有两个通道输出了

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2021-3-4
在线时间
4 小时
发表于 2021-5-9 22:24:29 | 显示全部楼层 |阅读模式
12金钱

复制代码
想问一下为什么这样开TIM3的四个通道失败了,而且最后好像只有两个通道输出了pwm波.是这个RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
不能写一起吗?





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

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10569
金钱
10569
注册时间
2017-2-18
在线时间
1913 小时
发表于 2021-5-11 08:27:28 | 显示全部楼层
回复

使用道具 举报

4

主题

912

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4508
金钱
4508
注册时间
2019-9-4
在线时间
914 小时
发表于 2021-5-11 09:51:36 | 显示全部楼层
可以写一起
回复

使用道具 举报

13

主题

643

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2432
金钱
2432
注册时间
2019-12-28
在线时间
527 小时
发表于 2021-5-12 11:42:32 | 显示全部楼层
写一起不影响的,检查一下是不是代码哪里有问题导致的
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2021-3-4
在线时间
4 小时
 楼主| 发表于 2021-5-13 09:34:59 | 显示全部楼层
  1. #include "timer.h"
  2. #include "led.h"
  3. #include "usart.h"
  4. //////////////////////////////////////////////////////////////////////////////////         
  5. //±¾3ìDòÖ»1©Ñ§Ï°ê1óã¬Î′¾-×÷ÕßDí¿é£¬2»μÃóÃóúÆäËüèÎoÎóÃí¾
  6. //ALIENTE¾«ó¢STM32¿a·¢°å
  7. //¶¨ê±Æ÷ Çy¶ˉ′úÂë          
  8. //ÕyμãÔ-×ó@ALIENTEK
  9. //¼¼êõÂÛì3:www.openedv.com
  10. //DT¸ÄèÕÆú:2012/9/4
  11. //°æ±¾£oV1.1
  12. //°æè¨ËùóD£¬μá°æ±Ø¾¿¡£
  13. //Copyright(C) 1ãÖYêDDÇòíμç×ó¿Æ¼¼óDÏT1«Ë¾ 2009-2019
  14. //All rights reserved                                                                          
  15. //********************************************************************************

  16. //TIM3 PWM2¿·Ö3õê¼»ˉ
  17. //PWMêä3ö3õê¼»ˉ
  18. //arr£o×Ô¶ˉ֨װÖμ
  19. //psc£oê±ÖóÔ¤·ÖÆμêy
  20. void TIM3_PWM_Init(u16 arr,u16 psc)
  21. {  
  22.         GPIO_InitTypeDef GPIO_InitStructure;
  23.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  24.         TIM_OCInitTypeDef  TIM_OCInitStructure;

  25.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);   //ê1Äü¶¨ê±Æ÷3
  26.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);  //ê1ÄüGPIOíaéèoíAFIO¸′óÃ1|ÄüÄ£¿éê±Öó
  27.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
  28.        
  29.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; //TIM_3CH1|2
  30.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //¸′óÃíÆíìêä3ö
  31.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  32.         GPIO_Init(GPIOA, &GPIO_InitStructure); //3õê¼»ˉGPIO.A
  33.        
  34.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; //TIM_3CH13|4
  35.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //¸′óÃíÆíìêä3ö
  36.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  37.         GPIO_Init(GPIOB, &GPIO_InitStructure); //3õê¼»ˉGPIO.B

  38.         TIM_TimeBaseStructure.TIM_Period = arr; //éèÖÃÔúÏÂò»¸ö¸üDÂê¼t×°èë»î¶ˉμÄ×Ô¶ˉÖØ×°ÔØ¼Ä′æÆ÷ÖüÆúμÄÖμ         80K
  39.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //éèÖÃóÃà′×÷ÎaTIMxê±ÖóÆμÂê3yêyμÄÔ¤·ÖÆμÖμ  2»·ÖÆμ
  40.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //éèÖÃê±Öó·Ö¸î:TDTS = Tck_tim
  41.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIMÏòéϼÆêyÄ£ê½
  42.         TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //¸ù¾YTIM_TimeBaseInitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉTIMxμÄê±¼ä»ùêyμ¥λ

  43.   //3õê¼»ˉTIM2 Channel2 PWMģ꽠        
  44.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //Ñ¡Ôñ¶¨ê±Æ÷Ä£ê½:TIMÂö3å¿í¶èμ÷ÖÆÄ£ê½2
  45.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //±è½Ïêä3öê1Äü
  46.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //êä3ö¼«DÔ:TIMêä3ö±è½Ï¼«DÔ¸ß
  47.         TIM_OC1Init(TIM3, &TIM_OCInitStructure);  //¸ù¾YTÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèTIM3 OC1
  48.         TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);  //ê1ÄüTIM2ÔúCCR1éÏμÄÔ¤×°ÔØ¼Ä′æÆ÷

  49.         TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //¸ù¾YTÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèTIM3 OC2
  50.         TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //ê1ÄüTIM2ÔúCCR2éÏμÄÔ¤×°ÔØ¼Ä′æÆ÷
  51.        
  52.         TIM_OC3Init(TIM3, &TIM_OCInitStructure);  //¸ù¾YTÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèTIM3 OC3
  53.         TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);  //ê1ÄüTIM2ÔúCCR3éÏμÄÔ¤×°ÔØ¼Ä′æÆ÷

  54.         TIM_OC4Init(TIM3, &TIM_OCInitStructure);  //¸ù¾YTÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèTIM3 OC4
  55.         TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);  //ê1ÄüTIM2ÔúCCR4éÏμÄÔ¤×°ÔØ¼Ä′æÆ÷
  56.        
  57.         TIM_Cmd(TIM3, ENABLE);  //ê1ÄüTIM3

  58. }


  59. void TIM3_Int_Init(u16 arr,u16 psc)
  60. {
  61.   TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  62.         NVIC_InitTypeDef NVIC_InitStructure;

  63.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //ê±Öóê1Äü

  64.         TIM_TimeBaseStructure.TIM_Period = arr; //éèÖÃÔúÏÂò»¸ö¸üDÂê¼t×°èë»î¶ˉμÄ×Ô¶ˉÖØ×°ÔØ¼Ä′æÆ÷ÖüÆúμÄÖμ         ¼Æêyμ½5000Îa500ms
  65.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //éèÖÃóÃà′×÷ÎaTIMxê±ÖóÆμÂê3yêyμÄÔ¤·ÖÆμÖμ  10KhzμļÆêyÆμÂê  
  66.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //éèÖÃê±Öó·Ö¸î:TDTS = Tck_tim
  67.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIMÏòéϼÆêyÄ£ê½
  68.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //¸ù¾YTIM_TimeBaseInitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉTIMxμÄê±¼ä»ùêyμ¥λ

  69.         TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //ê1ÄüÖ¸¶¨μÄTIM3ÖD¶Ï,ÔêDí¸üDÂÖD¶Ï

  70.         NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3ÖD¶Ï
  71.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //ÏèÕ¼óÅÏè¼¶0¼¶
  72.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //′óóÅÏè¼¶3¼¶
  73.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQí¨μà±»ê1Äü
  74.         NVIC_Init(&NVIC_InitStructure);  //¸ù¾YNVIC_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèNVIC¼Ä′æÆ÷

  75.         TIM_Cmd(TIM3, ENABLE);  //ê1ÄüTIMxíaéè
  76.                                                          
  77. }
  78. //¶¨ê±Æ÷3ÖD¶Ï·tÎñ3ìDò
  79. void TIM3_IRQHandler(void)   //TIM3ÖD¶Ï
  80. {
  81.         if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //¼ì2éÖ¸¶¨μÄTIMÖD¶Ï·¢éúóë·ñ:TIM ÖD¶ÏÔ′
  82.                 {
  83.                 TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //Çå3yTIMxμÄÖD¶Ï′y′|àíλ:TIM ÖD¶ÏÔ′
  84.                 LED1=!LED1;
  85.                 }
  86. }

复制代码
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-24 09:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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