m0_63475249 2024-05-07 02:14 采纳率: 0%
浏览 37

定时器中断 oled黑屏

Stm32用了定时器中断,定时器一初始化oled就黑屏了,把定时器初始化给注释掉oled就恢复,这是什么原因啊

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-07 02:14
    关注

    引自免费微信小程序:皆我百晓生

    首先,我们需要检查几个可能的原因导致OLED屏幕在启用定时器中断后变黑:

    1. 中断优先级冲突:确保定时器中断的优先级没有高于显示屏更新的中断优先级,这可能会导致显示屏中断被抢占。
    2. 堆栈溢出:检查是否有足够的堆栈空间供定时器中断服务程序使用。如果堆栈溢出,可能会导致系统不稳定。
    3. 中断处理程序中的错误:查看定时器中断服务程序(ISR)中的代码,确保没有意外的操作影响到OLED控制器寄存器或数据线。
    4. 时钟配置:确认定时器时钟是否正确设置,以及OLED驱动器的时钟是否受到影响。

    为了帮助您解决这个问题,我们可以按照以下步骤进行排查:

    步骤1:检查中断优先级

    确保您的定时器中断优先级低于OLED显示相关的中断优先级,例如外部中断或DMA等。这可以通过修改NVIC_InitTypeDef结构体并调用NVIC_SetPriority()函数来实现。下面是一个示例代码,将定时器中断的优先级设置为最低(0x00),并将OLED相关的中断(这里假设是EXTI中断)设置为较高优先级(例如0x0F):

    NVIC_InitTypeDef NVIC_InitStructure;
    
    // 设置定时器中断优先级为最低
    NVIC_InitStructure.NVIC_IRQChannel = TIM_IRQn; // 替换为实际的定时器中断号
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    
    // 设置OLED相关中断(例如EXTI)优先级为较高
    NVIC_InitStructure.NVIC_IRQChannel = EXTI_IRQn; // 替换为实际的EXTI中断号
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    

    步骤2:检查堆栈大小

    增加中断服务程序使用的堆栈大小。在STM32CubeMX中可以调整,或者在main.c文件中手动分配更大的堆栈:

     cortex_mhabi蟆_stack_t __attribute__((section(".estack"))) _estack = {0};
    

    步骤3:分析中断服务程序

    检查定时器中断服务程序,确保没有执行任何可能导致OLED屏幕变黑的操作。例如,确保没有意外地清零了OLED控制器寄存器或改变了数据线状态。提供一下定时器中断服务程序的代码,以便进一步分析。

    步骤4:验证时钟配置

    确保定时器和OLED驱动器的时钟都已正确配置。在STM32CubeMX中检查时钟树,并确保在system_stm32fxxx.c文件中开启了相应的时钟。

    如果你仍然遇到问题,可能需要更多关于硬件配置、驱动代码和中断服务程序的信息来进行更深入的分析。请提供这些详细信息,以便我能给出更具体的建议。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月7日

悬赏问题

  • ¥15 Workbench中材料库无法更新,如何解决?
  • ¥20 如何推断此服务器配置
  • ¥15 关于github的项目怎么在pycharm上面运行
  • ¥15 内存地址视频流转RTMP
  • ¥100 有偿,谁有移远的EC200S固件和最新的Qflsh工具。
  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析
  • ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败