硬件连接PB5为高电平点亮led
要实现的功能,定时器3定时1s,中断函数中对led取反,读取脉冲计数值。
结果仿真发现LED_Init()初始化后点亮led,持续大约0.6ms后变为低电平。如图3
具体函数如下
main函数
int main(void)
{
u8 i=0;
u8 *s=tab;
RCC_Configuration();
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
GPIO_Configuration();
LED_Init();//PB5指示灯
//LCD_init(); //lcd初始化
//LCD_prints(1,0,s); //lcd第一行输出Lcd Test!
TIM1_Configuration(); //TIM1对PA12输入脉冲计数
TIM2_Configuration(); //TIM2对PA0输入脉冲计数
TIM3_Int_Init(10000-1,7200-1);//10Khz的计数频率,计数到10000为1s
//TIM3_Int_Init(2000-1,72-1);//1M的计数频率,计数到2000为2ms
while(1)
{
for(i = 0; i < 4; i ++) // 软件延时产生pwm,tim1 正常计数
{ //
GPIO_SetBits(GPIOE, GPIO_Pin_5); //200us
Delay(1000); //
GPIO_ResetBits(GPIOE, GPIO_Pin_5); //
Delay(1000);
} //
}
}
Led初始化函数
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);//使能PB,PE端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->  B.5 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5
GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1-->  E.5 端口配置, 推挽输出
GPIO_Init(GPIOE, &GPIO_InitStructure); //推挽输出 ,IO口速度为50MHz
GPIO_SetBits(GPIOE,GPIO_Pin_5); //PE.5 输出高
}
中断函数
//定时器3中断服务程序
void TIM3_IRQHandler(void) //TIM3中断
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中断标志
// LED0=!LED0; ///
counter=TIM_GetCounter(TIM2); //
LCD_dispnum(counter);
TIM_SetCounter(TIM1, 0);
TIM_Cmd(TIM3, DISABLE); //使能TIMx
}
} |