在程序运行的时候直接运行 LED3=1;关键我还没使能呢 主程序LED3=0;是亮当仿真到如下定时计数器初始化得时候LED3灭;初步怀疑是进入了void TIM3_IRQHandler(void) //TIM3中断函数因为我把那个函数的LED3=1注释掉,在仿真就不会灭为什么
#include "stm32f10x.h"
#include "io.h"
#include "sys.h"
u8 n=0;;
void timer_init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时计数器3的时钟
TIM_TimeBaseStructure.TIM_Period = arr;//设置自动装载周期值
TIM_TimeBaseStructure.TIM_Prescaler =psc;//设置分频系数
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//设置时钟分频因子
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//设置为向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );//使能更新中断
//中断优先级配置
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //抢占优先级0级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //响应优先级3级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器
}
void TIM3_IRQHandler(void) //TIM3中断函数
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update)!= RESET) //检查中断3是否发生
{
u16 GPIOA_date,num;
// LED3=1;
GPIOA_date =GPIO_ReadInputData(GPIOA);
num =GPIOA_date & 0x001f;
num=num*2;
if(num==n)
{
Txd_signal = 0;
}
if(num+1== n++)
{
LED3=1;
TIM_Cmd(TIM3, DISABLE);//禁止定时计数器3
Txd_signal = 1;
n=0;
}
TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除中断3的中断标志
}
}
|