使用STM32F407驱动鹰眼摄像头

ctime:2018-07-06 13:14:33 +0800|1530854073

标签(空格分隔): 未分类


鹰眼摄像头一般用在智能车比赛上,因此现在网上大部分都是用K60来驱动。但K60没有像STM32的HAL、STD库那样的官方库,都是爱好者或者商家(野火、逐飞)等写的民间库,水平也参差不齐。而STM32不仅有官方库,还有STM32QubeMX这种方便的GUI来直接配置底层。

因此,在2018年的创意组上,我们决定使用STM32来驱动鹰眼,这样,以后在Robocon中也能用得上。

STM32F407实际上是有DCMI摄像头接口的,但由于鹰眼摄像头是硬件二值化过的输出,因此似乎不能用DCMI。(我没尝试,因为如果使用DCMI的话,就不能用中断+DMA的方式来驱动了,如果DCMI失败只能重新打板。)

保险起见我直接将鹰眼的D0-D7接到407的PD0-PD7上,然后场中断接PC9的外部中断,PCLK接PC8(TIM8的CH4)。

驱动方式与K60基本一样,即场中断来时,开启DMA传输,设置传输源地址为&GPIOD->IDR,传输目的地址为图像数组首地址,传输长度为数组的size。

这个DMA是TIM8 CH4的输入捕捉DMA,因此每次PCLK脉冲过来,都会触发一次。

需要注意的是,一开始我以为DMA传输从 GPIOD->IDRimg_buffer,这是内存到内存间的传输,DMA应该设置为memory to memory,结果发现如果设置成M2M,那场中断来了之后,刚开启DMA,这玩意儿就把几百个字节全传过去了,根本不考虑PCLK。导致出来的图是一堆全白或者全黑(因为复制的第一二个字节)。因此,DMA应该设置成外设到内存

另外,有些小细节。DMA传输完成后的回调函数里,应该写一句
__HAL_TIM_DISABLE_DMA(&htim8, TIM_DMA_CC4);把DMA关了,否则会出现本来应该在图像右边的跑到图像左边来了。
令人费解的是,我设置的DMA模式是NORMAL,也就是说应该传输完DMA就自己关了的阿。

另外,在定时器初始化函数中,应该加一句

HAL_DMA_RegisterCallback(&hdma_tim8_ch4_trig_com,HAL_DMA_XFER_CPLT_CB_ID,IMG_OK_Callback);

来注册DMA传输完成的回调函数。

HAL_TIM_IC_Start(&htim8,TIM_CHANNEL_4);

来开始定时器的输入捕捉。

详细代码可参考:
https://github.com/Ncerzzk/stm32_Eagle-Eye/tree/master/source

使用HAL库

本文首发于:http://huangzzk.info

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STM32F407是一款由意法半导体公司生产的32位微控制器,具有强大的处理能力和丰富的外设接口,可广泛应用于各种嵌入式系统中。 UVC(USB Video Class)是一种视频设备标准,它允许摄像头通过USB接口与计算机进行通信。在STM32F407微控制器上,可以通过编写相应的驱动程序来实现UVC摄像头的控制和数据传输功能。 首先,需要在STM32F407上配置USB接口的相关参数,如USB时钟、引脚配置等。然后,通过程序控制摄像头的初始化和配置,包括像素格式、分辨率、帧率等参数的设置。接下来,可以使用DMA或中断机制从摄像头接收数据,并通过USB接口传输到计算机。 在STM32F407上编写UVC驱动程序需要考虑以下几个方面: 1. USB协议栈:需要选择合适的USB协议栈,如STM32Cube USB协议栈,来实现USB设备功能。 2. 摄像头驱动:需要编写与具体摄像头芯片通信的驱动程序,包括寄存器配置、数据传输等。 3. 图像处理:在接收到摄像头数据后,可能需要进行图像处理,如图像增强、压缩等操作。 4. USB传输:需要实现UVC协议中的数据传输功能,包括视频数据的打包、传输和解析等。 5. 设备描述符:在UVC驱动程序中需要定义设备描述符,包括设备vid、pid、描述符类型等信息。 总之,通过编写适配STM32F407微控制器的UVC驱动程序,可以实现与摄像头的通信和数据传输功能,为嵌入式系统提供视频采集和处理的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值