OpenEdv-开源电子网

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

大佬们,定时器中断实验对官方程序对led控制部分修改,结果led灯一直亮

[复制链接]

3

主题

5

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2023-9-17
在线时间
3 小时
发表于 2023-9-21 23:24:24 | 显示全部楼层 |阅读模式
3金钱
定时器中断实验
只修改了led.c led.h部分,并删除了主函数中的原来的while(1)函数,其余是官方的,结果灯不闪烁,一直处于亮的状态
led.h
#ifndef __LED_H
#define __LED_H
#include"sys.h"
#define LED0 PAout(5)
#define LED1 PAout(6)
void LED_Init(void);

#endif




led.c
#include"led.h"
#include"sys.h"

void LED_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct;
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
       
        GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;
        GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
        GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6;
        GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
        GPIO_InitStruct.GPIO_Speed=GPIO_Speed_100MHz;
       
       
GPIO_Init(GPIOA,&GPIO_InitStruct);
        GPIO_ResetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6);
       
}



main.c

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "timer.h"

int main(void)
{
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÉèÖÃϵͳÖжÏÓÅÏȼ¶·Ö×é2
        delay_init(168);  //³õʼ»¯ÑÓʱº¯Êý
        LED_Init();                                //³õʼ»¯LED¶Ë¿Ú

        TIM3_Int_Init(5000-1,8400-1);        //¶¨Ê±Æ÷ʱÖÓ84M£¬·ÖƵϵÊý8400£¬ËùÒÔ84M/8400=10KhzµÄ¼ÆÊýƵÂÊ£¬¼ÆÊý5000´ÎΪ500ms     
       
}






timer.h
#ifndef _TIMER_H
#define _TIMER_H
#include "sys.h"

void TIM3_Int_Init(u16 arr,u16 psc);
#endif



timer.c

#include "timer.h"
#include "led.h"

void TIM3_Int_Init(u16 arr,u16 psc)
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);  ///ʹÄÜTIM3ʱÖÓ
       
  TIM_TimeBaseInitStructure.TIM_Period = arr;         //×Ô¶¯ÖØ×°ÔØÖµ
        TIM_TimeBaseInitStructure.TIM_Prescaler=psc;  //¶¨Ê±Æ÷·ÖƵ
        TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //ÏòÉϼÆÊýģʽ
        TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
       
        TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//³õʼ»¯TIM3
       
        TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //ÔÊÐí¶¨Ê±Æ÷3¸üÐÂÖжÏ
        TIM_Cmd(TIM3,ENABLE); //ʹÄܶ¨Ê±Æ÷3
       
        NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //¶¨Ê±Æ÷3ÖжÏ
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; //ÇÀÕ¼ÓÅÏȼ¶1
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //×ÓÓÅÏȼ¶3
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
       
}

//¶¨Ê±Æ÷3ÖжϷþÎñº¯Êý
void TIM3_IRQHandler(void)
{
        if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //Òç³öÖжÏ
        {
                LED1=!LED1;//DS1·­×ª
        }
        TIM_ClearITPendingBit(TIM3,TIM_IT_Update);  //Çå³ýÖжϱê־λ
}




最佳答案

查看完整内容[请看2#楼]

已经通过拨打官方电话成功解决,是由于主函数中缺少了 while(1) { } 导致灯不能闪烁
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

5

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2023-9-17
在线时间
3 小时
 楼主| 发表于 2023-9-21 23:24:25 | 显示全部楼层
已经通过拨打官方电话成功解决,是由于主函数中缺少了
while(1)
{

}
导致灯不能闪烁
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 06:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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