野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12350|回复: 3

显示内存卡里的图片,卡死

[复制链接]
发表于 2015-12-4 16:45:23 | 显示全部楼层 |阅读模式
开了定时器2的定时中断时,在切换内存卡里的图片显示时,出现卡死或者显示乱码,在关闭定时器2的定时中断时,不出现这样的问题,请问这是问什么了?下面时定时器2的配置



/// TIM2中断优先级配置
void TIM2_NVIC_Configuration(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);                                                                                                         
    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;          
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;       
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

/*
* TIM_Period / Auto Reload Register(ARR) = 1000   TIM_Prescaler--71
* 中断周期为 = 1/(72MHZ /72) * 1000 = 1ms
*
* TIMxCLK/CK_PSC //预分频?--> TIMxCNT --> TIM_Period(ARR) --> 中断 且TIMxCNT重置为0重新计数
*/
void TIM2_Configuration(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
               
                /* 设置TIM2CLK 为 72MHZ */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
    //TIM_DeInit(TIM2);
       
        /* 自动重装载寄存器周期的值(计数值) */
    TIM_TimeBaseStructure.TIM_Period=10000;   //10MS中断一次
       
    /* 累计 TIM_Period个频率后产生一个更新或者中断 */
          /* 时钟预分频数为72 */
    TIM_TimeBaseStructure.TIM_Prescaler= 71;
       
                /* 对外部时钟进行采样的时钟分频,这里没有用到 */
    TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
       
    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);//时基初始化
       
    TIM_ClearFlag(TIM2, TIM_FLAG_Update);
       
    TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//使能中断
               
    TIM_Cmd(TIM2, ENABLE);                //使能定时器2                                                                                                                               

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , DISABLE);                /*先关闭等待使用*/   
}

void TIM2_init(void)
{
    TIM2_NVIC_Configuration();       
    TIM2_Configuration();       
}
/*********************************************END OF FILE**********************/

回复

使用道具 举报

 楼主| 发表于 2015-12-4 16:49:13 | 显示全部楼层
中断函数里有 切换屏幕扫描方向的函数

void TIM2_IRQHandler(void)
{
        static uint8_t timer3;
        static uint8_t bz1=0;
       
        if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET )
        {                        
//加个按键扫描功能
        timer2++;
        timer3++;
        //currentButton = ScanButton();
        if(current_screen==main_screen && timer3==70)
        {
        if(bz1==0)
        {
    Lcd_GramScan(1);               
    LCD_DispStr(30,300,"  ",RED,BLACK,32,0,1);//向下
    Lcd_GramScan(3);
        bz1=1;
        }
        else
        {
        Lcd_GramScan(1);               
    LCD_DispStr(30,300,"<<",RED,BLACK,32,0,1);//向下
    Lcd_GramScan(3);
        bz1=0;       
    }
        timer3=0;
    }
       
                 
        TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);                   
        }                        
}
回复 支持 反对

使用道具 举报

发表于 2015-12-5 08:50:04 | 显示全部楼层
显示SD卡里边的图片需要读文件还有显示过程,这两个过程需要的一定时间,
你在定时器服务函数内经常变换显示方向,很容易出现问题的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-5 15:33:05 | 显示全部楼层
亽亼 发表于 2015-12-5 08:50
显示SD卡里边的图片需要读文件还有显示过程,这两个过程需要的一定时间,
你在定时器服务函数内经常变换显 ...

谢谢,我也意识到这个问题了,我在显示图片的时候把定时关了,显示完再打开。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-6-18 22:04 , Processed in 0.029450 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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