找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4858|回復: 1
收起左側

基于OpenWRT WIFI視頻控制的STM32智能偵查小車設計源碼與ppt

[復制鏈接]
ID:281263 發(fā)表于 2018-1-31 19:07 | 顯示全部樓層 |閱讀模式
基與OpenWRT的智能偵察車
內容見附件,下面是ppt內容預覽:
0.jpg
0.png

項目分析:
下位機作為上位機和小車控制的橋梁,需要進行有效地通訊,并對接收到的命令做出相應的動作控制命令接收:通過與上位機的串口相連,通過串口接收上位機的命令;
小車姿態(tài)控制:下位機通過IO操作控制小車的兩個電機的正反轉動從而控制車體的姿態(tài)位置;
車上數(shù)據(jù)獲。鹤x取IO設備上的傳感器數(shù)據(jù)并發(fā)送給上位機;

軟硬件開發(fā)環(huán)境:
硬件選型:STM32F103RC核心板帶下載模塊
開發(fā)環(huán)境:Keil μVision5 IDE  及ARM.CMSIS.3.20.4.pack 接口標準Keil.STM32F1xx支持庫
開發(fā)語言:C語言    基于STM32F1xx庫函數(shù)開發(fā)
0.png
0.png
GPIO寄存器描述 《STM32參考手冊中文-p75》

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

3、端口輸入數(shù)據(jù)寄存器(GPIOx_IDR)(x = A...E)
   這些位為只讀并只能以字(16位)的形式讀出。讀出的值為對應I/O口的狀態(tài)。
   
4、端口輸出數(shù)據(jù)寄存器(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,   /* 浮空輸入,復位后的狀態(tài) */
  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;

0.png

0.png

下位機開發(fā)重點:

串口移植與配置,串口中斷配置,串口數(shù)據(jù)接收循環(huán)隊列;
命令/數(shù)據(jù)傳輸完整性的判斷,判斷命令是否格式完整,未完整存儲再讀。
傳輸?shù)臄?shù)據(jù)格式檢查,檢查命令格式,長度;

開發(fā)總結:

實現(xiàn)了一個下位機基本功能,可以通過串口傳來的命令數(shù)據(jù)準確地完成車體運動的控制;
需要考慮串口中斷通訊帶來的數(shù)據(jù)是否完整性的問題。

不足與展望:

對傳來的命令數(shù)據(jù)校驗糾錯不足,以及錯誤后需要請求重傳功能;
后期可采集更多車載傳感器數(shù)據(jù)上傳到上位機。
后期通過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)         //簡單的延時函數(shù)
  27. {
  28.         for(; nCount != 0; nCount--);
  29. }


  30. /*
  31. * 函數(shù)名:main
  32. * 描述  :主函數(shù)
  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黑下載附件…………
復制代碼
0.png
所有資料51hei提供下載:
孫昊.rar (691.61 KB, 下載次數(shù): 44)


回復

使用道具 舉報

ID:386652 發(fā)表于 2018-8-30 09:54 | 顯示全部樓層
博主能加個QQ嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表