硕! 2024-05-29 00:14 采纳率: 28.6%
浏览 3

Stm32的DCMI接口可以与下面的视频解码芯片通讯吗?

img


我的想法是通过视频解码芯片输入AV信号或者HDMI信号,再将这些视频芯片解码输出的数据,通过DCMI连接到stm 32单片机上进行显示!
这种方案是否可行?
查资料大部分都是接摄像头!

  • 写回答

2条回答 默认 最新

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

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

    在您的设想中,利用STM32的DCMI(数字相机接口)与视频解码芯片通信以实现视频数据处理和显示是完全可行的。不过,要实现这个目标,您需要确保以下几个关键点:

    1. 视频解码芯片的输出格式:首先,您需要了解TVP5150AM1PBSR和ADV7123KSTZ140这两款芯片的视频输出格式。TVP5150通常支持复合视频(CVBS)、S-video和YCbCr分量输出,而ADV7123则支持多种数字视频接口,如YPbPr、RGB等。确保解码后的视频信号能与STM32的DCMI接口兼容。

    2. STM32的DCMI接口配置:STM32系列微控制器中的DCMI接口通常设计用于与数码相机通信,但其本质上是一个灵活的视频接口,可以通过适当配置支持各种视频模式。因此,您需要查阅STM32的参考手册,了解如何配置DCMI以匹配解码芯片的输出格式。

    3. 软件编程:为了使STM32正确接收并处理视频数据,您需要编写相应的驱动程序来控制DCMI接口,并处理接收到的数据。这可能包括设置时钟、触发信号、数据线配置以及数据缓冲区管理。

    4. 显示设备:您还需要一个显示设备,例如LCD显示屏,配合STM32的GPIO引脚进行驱动。这可能需要额外的驱动程序和配置。

    以下是简化的步骤概述:

    1. 获取规格:从供应商网站或数据手册中获取TVP5150AM1PBSR和ADV7123KSTZ140的详细规格,特别是视频输出格式和接口要求。

    2. STM32 DCMI 配置:根据解码芯片的输出格式,配置STM32的DCMI接口。这可能涉及到GPIO、时钟源、触发信号的选择和配置。

      // 示例代码,具体配置取决于实际使用的STM32型号
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_DCMI, ENABLE); // 启动DCMI时钟
      DCMI_InitStructure.DCMIMode = DCMI_Mode_Snapshot; // 设置为抓拍模式
      DCMI_InitStructure.DCMISSpeed = DCMI_ISSpeed_80MHz; // 设置接口速度
      DCMI_InitStructure.DCMIClockPhase = DCMI_ClockPhase_Prescaler2;
      DCMI_InitStructure.DCMIClockPolarity = DCMI_ClockPolarity_RisingEdge;
      DCMI_Init(&DCMI_InitStructure);
      
    3. 中断处理:配置DCMI中断,以便在新一帧数据到达时执行相应处理。

      NVIC_InitStructure.NVIC_IRQChannel = DCMI_IRQn; // DCMI中断向量
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
      NVIC_Init(&NVIC_InitStructure);
      
      DCMI_ITConfig(DCMI_IT_FRAME, ENABLE); // 开启帧中断
      
    4. 数据读取和处理:在中断服务程序(ISR)中,读取解码后的视频数据,并将其传递给LCD控制器或进行其他处理。

      void DCMI_IRQHandler(void)
      {
          if (DCMI_GetITStatus(DCMI_IT_FRAME) != RESET)
          {
              // 读取一行数据
              uint8_t line_data[LINE_SIZE]; // 确保数组大小足够存放一行数据
              DCMI_ReadData(line_data, LINE_SIZE);
      
              // 处理数据,比如传送给LCD控制器
              LCD_Controller_UpdateLine(line_data);
      
              // 清除中断标志
              DCMI_ClearITPendingBit(DCMI_IT_FRAME);
          }
      }
      
    5. LCD驱动:根据所选的LCD屏,编写驱动程序,使用GPIO引脚控制LCD的行、列地址以及数据传输。

    6. 系统集成:将所有组件物理连接起来,然后在STM32上烧录上述代码,调试并验证视频流的正确显示。

    请注意,以上代码示例仅为概念性指导,具体实现可能会因STM32型号、LCD控制器和其他硬件差异而有所不同。此外,确保所有的电源和接地都已正确设置,以保证稳定的工作性能。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月29日

悬赏问题

  • ¥20 指导如何跑通以下两个Github代码
  • ¥15 大家知道这个后备文件怎么删吗,为啥这些文件我只看到一份,没有后备呀
  • ¥15 C++为什么这个代码没报错运行不出来啊
  • ¥15 一道ban了很多东西的pyjail题
  • ¥15 关于#r语言#的问题:如何将生成的四幅图排在一起,且对变量的赋值进行更改,让组合的图漂亮、美观@(相关搜索:森林图)
  • ¥15 C++识别堆叠物体异常
  • ¥15 微软硬件驱动认证账号申请
  • ¥15 GPT写作提示指令词
  • ¥20 根据动态演化博弈支付矩阵完成复制动态方程求解和演化相图分析等
  • ¥15 华为超融合部署环境下RedHat虚拟机分区扩容问题