一株月见草哇 2024-07-16 15:38 采纳率: 0%
浏览 13

32 OLED不亮求解

stm32 江科大 疑惑求解 外部中断控制对射式红外传感器计次实验,OLED不亮的问题。
问题描述:main.c里,这句CountSensor_Init();注释掉,OLED正常显示,一加上OLED就黑屏了,这是什么原因啊,网上没找到合适的解答。
源代码附在下面了:
CountSenor.c部分:


#include "stm32f10x.h"  // Device header
 
uint16_t CountSensor_Count;
void CountSensor_Init(void)
{
    
    GPIO_InitTypeDef GPIO_InitStruct;
    EXTI_InitTypeDef EXTI_InitStruct;
    NVIC_InitTypeDef NVIC_InitStruct;
    
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, ENABLE);
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO, ENABLE);
    
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_14;
    GPIO_InitStruct.GPIO_Speed  = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStruct);
    
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);
    
    EXTI_InitStruct.EXTI_Line = EXTI_Line14;
    EXTI_InitStruct.EXTI_LineCmd = ENABLE;
    EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStruct.EXTI_Trigger  = EXTI_Trigger_Falling;
    EXTI_Init(&EXTI_InitStruct);
    
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    NVIC_InitStruct.NVIC_IRQChannel= EXTI15_10_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
    NVIC_Init(&NVIC_InitStruct);
}
 
uint16_t CountSensor_Get(void)
{
    return CountSensor_Count;
}
 
void EXTI15_10_IRQHandler(void)
{
    if(EXTI_GetITStatus(EXTI_Line14) == SET)
    {
        
        if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0)
        {
            CountSensor_Count++;
        }
        EXTI_ClearITPendingBit(EXTI_Line14);
 
    }
}

CountSenor.h部分:


#ifndef __COUNTSENSOR_H
#define __COUNTSENSOR_H
 
void CountSensor_Init(void);
uint16_t CountSensor_Get(void);
void EXTI15_10_IRQHandler(void);
#endif

main.c部分:


#include "stm32f10x.h"                  // Device header
#include "delay.h"
#include "OLED.h"
#include "CountSensor.h"
 
int main(void)
{
    OLED_Init();
    CountSensor_Init();
    
    
    OLED_ShowString(1, 1, "Count:");
    
    while(1)
    {
        OLED_ShowNum(2,1,CountSensor_Get(),5);
    }
}
  • 写回答

4条回答 默认 最新

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

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

    这个问题可能涉及到硬件和软件两个方面的因素。首先,让我们从软件的层面来分析一下可能的问题原因。然后,如果软件层面无法解决问题,我们再从硬件的角度进行分析。

    软件层面:

    1. 资源冲突:有可能你的OLED初始化函数和其他模块(如CountSensor_Init)之间存在资源冲突,例如使用了相同的寄存器或者引脚配置等。在初始化OLED时,可能会更改一些配置参数,这些参数在初始化传感器时被覆盖,导致传感器或OLED无法正常工作。检查两个模块的初始化代码是否有潜在的冲突点。
    2. 中断优先级配置:确保你的中断处理程序(EXTI中断处理程序)有正确的优先级设置,避免中断与OLED屏幕更新之间的冲突。如果OLED屏幕更新被中断处理程序打断,可能会导致显示异常。检查NVIC的配置是否正确。

    硬件层面:

    1. 电源问题:确保OLED模块有足够的电源供应。在某些情况下,添加额外的外设可能会影响其他模块的电源供应,导致模块工作不正常。检查电源分配和电压水平是否满足要求。
    2. 连接问题:确保传感器与单片机的连接是正确的,并且所有接线都是完好的。检查连接器和线缆是否有松动或损坏的情况。有时候接触不良也会导致外设无法正常工作。
    3. 引脚配置冲突:确认你的引脚配置没有冲突。特别是如果你使用的是多个外设并使用了相同的引脚进行通信和控制时,务必仔细检查配置。检查相关的GPIO引脚是否被正确配置和使用。如果你之前遇到了资源冲突的问题,也有可能是由于引脚配置不当导致的。确保传感器和OLED使用的引脚没有冲突并且都已正确配置。仔细检查引脚复用情况(某些引脚在不同的功能模式下有不同的用途)。如果引脚复用不当可能导致外设无法正常工作。检查你的引脚配置是否正确无误。

    如果以上都没有问题,那么可能需要更深入地调试代码和硬件连接了。你可以尝试使用调试器逐步调试代码,查看在调用OLED初始化函数后程序的执行状态是否异常。同时,你也可以使用示波器等工具检查硬件信号是否正常。根据调试结果和信号状态来进一步分析问题的根源并解决它。在这个过程中可能需要更详细的调试信息和代码分析,你可以提供更多信息以便进一步分析。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月16日

悬赏问题

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