基于STM32F103循迹小车

2019-08-20来源: eefocus关键字:STM32F103  循迹小车  L298N

本人小白一个,利用暑假时间在家做一些小东西。我这次想要跟大家分享的是基于STM32F103的循迹小车的制作。(两个轮子)


主要硬件:板子、L298N、电机、4个循迹模块等


话不多说,先上干货。


XJ.c


#include "XJ.h"//循迹文件

#include "stm32f10x.h"

void XJ_Init(void)

{

        GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

    

    

    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//配置为浮空输入,可以读取引脚电平

    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;

    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

    GPIO_Init(GPIOA,&GPIO_InitStructure);

        GPIO_SetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);

    //将所有循迹模块连接的引脚配置为高电平,当检测到黑线时,引脚会返回高电平

}


main.c(只贴出部分关键代码)


while(1){


 


if(KEY0==0)//Èç¹û°´¼ü0±»°´Ï£¬¿ªÆôÑ­¼£Ä£Ê½

         {

             while(1)//

             {

                 XJ1=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4);//

                 XJ2=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5);

                 XJ3=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6);

                 XJ4=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7);


             if((XJ1==1|XJ2==1)&&(XJ3==0&&XJ4==0))

             {

            

                 turnleft();

            delay_ms(150);

                 

             }

            else if((XJ3==1|XJ4==1)&&(XJ1==0&&XJ4==0))//

             {

                 

                 turnright();

                 delay_ms(150);

                 

             }

             else if((XJ1==1&&XJ2==1)&&(XJ3==1&&XJ4==1))//四个引脚都检测到高电平,停止

             {

            

                 stop();

                              delay_ms(150);


                 

             }

             else if((XJ2==0&&XJ1==0)&&(XJ4==0&&XJ3==0))

             {

                

                 forward();            

        delay_ms(200);


             }

         }

     }


个人总结:


在制作东西之前,一定要去查各种模块的功能简介以及使用方法。(小白我就是因为买了两种不同的模块,导致程序始终不能顺利运行,花费了很多时间去修改,最后被逼着去查了模块使用手册才解决)其次,一定要坚持,思路混乱(特别是对于像小白一样的初学者)不怕,最怕的是不去解决,可以去做一些与电子毫不相关的事情,等一会儿再来重新理思绪。还有,一定要利用MDK的软件仿真功能。最后是善于改写程序,如何让程序更高效的执行,如何将网上的资料改写成自己项目的一部分。

关键字:STM32F103  循迹小车  L298N

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic471752.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:stm32驱动超声波模块
下一篇:基于STM32F103的超声波测距

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32中stm32f0xx_flash.icf文件的作用详解!

 添加额外的region   比如我要添加另一个名为ROM2的ROM区域,大小是256bytes,起始地址是0x80000.       define region ROM = Mem:[from 0x80000 size 0x100];2.2 教你怎样放置SECTION如果你要把你的只读常量放置在你指定的域而不是编译器默认的位置,你就得按如下操作了:define region CONST_region = Mem:[from 0x100 size 0x100];place in
发表于 2019-09-21
STM32中stm32f0xx_flash.icf文件的作用详解!

基于stm32f103zet6的DS1302学习

由于硬件出了问题,也就是外部低速晶振没用,震不起来,然后查看了网上的帖子,STM32的RTC果然口碑不怎么样,所以果断换DS1302,在移植的过程中还算顺利,记录下来吧,也算对自己的总结吧!1、所谓的DS1302这里面也指明了简单的SPI协议然后就直接上代码了,注释很详细的!基本实现单行注释1、主函数main#include "stm32f10x.h"      #include "SysTick.h"  #include "Delay.h"  
发表于 2019-09-21
基于stm32f103zet6的DS1302学习

第51章 设置FLASH的读写保护及解除—零死角玩转STM32-F429系列

本章参考资料:《STM32F4xx 中文参考手册》、《STM32F4xx规格书》、库说明文档《stm32f4xx_dsp_stdperiph_lib_um.chm》以及《Proprietary code read-out protection on microcontrollers》。51.1 选项字节与读写保护在实际发布的产品中,在STM32芯片的内部FLASH存储了控制程序,如果不作任何保护措施的话,可以使用下载器直接把内部FLASH的内容读取回来,得到bin或hex文件格式的代码拷贝,别有用心的厂商即可利用该代码文件山寨产品。为此,STM32芯片提供了多种方式保护内部FLASH的程序不被非法读取,但在默认情况下该保护功能
发表于 2019-09-20
第51章 设置FLASH的读写保护及解除—零死角玩转STM32-F429系列

第45章 DCMI—OV2640摄像头—零死角玩转STM32-F429系列

本章参考资料:《STM32F4xx参考手册》、《STM32F4xx规格书》、库帮助文档《stm32f4xx_dsp_stdperiph_lib_um.chm》。关于开发板配套的OV2640摄像头参数可查阅《ov2640datasheet》配套资料获知。STM32F4芯片具有浮点运算单元,适合对图像信息使用DSP进行基本的图像处理,其处理速度比传统的8、16位机快得多,而且它还具有与摄像头通讯的专用DCMI接口,所以使用它驱动摄像头采集图像信息并进行基本的加工处理非常适合。本章讲解如何使用STM32驱动OV2640型号的摄像头。45.1 摄像头简介在各类信息中,图像含有最丰富的信息,作为机器视觉领域的核心部件,摄像头被广泛地应用在
发表于 2019-09-20
第45章 DCMI—OV2640摄像头—零死角玩转STM32-F429系列

第43章 RTC—实时时钟—零死角玩转STM32-F429系列

函数对每个外设都建立了一个初始化结构体,比如RTC_InitTypeDef,结构体成员用于设置外设工作参数,并由外设初始化配置函数,比如RTC_Init()调用,这些配置好的参数将会设置外设相应的寄存器,达到配置外设工作环境的目的。初始化结构体和初始化库函数配合使用是标准库精髓所在,理解了初始化结构体每个成员意义基本上就可以对该外设运用自如。初始化结构体定义在stm32f4xx_rtc.h头文件中,初始化库函数定义在stm32f4xx_rtc.c文件中,编程时我们可以结合这两个文件内注释使用。RTC初始化结构体用来设置RTC小时的格式和RTC_CLK的分频系数。代码 431 RTC初始化结构体1 typedef st
发表于 2019-09-20
第43章 RTC—实时时钟—零死角玩转STM32-F429系列

第46章 DCMI—OV5640摄像头—零死角玩转STM32-F429系列

本章参考资料:《STM32F4xx参考手册》、《STM32F4xx规格书》、库帮助文档《stm32f4xx_dsp_stdperiph_lib_um.chm》。关于开发板配套的OV5640摄像头参数可查阅《ov5640datasheet》配套资料获知。STM32F4芯片具有浮点运算单元,适合对图像信息使用DSP进行基本的图像处理,其处理速度比传统的8、16位机快得多,而且它还具有与摄像头通讯的专用DCMI接口,所以使用它驱动摄像头采集图像信息并进行基本的加工处理非常适合。本章讲解如何使用STM32驱动OV5640型号的摄像头。46.1 摄像头简介在各类信息中,图像含有最丰富的信息,作为机器视觉领域的核心部件,摄像头被广泛地应用在
发表于 2019-09-20
第46章 DCMI—OV5640摄像头—零死角玩转STM32-F429系列

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved