OpenEdv-开源电子网

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

看了PWM输出的那一讲视频后有一些疑问请教

[复制链接]

2

主题

15

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2015-11-22
在线时间
1 小时
发表于 2015-12-23 09:51:06 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]void TIM3_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能 TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 TIM_ITConfig( TIM3, TIM_IT_Update ,ENABLE ); NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能 NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器 TIM_Cmd(TIM3, ENABLE); //使能TIMx外设 } void TIM3_IRQHandler(void) //TIM3中断 { if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 { TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx的中断待处理位:TIM 中断源 LED1=!LED1; } } void TIM1_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_Init_struct; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInit_struct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_Init_struct.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_Init_struct.GPIO_Pin=GPIO_Pin_8; GPIO_Init_struct.GPIO_Speed=GPIO_Speed_50MHz; TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_OCInit_struct.TIM_OCMode=TIM_OCMode_PWM2; TIM_OCInit_struct.TIM_OutputState=TIM_OutputState_Enable; TIM_OCInit_struct.TIM_Pulse=0; TIM_OCInit_struct.TIM_OCPolarity=TIM_OCPolarity_High; GPIO_Init(GPIOA, &GPIO_Init_struct); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1, ENABLE); TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 TIM_OC1Init(TIM1, &TIM_OCInit_struct); TIM_CtrlPWMOutputs(TIM1, ENABLE); TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM1, ENABLE); TIM_Cmd(TIM1, ENABLE); }[/mw_shl_code]
这是我的.c文件,把用定时器中断控制灯闪烁和定时器输出PWM控制灯明暗变化,都写在一个C文件中了,我把其中一种功能屏蔽之后,另一种功能都可以工作,唯独两种功能不能一起实现,不知道为什么?
main函数中调用的代码如下:
TIM3_Int_Init(4999,7199); 
TIM1_PWM_Init(899,0);//10Khz的计数频率,计数到5000为500ms 

今天早上,我把上面两个代码倒了一下,写成如下样子:
TIM1_PWM_Init(899,0);//10Khz的计数频率,计数到5000为500ms 
TIM3_Int_Init(4999,7199); 
结果就成功了,是不是这些函数哪些部分重叠了?

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

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2013-3-14
在线时间
0 小时
发表于 2015-12-23 18:53:42 | 显示全部楼层
光看这些代码还真看不出来什么名堂啊
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2015-11-22
在线时间
1 小时
 楼主| 发表于 2015-12-23 19:10:11 | 显示全部楼层
回复【2楼】woshicky:
---------------------------------
储二?
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2015-11-22
在线时间
1 小时
 楼主| 发表于 2015-12-23 19:12:09 | 显示全部楼层
回复【2楼】woshicky:
---------------------------------
居然比我早两年注册了
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2015-11-22
在线时间
1 小时
 楼主| 发表于 2015-12-23 19:56:59 | 显示全部楼层
回复【2楼】woshicky:
---------------------------------
我把PWM和定时器写在一个.c里发现是有问题的;
然后把PWM和定时器分别写到了两个.c文件里了,问题就解决了;
虽然感觉很莫名其妙。
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5781
金钱
5781
注册时间
2013-11-22
在线时间
1212 小时
发表于 2015-12-23 22:58:34 | 显示全部楼层
库函数版本的是有这个bug   寄存器版本的就没有问题
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2015-11-22
在线时间
1 小时
 楼主| 发表于 2015-12-24 09:38:00 | 显示全部楼层
回复【6楼】lycreturn:
---------------------------------
能具体描述一下这个BUG吗?
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5781
金钱
5781
注册时间
2013-11-22
在线时间
1212 小时
发表于 2015-12-24 09:53:34 | 显示全部楼层
回复【7楼】南城以南亦是南:
---------------------------------
貌似还未解决这个bug, 我都是用寄存器版本的代码
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2015-11-22
在线时间
1 小时
 楼主| 发表于 2015-12-24 11:02:45 | 显示全部楼层
回复【8楼】lycreturn:
---------------------------------
我寄存器版本没怎么用过,一般书写你用的哪种版本?
寄存器版本写的好像比较慢一点。
回复

使用道具 举报

13

主题

276

帖子

0

精华

高级会员

Rank: 4

积分
697
金钱
697
注册时间
2014-6-20
在线时间
146 小时
发表于 2015-12-24 13:27:55 | 显示全部楼层
遇到这种问题最好是单步跟踪,看寄存器的状态,才能发现问题
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2015-11-22
在线时间
1 小时
 楼主| 发表于 2015-12-24 21:16:50 | 显示全部楼层
回复【10楼】313668972:
用Jlink调试?
回复

使用道具 举报

13

主题

276

帖子

0

精华

高级会员

Rank: 4

积分
697
金钱
697
注册时间
2014-6-20
在线时间
146 小时
发表于 2015-12-25 09:07:33 | 显示全部楼层
回复【11楼】南城以南亦是南:
---------------------------------
是哦,看配置是否出错
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 15:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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