打印
[STM32F4]

stm32F4倒车雷达

[复制链接]
268|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-3-22 08:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、功能介绍

        本次项目使用了芯片为STM32F407VET6,利用OV2640摄像头实现对画面的捕捉,然后在3.2寸TFT触摸屏上显示,并利用HCSR04超声波模块实现对物体距离的探测功能,当物体距离超声波模块小于一定值时,蜂鸣器将会报警,此时如果物体远离超声波模块,蜂鸣器将停止鸣叫。

二、所用器件介绍

STM32F407VET6:主控芯片,用于各类传感器数据的采集以及处理。

OV264摄像头:收集倒车模式时的图片数据并转为RGB565格式。

3.2寸TFT触摸屏:显示OV2640摄像头采集到的图像数据。

HCSR04超声波模块:检测与障碍物的距离,发送到主控芯片进行处理

蜂鸣器:当超声波模块检查出报警范围时,发出警报

三、实现思路

hc_sr04.c

void init_sr04(void)
{
    GPIO_InitTypeDef GPIO_InitStruct; // GPIO的参数

    // 初始化时钟
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA , ENABLE);

    // 设置GPIO参数====ECHO
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6; // 设置第6个引脚
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; // 设置第6个引脚为输出模式
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; // 设置为推挽输出
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; // 设置为上拉输出
    GPIO_InitStruct.GPIO_Speed = GPIO_High_Speed; // 设置速度为100M   
    GPIO_Init(GPIOA, &GPIO_InitStruct);

        // 设置GPIO参数=====TRIG
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12; // 设置第12个引脚
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; // 设置第12个引脚为输出模式
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; // 设置为推挽输出
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; // 设置为上拉输出
    GPIO_InitStruct.GPIO_Speed = GPIO_High_Speed; // 设置速度为100M
    GPIO_Init(GPIOA, &GPIO_InitStruct);   
}


int get_sr04_distance(void)
{
    u32 tim = 0;

    // 1.发送触发信号:给PB6引脚输出高电平,至少10us
    PAout(12) = 1;
    delay_us(20);
    PAout(12) = 0;
    // 2. 等待输出回响信号为高电平
    while(PAin(11) == 0);

    // 3.根据回响信号高电平持续时间得到距离:每8.8us表示3mm
    while(PAin(11))
    {
        //每8us获取3mm的距离   
        delay_us(10);
        tim++;
    }

    //输入输出的总时间
    tim = tim / 2;

    //每8us是3mm,计算总共的距离
    return (tim * 3);
}

sccb.c部分

//读寄存器
//返回值:读到的寄存器值
u8 SCCB_RD_Reg(u8 reg)
{
    u8 val=0;
    SCCB_Start();                 //启动SCCB传输
    SCCB_WR_Byte(SCCB_ID);        //写器件ID      
    delay_us(100);     
      SCCB_WR_Byte(reg);            //写寄存器地址      
    delay_us(100);      
    SCCB_Stop();   
    delay_us(100);      
    //设置寄存器地址后,才是读
    SCCB_Start();
    SCCB_WR_Byte(SCCB_ID|0X01);    //发送读命令      
    delay_us(100);
      val=SCCB_RD_Byte();             //读取数据
      SCCB_No_Ack();
      SCCB_Stop();
      return val;
}

main.c

int main(void)
{
    u8 flag = 0;
    int DistanceDate = 0,KeyVal;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
    delay_init(168);      //初始化延时函数
    uart_init(115200);        //初始化串口波特率为115200

    LED_Init();                      //初始化LED
    BEEP_Init();                    //蜂鸣器初始化
    KEY_Init();                        //按键初始化
    init_sr04();                    //超声波初始化

     LCD_Init();           //初始化LCD FSMC接口
    LCD_Clear(BLACK);            //清屏
    POINT_COLOR=RED;      //画笔颜色:红色


    OV2640_Init();                //摄像头初始化
    My_DCMI_Init();                //DCMI配置
    DCMI_DMA_Init((u32)&LCD->LCD_RAM,1,DMA_MemoryDataSize_HalfWord,DMA_MemoryInc_Disable);//DCMI DMA配置
    OV2640_OutSize_Set(lcddev.width,lcddev.height);
    DCMI_Stop();                //关闭传输


  while(1)
    {        
        KeyVal = KEY_Scan(0);
        if(KeyVal == KEY0_PRES)
        {
            printf("KEY0 PRE\r\n");
            flag = 1;
            DCMI_Start();            //开始传送图像
        }            
        else if(KeyVal == KEY1_PRES)
        {
            flag = 0;
            printf("KEY1 PRE\r\n");
            DCMI_Stop();            //关闭传送图像
            LCD_Clear(BLACK);
            BEEP = 1;
        }

        delay_ms(200);
        DistanceDate = get_sr04_distance();

        if(flag == 1)
        {
            if(DistanceDate<100)
            BEEP = 0;
            else if(DistanceDate > 1000)
            BEEP = 1;
        }

    }
}

OV2640摄像头代码过多不予展示,同时我也是借鉴商家附带的OV2640摄像头所完成。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/m0_58664533/article/details/136763209

使用特权

评论回复
沙发
daichaodai| | 2024-3-22 08:14 | 只看该作者
F4做视频显示,速度有点不够。

使用特权

评论回复
板凳
理想阳| | 2024-3-22 16:21 | 只看该作者
我以为用的是雷达传感器呢,原来是摄像头加超声波

使用特权

评论回复
地板
szt1993| | 2024-3-25 14:33 | 只看该作者
F4做显示会卡嘛?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1360

主题

13960

帖子

8

粉丝