智能车制作

 找回密码
 注册

扫一扫,访问微社区

STM32论坛
查看: 6841|回复: 12
打印 上一主题 下一主题

stm32 DMA采集OV7620,采用外部pclk触发,定时器部分怎么设置??@野火 火哥求助

[复制链接]

34

主题

452

帖子

0

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
14046

优秀会员奖章活跃会员奖章在线王奖章

威望
6066
贡献
2554
兑换币
4050
注册时间
2013-7-29
在线时间
2713 小时
毕业学校
南京气象学院
跳转到指定楼层
1#
发表于 2013-12-21 10:36:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 何俊 于 2013-12-21 10:43 编辑

以下是DMA和TIM部分的设置,但是数据传入上位机没图像。
__IO uint8_t PHOTO_BUFF[ROW][COLUMN]; //图像原始数据
DMA_InitTypeDef DMA_InitStruct;
TIM_ICInitTypeDef  TIM_ICInitStruct;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStruct;

void DMA_Config()
{

  DMA_DeInit(DMA1_Channel6);
  DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)&GPIOD->IDR;   //该参数用以定义DMA外设基地址
  DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t) PHOTO_BUFF;       //该参数用以定义DMA内存基地址
  DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralSRC;                  //规定了外设是作为数据传输的目的地还是来源
  DMA_InitStruct.DMA_BufferSize = 100;                             //用以定义指定DMA通道的DMA缓存的大小,单位为数据单位
  DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;    //用来设定外设地址寄存器递增与否
  DMA_InitStruct.DMA_MemoryInc =DMA_MemoryInc_Disable;// DMA_MemoryInc_Enable;//用来设定内存地址寄存器递增与否
  DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;   //设定了外设数据宽度
  DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;     //设定了内存数据宽度
  DMA_InitStruct.DMA_Mode = DMA_Mode_Circular;                     //设置了CAN的工作模式
  DMA_InitStruct.DMA_Priority = DMA_Priority_VeryHigh;             //设定DMA通道x的软件优先级
  DMA_InitStruct.DMA_M2M = DMA_M2M_Disable;                        //使能DMA通道的内存到内存传输
  DMA_Init(DMA1_Channel6, &DMA_InitStruct);   
  DMA_ITConfig(DMA1_Channel6,DMA_IT_TC,ENABLE);

  DMA_Cmd(DMA1_Channel6, ENABLE);
}


  /* TIM3 Configuration ------------------------------------------------------*/
  /* TIM3CLK = 72 MHz, Prescaler = 0, TIM3 counter clock = 72 MHz */
  /* Time base configuration */
void Timer3_Init() //PC6
{ TIM_TimeBaseStruct.TIM_Period =255;                               //设置了在下一个更新事件装入活动的自动重装载寄存器周期的值
  TIM_TimeBaseStruct.TIM_Prescaler = 0;                              //设置了用来作为TIMx时钟频率除数的预分频值
  TIM_TimeBaseStruct.TIM_ClockDivision = 0;                          //设置了时钟分割
  TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;           //选择了计数器模式
  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStruct);

  /* Input Capture Mode configuration: Channel1 */                    //选择了TIM输入捕获模式
  TIM_ICInitStruct.TIM_Channel = TIM_Channel_1;                       //选择通道
  TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Rising;            //输入活动沿
  TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_DirectTI;        //选择输入
  TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;                  //设置输入捕获预分频器
  TIM_ICInitStruct.TIM_ICFilter = 0;                                  //选择输入比较滤波器
  TIM_ICInit(TIM3, &TIM_ICInitStruct);

         //TIM_ETRConfig(TIM3,TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_Inverted,0);

  TIM_TIxExternalClockConfig(TIM3,TIM_TIxExternalCLK1Source_TI2, TIM_ICPolarity_Rising,0);  //选择触发为外部时钟
  TIM_ETRClockMode2Config(TIM3,TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);  //外部时钟配置2
        /* Enable TIM3 DMA */
  TIM_DMACmd(TIM3, TIM_DMA_Trigger, ENABLE);
  /* Enable TIM3 counter */
        TIM_Cmd(TIM3, ENABLE);
}

66

主题

2229

帖子

4

精华

超级版主

Rank: 10Rank: 10Rank: 10

积分
17281

论坛元老奖章

威望
8767
贡献
3040
兑换币
4153
注册时间
2011-8-7
在线时间
2737 小时
2#
发表于 2013-12-22 00:14:31 | 只看该作者
如果是F4或F2的话,用DCMI采集更方便,网上也有调好的例程。
我的定时器触发DMA也没调好呢(F407)的板子。
回复 支持 反对

使用道具 举报

34

主题

452

帖子

0

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
14046

优秀会员奖章活跃会员奖章在线王奖章

威望
6066
贡献
2554
兑换币
4050
注册时间
2013-7-29
在线时间
2713 小时
毕业学校
南京气象学院
3#
 楼主| 发表于 2013-12-22 08:56:40 | 只看该作者
quzhanguang 发表于 2013-12-22 00:14
如果是F4或F2的话,用DCMI采集更方便,网上也有调好的例程。
我的定时器触发DMA也没调好呢(F407)的板子。

。。。是F1的,可能调的是对的,但是F1的速度接收不到。
回复 支持 反对

使用道具 举报

66

主题

2229

帖子

4

精华

超级版主

Rank: 10Rank: 10Rank: 10

积分
17281

论坛元老奖章

威望
8767
贡献
3040
兑换币
4153
注册时间
2011-8-7
在线时间
2737 小时
4#
发表于 2013-12-22 14:17:23 | 只看该作者
何俊 发表于 2013-12-22 08:56
。。。是F1的,可能调的是对的,但是F1的速度接收不到。

貌似DMA有独立的高速总线,不会和CPU竞争。速度应该很高的。
你可以先设置地址从内存到内存,先排除IO数据设置和读取的问题,成功触发后再进一步从外设到内存。
回复 支持 反对

使用道具 举报

34

主题

452

帖子

0

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
14046

优秀会员奖章活跃会员奖章在线王奖章

威望
6066
贡献
2554
兑换币
4050
注册时间
2013-7-29
在线时间
2713 小时
毕业学校
南京气象学院
5#
 楼主| 发表于 2013-12-22 16:18:17 | 只看该作者
quzhanguang 发表于 2013-12-22 14:17
貌似DMA有独立的高速总线,不会和CPU竞争。速度应该很高的。
你可以先设置地址从内存到内存,先排除IO数 ...

用的F1,主频低,可能不会完整接收到PCLK信号
回复 支持 反对

使用道具 举报

66

主题

2229

帖子

4

精华

超级版主

Rank: 10Rank: 10Rank: 10

积分
17281

论坛元老奖章

威望
8767
贡献
3040
兑换币
4153
注册时间
2011-8-7
在线时间
2737 小时
6#
发表于 2013-12-22 16:36:18 | 只看该作者
何俊 发表于 2013-12-22 16:18
用的F1,主频低,可能不会完整接收到PCLK信号

超频最高到多少呢?
回复 支持 反对

使用道具 举报

34

主题

452

帖子

0

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
14046

优秀会员奖章活跃会员奖章在线王奖章

威望
6066
贡献
2554
兑换币
4050
注册时间
2013-7-29
在线时间
2713 小时
毕业学校
南京气象学院
7#
 楼主| 发表于 2013-12-22 17:08:00 | 只看该作者
quzhanguang 发表于 2013-12-22 16:36
超频最高到多少呢?

用的103,没敢超频,还是72M,网上说100M左右还算稳定。
回复 支持 反对

使用道具 举报

66

主题

2229

帖子

4

精华

超级版主

Rank: 10Rank: 10Rank: 10

积分
17281

论坛元老奖章

威望
8767
贡献
3040
兑换币
4153
注册时间
2011-8-7
在线时间
2737 小时
8#
发表于 2013-12-22 18:41:14 | 只看该作者
何俊 发表于 2013-12-22 17:08
用的103,没敢超频,还是72M,网上说100M左右还算稳定。

足够了吧,摄像头的40M左右。
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
威望
217
贡献
133
兑换币
144
注册时间
2014-5-9
在线时间
31 小时
毕业学校
NEAU
9#
发表于 2014-5-23 16:54:08 | 只看该作者
楼主,介绍一下怎样快速采集7620的数据吗?我用中断读IO数据,只能读取一半
回复 支持 反对

使用道具 举报

1

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
432
威望
223
贡献
119
兑换币
139
注册时间
2016-7-1
在线时间
45 小时
毕业学校
MIT
10#
发表于 2016-9-1 23:11:46 | 只看该作者
啊啊啊,请问楼主搞定了吗?弄的好头疼,收不到数据
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-26 03:12 , Processed in 0.103327 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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