OpenEdv-开源电子网

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

mini32中利用TIM3的CH1和CH2产生2路PWM输出,分别对应LED1和LED0,为什么灯只会变亮不会变暗,各位大神,求解答

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2014-10-28
在线时间
0 小时
发表于 2015-4-21 21:41:17 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]void PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; //pwm shuchuhanshu RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //GPIO_SetBits(GPIOB,GPIO_Pin_7);*/ //设置Tim3——ch2重映射到pb5上 //GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE); // 初始化Tim3设置Tim3的arr值和PSC值 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); //设置Tim3——ch1的PWM模式,使能Tim3的CH1 TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值 TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High; TIM_OC1Init(TIM3,&TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIMx在CCR1上的预装载寄存器 //设置Tim3——ch2的PWM模式,使能Tim3的CH2 TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2; TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值 TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High; TIM_OC2Init(TIM3,&TIM_OCInitStructure); TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIMx在CCR2上的预装载寄存器 TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIMx在ARR上的预装载寄存器 //使能Tim3 TIM_Cmd(TIM3,ENABLE); } #include "led.h" #include "delay.h" #include "sys.h" #include "key.h" #include "usart.h" #include "exti.h" #include"timer.h" //Mini STM32开发板范例代码4 //外部中断实验 //正点原子@ALIENTEK //技术论坛:www.openedv.com //注意,此代码还是无法进行SWD仿真!因为使用了中断,没法用普通的方法来考虑间歇复用SWD口! int main(void) { led0pwmval=0; u16 led1pwmval=0; u8 dir=1; SystemInit(); delay_init(72); //延时初始化 NVIC_Configuration(); uart_init(9600); //串口初始化 LED_Init(); //LED端口初始化 Timerx_Init(5000,7199); //外部中断初始化 PWM_Init(900,0); while(1) { delay_ms(10); if(dir) { led0pwmval++; led1pwmval++; } else { led0pwmval--; led1pwmval--; } if(led0pwmval>300&&led1pwmval>300) dir=0; if(led1pwmval==0&&led1pwmval==0) dir=1; TIM_SetCompare1(TIM3,led1pwmval); TIM_SetCompare2(TIM3,led0pwmval); } } [/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

回复【2楼】正点原子: -----------------------------谢谢原子哥,我已经找到问题所在了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2014-10-28
在线时间
0 小时
 楼主| 发表于 2015-4-21 21:41:18 | 显示全部楼层
回复【2楼】正点原子:
-----------------------------谢谢原子哥,我已经找到问题所在了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-21 22:41:42 | 显示全部楼层
单路正常么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2015-1-3
在线时间
26 小时
发表于 2015-5-24 18:33:54 | 显示全部楼层
回复【3楼】聆听几点几:
---------------------------------
问题在哪?
总有人是要赢的,那为什么不是我呢?
博客: http://mindthink.me
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-10-18
在线时间
0 小时
发表于 2015-10-18 20:32:58 | 显示全部楼层
刚开始学,我想知道哪里错了?
回复

使用道具 举报

5

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2016-3-31
在线时间
19 小时
发表于 2016-4-3 18:49:34 | 显示全部楼层
顶一下这个帖子,另外求问各位大大知不知道这个楼主究竟错在哪了?

对于楼主这种不分享经验的做法,我只能。。。呵呵
回复

使用道具 举报

5

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2016-3-31
在线时间
19 小时
发表于 2016-4-3 19:16:56 | 显示全部楼层

原子哥,求问你2楼之前发了什么?现在已经看不到了,能不能麻烦补上来呢?这样后面的朋友搜索时也就知道该怎么解决啦
回复

使用道具 举报

5

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2016-3-31
在线时间
19 小时
发表于 2016-4-3 19:28:11 | 显示全部楼层

我找到问题了!

其他的朋友们也可以看看,楼主的第117行代码是个永远不能实现的if,所以dir仅为1,不会变暗。

那么现在问题来了,为什么TIM3的CH1 CH2能够输出到LED0 LED1 上呢。。。。。
回复

使用道具 举报

5

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2016-3-31
在线时间
19 小时
发表于 2016-4-3 21:52:56 | 显示全部楼层
为你这个问题困惑了一晚上,真的怀疑你是硬件接线解决的。。。。不说了,洗澡去了。。。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 14:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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