OpenEdv-开源电子网

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

各位大神帮我分析一下程序!为什么定时器的两个通道控制的LED刚开始闪烁频率不同,过了一会马上就同时亮灭了?????????????

[复制链接]

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2013-11-4
在线时间
0 小时
发表于 2013-11-4 23:29:04 | 显示全部楼层 |阅读模式
#include "stm32f10x.h"

u16 capture=0;
u16 CCR1_Val=1000;//CH1要产生5000HZ频率的方波,则CCR1_Val=72M/(5000*2)=7200,0.1s
u16 CCR2_Val=100;//CH2要产生10Khz频率的方波,则CCR1_Val=72M/(10000*2)=3600,1s
u16 CCR3_Val=2;
u16 CCR4_Val=1;
/*TIM2 CLOCK ENABLE*/
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/*Configure one bit for preemption priority */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//设置NVIC中断分组1:1位抢占优先级,1位响应优先级
NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}

void TIM2_Configuration(void)
{
  TIM_OCInitTypeDef TIM_OCInitStructure;
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// TIM_ICInitTypeDef  TIM_ICInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
TIM_TimeBaseStructure.TIM_Period=10000;//计满值
TIM_TimeBaseStructure.TIM_Prescaler=7200-1;//预分频,此值加1为分频的出除数,0.0001s
//TIM_TimeBaseStructure.TIM_Prescaler=0;//不分频
TIM_TimeBaseStructure.TIM_ClockDivision=0x0;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

// TIM_CCxCmd(TIM2,TIM_Channel_1,)
// TIM_CCxCmd(TIM2,TIM_Channel_1, TIM_CCx);
TIM_CCxCmd(TIM2, TIM_Channel_1, TIM_CCx_Enable);
TIM_CCxCmd(TIM2, TIM_Channel_2, TIM_CCx_Enable);
TIM_CCxCmd(TIM2, TIM_Channel_3, TIM_CCx_Enable);
TIM_CCxCmd(TIM2, TIM_Channel_4, TIM_CCx_Enable);
/*比较通道1*/
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_Timing;//
TIM_OCInitStructure.TIM_Pulse=CCR1_Val;//设置了待装入捕获比较寄存器的脉冲zhi
  TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//极性为正
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
TIM_OC1Init(TIM2,&TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Disable);//禁止重装载
/*比较通道2*/
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_Timing;
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//极性为正
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse=CCR2_Val;
  TIM_OC2Init(TIM2,&TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Disable);
/*比较通道3*/
TIM_OCInitStructure.TIM_Pulse=CCR3_Val;
  // TIM_ICInitStructure.TIM_Channel=TIM_Channel_3;
TIM_OC3Init(TIM2,&TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Disable);
/*比较通道4*/
TIM_OCInitStructure.TIM_Pulse=CCR4_Val;
  // TIM_ICInitStructure.TIM_Channel=TIM_Channel_4;
TIM_OC4Init(TIM2,&TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Disable);
/*使能预装载*/
TIM_ARRPreloadConfig(TIM2,ENABLE);
/*预先清除所有中断位*/
TIM_ClearITPendingBit(TIM2,TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4|TIM_IT_Update);
/*4个中断和溢出都配置中断*/
TIM_ITConfig(TIM2,TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4|TIM_IT_Update,ENABLE);
TIM_Cmd(TIM2,ENABLE);

}
void TIM2_IRQHandler(void)
{
/*TIM2_CH1*/
if(TIM_GetITStatus(TIM2,TIM_IT_CC1)!=RESET)
{
TIM_ClearITPendingBit(TIM2,TIM_IT_CC1);
/*PC.1引脚的翻转频率为  Hz*/
GPIO_WriteBit(GPIOB,GPIO_Pin_1,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_1)));
capture=TIM_GetCapture1(TIM2);
TIM_SetCompare1(TIM2,capture+CCR1_Val);
//GPIO_ResetBits(GPIOC,GPIO_Pin_All);
}
/*TIM2_CH2*/
if(TIM_GetITStatus(TIM2,TIM_IT_CC2)!=RESET)
{
GPIO_WriteBit(GPIOB,GPIO_Pin_2,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_2)));
TIM_ClearITPendingBit(TIM2,TIM_IT_CC2);
capture=TIM_GetCapture2(TIM2);
TIM_SetCompare2(TIM2,capture+CCR2_Val);
//GPIO_SetBits(GPIOC,GPIO_Pin_All); 
}
}
// void TIM2_IRQHandler(void)
// {
// u8 ReadValue;
// //检测是否发生溢出更新事件
// if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)
// {
// //清除TIM2的中断待处理位
// TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update);//将PB.5管脚输出数值写入ReadValue
// ReadValue=GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5);
// if(ReadValue==0)
// {
// GPIO_SetBits(GPIOB,GPIO_Pin_5);
// }else
//
// GPIO_ResetBits(GPIOB,GPIO_Pin_5);
// }
// }


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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-5 19:11:25 | 显示全部楼层
回复 支持 反对

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2013-11-4
在线时间
0 小时
 楼主| 发表于 2013-11-5 20:21:14 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
没有仿真器啊!!!有木有别的办法
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-5 22:38:45 | 显示全部楼层
还可以软仿
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-9 15:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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