OpenEdv-开源电子网

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

我想尽可能提高阿波罗F429以太网摄像头的传输速度,大家有什么优化的方案吗,

[复制链接]

61

主题

338

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1342
金钱
1342
注册时间
2021-4-28
在线时间
504 小时
发表于 2022-7-4 21:49:24 | 显示全部楼层 |阅读模式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

385

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1023
金钱
1023
注册时间
2019-9-21
在线时间
269 小时
发表于 2022-7-5 11:19:37 | 显示全部楼层
回复

使用道具 举报

11

主题

2130

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4724
金钱
4724
注册时间
2015-1-10
在线时间
590 小时
发表于 2022-7-5 11:21:06 | 显示全部楼层
原图传输?图片压缩的话可以快一点
回复

使用道具 举报

2

主题

67

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
499
金钱
499
注册时间
2019-8-20
在线时间
154 小时
发表于 2022-7-5 11:30:14 | 显示全部楼层
推荐你去看看安富莱,硬汉喜欢折腾,他把F407/F429/H743的百兆网口速度都榨干了。如果你的网卡也能达到99Mbps,何愁大事不成
回复

使用道具 举报

61

主题

338

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1342
金钱
1342
注册时间
2021-4-28
在线时间
504 小时
 楼主| 发表于 2022-7-5 23:07:07 | 显示全部楼层
要求传输的图像得保证清晰度,最近代码中以太网传输过程中,死机,后来把任务堆栈给调大,似乎没出现这个问题了,但我把传输速率调到15FPS,任务堆栈2500还是会死机,不知道是哪出问题了,求指点
回复

使用道具 举报

13

主题

643

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2432
金钱
2432
注册时间
2019-12-28
在线时间
527 小时
发表于 2022-7-6 10:08:24 | 显示全部楼层
帮顶  
回复

使用道具 举报

61

主题

338

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1342
金钱
1342
注册时间
2021-4-28
在线时间
504 小时
 楼主| 发表于 2022-7-10 09:39:37 | 显示全部楼层
CJC529 发表于 2022-7-5 23:07
要求传输的图像得保证清晰度,最近代码中以太网传输过程中,死机,后来把任务堆栈给调大,似乎没出现这个问 ...

找出了几个原因
1.在HAL库F4 V1.4.4版本中,DCMI初始化DCMI_Init()并不会使能DCMI捕获中断了,原子使用的是V1.4.2 该函数会开启中断
2. 系统在复位进入初始化时,不能立马连接摄像头,否则就会死机(尚未找到原因),需要等待几分钟,就能保证系统运行正常
回复

使用道具 举报

61

主题

338

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1342
金钱
1342
注册时间
2021-4-28
在线时间
504 小时
 楼主| 发表于 2022-7-10 09:40:25 | 显示全部楼层
V1.4.2 DCMI_初始化

__weak HAL_StatusTypeDef HAL_DCMI_Init(DCMI_HandleTypeDef *hdcmi)
{     
  /* Check the DCMI peripheral state */
  if(hdcmi == NULL)
  {
     return HAL_ERROR;
  }
  
  /* Check function parameters */
  assert_param(IS_DCMI_ALL_INSTANCE(hdcmi->Instance));
  assert_param(IS_DCMI_PCKPOLARITY(hdcmi->Init.PCKPolarity));
  assert_param(IS_DCMI_VSPOLARITY(hdcmi->Init.VSPolarity));
  assert_param(IS_DCMI_HSPOLARITY(hdcmi->Init.HSPolarity));
  assert_param(IS_DCMI_SYNCHRO(hdcmi->Init.SynchroMode));
  assert_param(IS_DCMI_CAPTURE_RATE(hdcmi->Init.CaptureRate));
  assert_param(IS_DCMI_EXTENDED_DATA(hdcmi->Init.ExtendedDataMode));
  assert_param(IS_DCMI_MODE_JPEG(hdcmi->Init.JPEGMode));

  if(hdcmi->State == HAL_DCMI_STATE_RESET)
  {
    /* Allocate lock resource and initialize it */
    hdcmi->Lock = HAL_UNLOCKED;
    /* Init the low level hardware */
    HAL_DCMI_MspInit(hdcmi);
  }
  
  /* Change the DCMI state */
  hdcmi->State = HAL_DCMI_STATE_BUSY;
  /* Configures the HS, VS, DE and PC polarity */
  hdcmi->Instance->CR &= ~(DCMI_CR_PCKPOL | DCMI_CR_HSPOL  | DCMI_CR_VSPOL  | DCMI_CR_EDM_0 |
                           DCMI_CR_EDM_1  | DCMI_CR_FCRC_0 | DCMI_CR_FCRC_1 | DCMI_CR_JPEG  |
                           DCMI_CR_ESS);
  hdcmi->Instance->CR |=  (uint32_t)(hdcmi->Init.SynchroMode | hdcmi->Init.CaptureRate | \
                                     hdcmi->Init.VSPolarity  | hdcmi->Init.HSPolarity  | \
                                     hdcmi->Init.PCKPolarity | hdcmi->Init.ExtendedDataMode | \
                                     hdcmi->Init.JPEGMode);

  if(hdcmi->Init.SynchroMode == DCMI_SYNCHRO_EMBEDDED)
  {
    DCMI->ESCR = (((uint32_t)hdcmi->Init.SyncroCode.FrameStartCode)    |
                  ((uint32_t)hdcmi->Init.SyncroCode.LineStartCode << 8U)|
                  ((uint32_t)hdcmi->Init.SyncroCode.LineEndCode << 16U) |
                  ((uint32_t)hdcmi->Init.SyncroCode.FrameEndCode << 24U));

  }
  
/* Enable the Line interrupt */
  __HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_LINE);

  /* Enable the VSYNC interrupt */
  __HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_VSYNC);

  /* Enable the Frame capture complete interrupt */
  __HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_FRAME);

  /* Enable the Synchronization error interrupt */
  __HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_ERR);

  /* Enable the Overflow interrupt */
  __HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_OVF);
  
  /* Enable DCMI by setting DCMIEN bit */
  __HAL_DCMI_ENABLE(hdcmi);

  /* Update error code */
  hdcmi->ErrorCode = HAL_DCMI_ERROR_NONE;
  

  /* Initialize the DCMI state*/
  hdcmi->State  = HAL_DCMI_STATE_READY;

  return HAL_OK;
}
回复

使用道具 举报

61

主题

338

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1342
金钱
1342
注册时间
2021-4-28
在线时间
504 小时
 楼主| 发表于 2022-7-10 09:44:01 | 显示全部楼层
V1.4.4
__weak HAL_StatusTypeDef HAL_DCMI_Init(DCMI_HandleTypeDef *hdcmi)
{     
  /* Check the DCMI peripheral state */
  if(hdcmi == NULL)
  {
     return HAL_ERROR;
  }
  
  /* Check function parameters */
  assert_param(IS_DCMI_ALL_INSTANCE(hdcmi->Instance));
  assert_param(IS_DCMI_PCKPOLARITY(hdcmi->Init.PCKPolarity));
  assert_param(IS_DCMI_VSPOLARITY(hdcmi->Init.VSPolarity));
  assert_param(IS_DCMI_HSPOLARITY(hdcmi->Init.HSPolarity));
  assert_param(IS_DCMI_SYNCHRO(hdcmi->Init.SynchroMode));
  assert_param(IS_DCMI_CAPTURE_RATE(hdcmi->Init.CaptureRate));
  assert_param(IS_DCMI_EXTENDED_DATA(hdcmi->Init.ExtendedDataMode));
  assert_param(IS_DCMI_MODE_JPEG(hdcmi->Init.JPEGMode));

  if(hdcmi->State == HAL_DCMI_STATE_RESET)
  {
    /* Allocate lock resource and initialize it */
    hdcmi->Lock = HAL_UNLOCKED;
    /* Init the low level hardware */
    HAL_DCMI_MspInit(hdcmi);
  }
  
  /* Change the DCMI state */
  hdcmi->State = HAL_DCMI_STATE_BUSY;
  /* Configures the HS, VS, DE and PC polarity */
  hdcmi->Instance->CR &= ~(DCMI_CR_PCKPOL | DCMI_CR_HSPOL  | DCMI_CR_VSPOL  | DCMI_CR_EDM_0 |
                           DCMI_CR_EDM_1  | DCMI_CR_FCRC_0 | DCMI_CR_FCRC_1 | DCMI_CR_JPEG  |
                           DCMI_CR_ESS);
  hdcmi->Instance->CR |=  (uint32_t)(hdcmi->Init.SynchroMode | hdcmi->Init.CaptureRate | \
                                     hdcmi->Init.VSPolarity  | hdcmi->Init.HSPolarity  | \
                                     hdcmi->Init.PCKPolarity | hdcmi->Init.ExtendedDataMode | \
                                     hdcmi->Init.JPEGMode);

  if(hdcmi->Init.SynchroMode == DCMI_SYNCHRO_EMBEDDED)
  {
    DCMI->ESCR = (((uint32_t)hdcmi->Init.SyncroCode.FrameStartCode)    |
                  ((uint32_t)hdcmi->Init.SyncroCode.LineStartCode << 8U)|
                  ((uint32_t)hdcmi->Init.SyncroCode.LineEndCode << 16U) |
                  ((uint32_t)hdcmi->Init.SyncroCode.FrameEndCode << 24U));

  }

  /* Enable DCMI by setting DCMIEN bit */
  __HAL_DCMI_ENABLE(hdcmi);

  /* Update error code */
  hdcmi->ErrorCode = HAL_DCMI_ERROR_NONE;
  
  /* Initialize the DCMI state*/
  hdcmi->State  = HAL_DCMI_STATE_READY;

  return HAL_OK;
}
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 12:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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