找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4119|回复: 1
打印 上一主题 下一主题
收起左侧

基于OpenWRT WIFI视频控制的STM32智能侦查小车设计源码与ppt

[复制链接]
跳转到指定楼层
楼主
基与OpenWRT的智能侦察车
内容见附件,下面是ppt内容预览:



项目分析:
下位机作为上位机和小车控制的桥梁,需要进行有效地通讯,并对接收到的命令做出相应的动作控制命令接收:通过与上位机的串口相连,通过串口接收上位机的命令;
小车姿态控制:下位机通过IO操作控制小车的两个电机的正反转动从而控制车体的姿态位置;
车上数据获取:读取IO设备上的传感器数据并发送给上位机;

软硬件开发环境:
硬件选型:STM32F103RC核心板带下载模块
开发环境:Keil μVision5 IDE  及ARM.CMSIS.3.20.4.pack 接口标准Keil.STM32F1xx支持库
开发语言:C语言    基于STM32F1xx库函数开发


GPIO寄存器描述 《STM32参考手册中文-p75》

1、端口配置低寄存器(GPIOx_CRL)(x = A...E)
2、端口配置高寄存器(GPIOx_CRH)(x = A...E)

3、端口输入数据寄存器(GPIOx_IDR)(x = A...E)
   这些位为只读并只能以字(16位)的形式读出。读出的值为对应I/O口的状态。
   
4、端口输出数据寄存器(GPIOx_ODR)(x = A...E)
   只能以字(16bit)的形式操作,复位值全是0。写0即输出0,写1即输出1。
   
5、端口位设置/清除寄存器(GPIOx_BSRR)(x = A...E)
   高16bit写1用于清0,低16bit写1用于置位,同时写1的话低16bi有效。
   
6、端口位清除寄存器(GPIOx_BRR)(x = A...E)
   低16位写1用于置位。
   
7、端口配置锁定寄存器(GPIOx_LCKR)(x = A...E)

GPIO八种模式
typedef enum
{ GPIO_Mode_AIN = 0x0,            /* 模拟输入 */   
  GPIO_Mode_IN_FLOATING = 0x04,   /* 浮空输入,复位后的状态 */
  GPIO_Mode_IPD = 0x28,           /* 下拉输入 */
  GPIO_Mode_IPU = 0x48,           /* 上拉输入 */
  GPIO_Mode_Out_OD = 0x14,        /* 开漏输出 */
  GPIO_Mode_Out_PP = 0x10,        /* 推挽输出 */
  GPIO_Mode_AF_OD = 0x1C,         /* 复用开漏输出 */
  GPIO_Mode_AF_PP = 0x18          /* 复用推挽输出 */
}GPIOMode_TypeDef;





下位机开发重点:

串口移植与配置,串口中断配置,串口数据接收循环队列;
命令/数据传输完整性的判断,判断命令是否格式完整,未完整存储再读。
传输的数据格式检查,检查命令格式,长度;

开发总结:

实现了一个下位机基本功能,可以通过串口传来的命令数据准确地完成车体运动的控制;
需要考虑串口中断通讯带来的数据是否完整性的问题。

不足与展望:

对传来的命令数据校验纠错不足,以及错误后需要请求重传功能;
后期可采集更多车载传感器数据上传到上位机。
后期通过PWM调制进行小车更精准的控制。

单片机源程序如下:
  1. /**
  2.   ******************************************************************************
  3.   * @file    main.c
  4.   * @author  fire
  5.   * @version V1.0
  6.   * @brief   测试led
  7.   ******************************************************************************
  8. **/
  9. #include "usart3_config.h"
  10. #include "HumanBodySensor.h"
  11. #include "stm32f10x.h"
  12. #include "CarInit.h"
  13. #include "SmartCarControl.h"
  14. #include <stdlib.h>
  15. #include "led.h"
  16. void LED_GPIO_Config(void)
  17. {
  18.         GPIO_InitTypeDef GPIO_InitStructure;
  19.         RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);

  20.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14;        
  21.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      
  22.           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  23.           GPIO_Init(GPIOB, &GPIO_InitStructure);

  24.         GPIO_SetBits(GPIOB, GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14);         // turn off all led
  25. }

  26. void Delay(__IO u32 nCount)         //简单的延时函数
  27. {
  28.         for(; nCount != 0; nCount--);
  29. }


  30. /*
  31. * 函数名:main
  32. * 描述  :主函数
  33. * 输入  :无
  34. * 输出  :无
  35. */
  36. int main(void)
  37. {        
  38.         LED_GPIO_Config();
  39.         
  40.         LED2(ON);
  41.         Delay(0x0FFFEF);
  42.         Delay(0x0FFFEF);
  43.         Delay(0x0FFFEF);
  44.         Delay(0x0FFFEF);

  45.         
  46.         
  47.         /************CarInit.c******************************************************************/
  48.         CarPherialInit();     //车体控制GPIO        人体传感器输入GPIO

  49.         LED3(ON);
  50.         Delay(0x0FFFEF);
  51.         Delay(0x0FFFEF);
  52.         Delay(0x0FFFEF);
  53.         Delay(0x0FFFEF);
  54.         
  55.         InterruptInit();      
  56.         GPIO_SetBits(GPIOB, GPIO_Pin_13|GPIO_Pin_14);
  57.         Delay(0x0FFFEF);
  58.         Delay(0x0FFFEF);
  59.         Delay(0x0FFFEF);
  60.         Delay(0x0FFFEF);
  61.         /************CarInit end***************************************************************/
  62.         
  63.         
  64.          USARTx_Config();      //串口配置
  65.          
  66.          
  67.         GPIO_ResetBits(GPIOB, GPIO_Pin_13|GPIO_Pin_14);
  68.         Delay(0x0FFFEF);
  69.         Delay(0x0FFFEF);
  70.         GPIO_SetBits(GPIOB, GPIO_Pin_13|GPIO_Pin_14);
  71.         Delay(0x0FFFEF);
  72.         Delay(0x0FFFEF);
  73.         GPIO_ResetBits(GPIOB, GPIO_Pin_13|GPIO_Pin_14);
  74.         Delay(0x0FFFEF);
  75.         Delay(0x0FFFEF);
  76.         GPIO_SetBits(GPIOB, GPIO_Pin_13|GPIO_Pin_14);
  77.         Delay(0x0FFFEF);
  78.         Delay(0x0FFFEF);
  79.         Delay(0x0FFFEF);
  80.         Delay(0x0FFFEF);
  81.         
  82.         while(1)
  83.         {
  84.                 int a=345;//cm
  85.                 char b[12]={0};
  86.                 SmartCarControl();
  87.           Delay(0x0FFFEF);
  88.                 HumanBodySensor();
  89.                 sprintf(b,"%d",a);
  90.                 printf("%scm",b);
  91. ……………………

  92. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
孙昊.rar (691.61 KB, 下载次数: 43)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:386652 发表于 2018-8-30 09:54 | 只看该作者
博主能加个QQ吗
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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