前言
小车分为两种模式,自动模式以及手动模式,有小车下位机通过按键可以进行模式的切换,自动模式有三个超声波避障,手动模式可以通过APP连接到小车WIFI进行手动控制,并且会有一个ESP32的图像采集回传给小车
物联网毕设 -- ESP32-CAN+STM32

STM32F103RCT6开发板(可以替换为STM32其他系列)
三个超声波测距模块(使用time时钟进行距离的计算)
两个电机驱动板(L2980)---- 使用PWM控制小车的速度
ESP32-CAN模块 ---- 使用串口与STM32经行连接

main.h
- #include "stm32f10x.h"
- #include "bsp_usart.h"
- #include "bsp_SysTick.h"
- #include "stm32f10x_it.h"
- #include "hc_sr04.h"
- #include "./dwt_delay/core_delay.h"
- #include "./pwm/user_timer_pwm.h"
- #include "L298N.h"
- #include "car.h"
- #include "timer.h"
- #include "usart_openmv.h"
- #include "timer.h"
- #include "HC_SR04.h"
- #include "car.h"
- #include "key.h"
- //全局变量
- //flage=0 状态手动
- //flage=1 状态自动
- extern int flag;
- 局部变量
- //float Distance1 = 0; //距离
- //float Distance2 = 0; //距离
- //float Distance3 = 0; //距离
- //定义函数
- void Car_run ( void );
- void Hc_rs04 ( void );
- /**
- * @brief 主函数
- * @param 无
- * @retval 无
- */
- extern int flage;
- //小车初始状态
- u8 dir=1;
- u16 led0pwmval=0;
-
- int main ( void )
- {
-
- /* 初始化 */
- /* 配置SysTick 为1us中断一次 */
- SysTick_Init();
-
- CPU_TS_TmrInit(); //初始化DWT计数器,用于延时函数
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- USART_Config (); //初始化串口1
- OpenMV_USART_Config();
- EXTI_Key_Config();
- MTR_GPIOInit();
-
- TIM3_PWM_Init(899,0); //不分频,PWM频率=72000000/900=80Khz
- //超声波定时器
- HC_SR04_IO1_Init(); //超声波模块GPIO初始化
- TIM2_Init(7199,0); //以10KHz计数,定时100us
- HC_SR04_IO2_Init(); //超声波模块GPIO初始化
- TIM4_Init(7199,0); //以10KHz计数,定时100us
- HC_SR04_IO3_Init(); //超声波模块GPIO初始化
- TIM5_Init(7199,0); //以10KHz计数,定时100us
- Delay_ms(500); /* 延时500个tick */
- printf("初始化成功\n");
- while ( 1 )
- {
-
- //Car_run ();
-
- if(flag==1){
- Avoid_Car();
- }else MTR_CarBrakeAll();
-
- }
-
- }
-
-
- /**
- * @brief 小车测试
- * @param 无
- * @retval 无
- */
- /** 小车状态码:
- * 1 小车处于正常行驶
- * 2 小车处于减速一(距离200)
- * 3 小车处于减速二(距离100)
- * 4 小车处于低速状态(距离50)
- *
- * 1 小车处于避障状态
- * 1 小车处于避障状态
- */
- void Car_run ( void )
- {
- car_speed(1);
- MTR_CarForward();
- }
-
- /**
- * @brief 小车超声波测试
- * @param 无
- * @retval 无
- */
- /** 小车状态码:
- */
- void Hc_rs04 ( void )
- {
-
- // Distance1 = (Get_SR04_Distance1() * 331) * 1.0/1000;
- // Delay_ms(5);
- // Distance2 = (Get_SR04_Distance2() * 331) * 1.0/1000;
- // Delay_ms(5);
- // Distance3 = (Get_SR04_Distance3() * 331) * 1.0/1000;
- // Delay_ms(5); //Get_SR04_Distance()返回单程声波传输时间 us,转换为秒=时间*10^(-6);331m/s等于331000mm/s,
- // //最终换算为Distance =Get_SR04_Distance()*10^(-6)*331000=(Get_SR04_Distance() * 331) * 1.0/1000;
- // //if(Distance1<1000&&Distance2<1000&&Distance3<1000)
- // printf("%.1f %.1f %.1f\n",Distance1,Distance2,Distance3);
- }
- /*********************************************END OF FILE**********************/
APP使用Android studio平台编译
APP+STM32程序+ESP32CAN程序
https://download.csdn.net/download/herui_2/85840555
https://download.csdn.net/download/herui_2/85840511APP程序
https://download.csdn.net/download/herui_2/85840603