OpenEdv-开源电子网

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

TIM2各通道实现输出比较模式

[复制链接]

7

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2013-4-6
在线时间
1 小时
发表于 2013-4-6 15:06:23 | 显示全部楼层 |阅读模式
 #include "stm32f10x.h"
#include "stdio.h"
#include "stm32f10x_it.h"
#include "stm32f10x_tim.h"
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
void RCC_Configuration(void);
void NVIC_Configuration(void); 
void GPIO_Configuration(void);
void TIM_Configuration(void);
//void USART_Configuration(void);
void delay(vu32 ncount);
vu16 CCR1_Val=0x8000;
vu16 CCR2_Val=0x4000;
vu16 CCR3_Val=0x2000;
vu16 CCR4_Val=0x1000;
int main()

RCC_Configuration();
GPIO_Configuration();
NVIC_Configuration();
TIM_Configuration();
TIM_Cmd(TIM2,ENABLE);  
TIM_ITConfig(TIM2,TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4,ENABLE);
 while(1)
 { 
 
 }
 
}

void RCC_Configuration(void)
{
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
}

void NVIC_Configuration(void)


#ifdef VETB_TAB_RAM 

NVYC_SetVectorTable(NVIC_VectTab_RAM,0x0);
#else 

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

#endif


   NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;   //使能按键所在的外部中断通道
   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级2,
   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;     //子优先级1
   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;        //使能外部中断通道
   NVIC_Init(&NVIC_InitStructure);


}
void GPIO_Configuration(void)

 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;     //LED0-->A.8 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;    //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOA, &GPIO_InitStructure);
  
}


 
 
void TIM_Configuration(void)
{
 
 TIM_TimeBaseInitStructure.TIM_Period=0xffff;
 TIM_TimeBaseInitStructure.TIM_Prescaler=0x02;
 TIM_TimeBaseInitStructure.TIM_ClockDivision=0x0;
 TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
 TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);


TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
TIM_OCInitStructure.TIM_Channel = TIM_Channel_1;
TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; 
TIM_OC1Init(TIM2,&TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Disable);


TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
TIM_OCInitStructure.TIM_Channel = TIM_Channel_2;
TIM_OCInitStructure.TIM_Pulse = CCR2_Val;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; 
TIM_OC2Init(TIM2,&TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Disable);

 

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
TIM_OCInitStructure.TIM_Channel = TIM_Channel_3;
TIM_OCInitStructure.TIM_Pulse = CCR3_Val;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; 
TIM_OC3Init(TIM2,&TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Disable);

 

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
TIM_OCInitStructure.TIM_Channel = TIM_Channel_4;
TIM_OCInitStructure.TIM_Pulse = CCR4_Val;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; 
TIM_OC4Init(TIM2,&TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Disable);


}



///#include "stm32f10x_it.c"
void TIM2_IRQHandler(void)
{
 if(TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)
 {
    TIM_ClearITPendingBit(TIM2, TIM_IT_CC1);
    capture1 = TIM_GetCapture1(TIM2);
    TIM_SetCompare1(TIM2,  capture1+CCR1_Val);
 }


  if(TIM_GetITStatus(TIM2, TIM_IT_CC2) != RESET)
 {
    TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);
    capture2 = TIM_GetCapture2(TIM2);
    TIM_SetCompare2(TIM2,  capture1+CCR2_Val);
 }

        if(TIM_GetITStatus(TIM2, TIM_IT_CC3)!= RESET)
 {
    TIM_ClearITPendingBit(TIM2, TIM_IT_CC3);
    capture3 = TIM_GetCapture1(TIM2);
    TIM_SetCompare3(TIM2,  capture3+CCR3_Val);
 }


  if(TIM_GetITStatus(TIM2, TIM_IT_CC4) != RESET)
 {
    TIM_ClearITPendingBit(TIM2, TIM_IT_CC4);
    capture4 = TIM_GetCapture4(TIM2);
    TIM_SetCompare4(TIM2,  capture1+CCR4_Val);
 }

}

Time实验.zip

5.41 MB, 下载次数: 159

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

使用道具 举报

126

主题

820

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1683
金钱
1683
注册时间
2012-10-28
在线时间
62 小时
发表于 2013-4-6 17:17:59 | 显示全部楼层
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-22 02:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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