main.c
/**定时器中断TIM3方式,(当基本定时器不用PWM输出)
设计两路输出两路脉冲波:
周期:100us,占空比80%
周期:100us,占空比20%**/
int main(void)
{
LED_Init();//pc14引脚初始化
BEEP_Init();/pc13引脚初始化
TIME_Init();//定时器初始化
while(1);
}
time.c
#include "stm32f10x.h"
#include "time.h"
#include "delay.h"
#include "beep.h"
#include<stdio.h>
void TIME_Init(void)
{
TIM_TimeBaseInitTypeDef time3;//定义基本定时器结构体名字
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能
//定时器time4初始化
time3.TIM_Prescaler=72-1;//设置用来作为TIMx时钟频率除数的预分频值7199
time3.TIM_Period=10-1; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值4999
TIM_TimeBaseInit(TIM3,&time3); //根据指定的参数初始化TIMx的时间基数单位
TIM_Cmd(TIM3,ENABLE ); //使能指定的TIMx
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM4中断,允许更新中断
//中断优先级NVIC设置
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级3级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器
}
//定时器4中断服务程序
int i=0;
void TIM3_IRQHandler(void) //TIM4中断
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) ==1) //检查TIM4更新中断发生与否
{
if(i<2)
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
else
GPIO_SetBits(GPIOC,GPIO_Pin_13);
if(i<5)
GPIO_ResetBits(GPIOC,GPIO_Pin_14);
else
GPIO_SetBits(GPIOC,GPIO_Pin_14);
i++;
if(i>9)
i=0;
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除TIMx更新中断标志
}
}
|