找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 14392|回复: 41
收起左侧

STM32智能WiFi玩具小车全套资料(带安卓app与stm32源码等)

  [复制链接]
ID:308789 发表于 2018-4-19 09:44 | 显示全部楼层 |阅读模式
由于自己设计要用,所以从网上找了一套相对比较完整的资料,现在分享给大家,内容十分详细包括说明书、软件、代码、原理图一应俱全,需要的小伙伴自行下载吧!
电路原理图如下:
0.jpg

  
管脚序号
  
GPIOA
GPIOB
  
0
  
ADC
Pwm3 光电特效架舵机
  
1
  
Echo(超声波)
Pwm4超声波舵机
  
2
  
Trig(超声波)
不要用
  
3
  
IN1


  
4
  
IN2


  
5
  
IN3


  
6
  
Pwm1 左电机
左轮测速
  
7
  
Pwm2 右电机
右轮测速
  
8
  
IN4
光电特效1
  
9
  
TXD
光电特效2
  
10
  
RXD
光电特效3
  
11
  


光电特效4
  
12
  


超声波开关
  
13
  


激光开关
  
14
  


探照灯开关
  
15
  


路由器开关


stm32单片机源程序如下:
  1. /* 包含头文件 ----------------------------------------------------------------*/
  2. #include "stm32f1xx_hal.h"
  3. #include "usart/usart.h"
  4. #include "string.h"
  5. #include "pwm/pwm.h"
  6. #include "gpio/gpio.h"
  7. #include "adc/adc.h"
  8. #include "tim4capture/tim4capture.h"
  9. #include "tim2capture/tim2capture.h"
  10. #include "delayus/delayus.h"
  11. #include "ultrasonic/ultrasonic.h"
  12. #include "public/public.h"
  13. #include "speed/speed.h"
  14. #include "voltage/voltage.h"
  15. #include "usartjudge/usartjudge.h"
  16. #include "direction/direction.h"
  17. #include "time1/time1.h"

  18. /* 类型定义 ------------------------------------------------------------------*/
  19. /*************************timecapture***********************************/
  20. STRUCT_CAPTURE strCapture1 = { 0, 0, 0, 0 };
  21. STRUCT_CAPTURE strCapture2 = { 0, 0, 0, 0 };
  22. STRUCT_CAPTURE strCapture3 = { 0, 0, 0, 0 };


  23. extern uint8_t ultrasonic_overtime;//超声波超时标志位

  24. extern uint8_t usart_switch;//串口接完成标志位

  25. extern uint8_t usart_data[4];//串口接收数据

  26. uint8_t aRxBuffer;//串口接收缓存
  27. uint8_t aTxBuffer;//串口发送缓存

  28. __IO uint16_t ADC_ConvertedValue;// AD转换结果值

  29. uint32_t sleep_time=0;//睡眠时间,60000=1分钟
  30. uint8_t sleep_switch=0;//睡眠开关标志位

  31. uint16_t speed_time=0;//检测没有速度周期

  32. uint16_t ultrasonic_time=0;
  33. uint8_t ultrasonic_switch=0;//超声波开关标志位
  34.         
  35. uint16_t missile1_time=0;//玩具特效1导通时间
  36. uint8_t missile1_switch=0;//玩具特效1开关标志位
  37. uint16_t missile2_time=0;//玩具特效2导通时间
  38. uint8_t missile2_switch=0;//玩具特效2开关标志位
  39. uint16_t missile3_time=0;//玩具特效3导通时间
  40. uint8_t missile3_switch=0;//玩具特效3开关标志位
  41. uint16_t missile4_time=0;//玩具特效4导通时间
  42. uint8_t missile4_switch=0;//玩具特效4开关标志位
  43. uint16_t voltage_time=0;///电压数据发送周期时间

  44. /* 扩展变量 ------------------------------------------------------------------*/
  45. /* 私有函数原形 --------------------------------------------------------------*/
  46. /* 函数体 --------------------------------------------------------------------*/
  47. /**
  48.   * 函数功能: 系统时钟配置
  49.   * 输入参数: 无
  50.   * 返 回 值: 无
  51.   * 说    明: 无
  52.   */
  53. void SystemClock_Config(void)
  54. {
  55.   RCC_OscInitTypeDef RCC_OscInitStruct;
  56.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  57.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;  // 外部晶振,8MHz
  58.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  59.   RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  60.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  61.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  62.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;  // 9倍频,得到72MHz主时钟
  63.   HAL_RCC_OscConfig(&RCC_OscInitStruct);

  64.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  65.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  66.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;       // 系统时钟:72MHz
  67.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;              // AHB时钟:72MHz
  68.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;               // APB1时钟:36MHz
  69.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;               // APB2时钟:72MHz
  70.   HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);

  71.          // HAL_RCC_GetHCLKFreq()/1000    1ms中断一次
  72.         // HAL_RCC_GetHCLKFreq()/100000         10us中断一次
  73.         // HAL_RCC_GetHCLKFreq()/1000000 1us中断一次
  74.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);  // 配置并启动系统滴答定时器
  75.   /* 系统滴答定时器时钟源 */
  76.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
  77.   /* 系统滴答定时器中断优先级配置 */
  78.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  79. }


  80. /**
  81.   * 函数功能: 主函数.
  82.   * 输入参数: 无
  83.   * 返 回 值: 无
  84.   * 说    明: 无
  85.   */
  86. int main(void)
  87. {
  88.         uint32_t ulTmrClk; //timecapture

  89.   /* 复位所有外设,初始化Flash接口和系统滴答定时器 */
  90.   HAL_Init();
  91.   /* 配置系统时钟 */
  92.   SystemClock_Config();
  93.         
  94. /**************GPIO******************************************************************/

  95.         GPIOC13_Init();
  96.         GPIOA2_Init();
  97.         

  98.         GPIOA_Init();
  99.         GPIOB_Init();

  100. /***************串口******************************************************************/
  101.   /* 初始化串口并配置串口中断优先级 */
  102.   USART1_Init();
  103.   /* 使能接收,进入中断回调函数 */
  104.   HAL_UART_Receive_IT(&husart1,&aRxBuffer,1);

  105. /***************PWM******************************************************************/        
  106.          /* 通用定时器初始化并配置PWM输出功能 */
  107.   GENERAL_TIMx_Init();
  108.   
  109.   /* 启动通道PWM输出 */
  110.   HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_1);
  111.   HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_2);
  112.   HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_3);
  113.   HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_4);

  114. /**************ADC****************************************************************/

  115. /* ADC 初始化 */
  116.   MX_ADCx_Init();
  117.   HAL_ADCEx_Calibration_Start(&hadcx);
  118.   /* 启动AD转换并使能AD中断 */
  119.   HAL_ADC_Start_IT(&hadcx);




  120. /* ************************time4capture**********************************/
  121.         /*定时器4初始化并配置输入捕获功能 */
  122.         TIM4_Init();
  123.         /* 获取定时器时钟周期 */        
  124.         ulTmrClk = HAL_RCC_GetHCLKFreq()/72;   
  125.   /* 启动定时器 */
  126.   HAL_TIM_Base_Start_IT(&htim4);  
  127.   /* 启动定时器通道输入捕获并开启中断 */
  128.   HAL_TIM_IC_Start_IT(&htim4,TIM_CHANNEL_1);
  129.         HAL_TIM_IC_Start_IT(&htim4,TIM_CHANNEL_2);


  130. /* ************************time2capture**********************************/
  131.         /*定时器2初始化并配置输入捕获功能 */
  132.         TIM2_Init();   
  133.   /* 启动定时器 */
  134.   HAL_TIM_Base_Start_IT(&htim2);  
  135.   /* 启动定时器通道输入捕获并开启中断 */
  136.   HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);
  137.         
  138. /****************************time1************************************/
  139.   /* 基本定时器初始化:1ms中断一次 */
  140.         TIM1_Init();
  141.         /* 在中断模式下启动定时器 */
  142.         HAL_TIM_Base_Start_IT(&htim1);
  143.         
  144. /*舵机归位*/
  145.         TIM3->CCR4 =170;
  146.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);//扫描ON
  147.         HAL_Delay(2000);
  148.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);//扫描OFF

  149. /* 无限循环 */
  150.   while (1)
  151.   {        
  152.                
  153. /*-----------------------------------------------*/
  154.                 if(usart_switch)
  155.                 {
  156.                         switch(usart_data[1])
  157.                         {
  158.                                 case 0x00:
  159.                                         switch(usart_data[2])
  160.                                         {
  161.                                                 case 0x00:stop();//停止
  162.                                                         break;
  163.                                                 case 0x01:forward();//前进
  164.                                                         break;
  165.                                                 case 0x02:back();//后退
  166.                                                         break;
  167.                                                 case 0x03:left();//向左
  168.                                                         break;
  169.                                                 case 0x04:right();//向右
  170.                                                         break;
  171.                                                 default:break;
  172.                                         }break;        
  173.                                        
  174.                                 case 0x01:
  175.                                         switch(usart_data[2])
  176.                                         {
  177.                                                 case 0x00:HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);//探照灯OFF
  178.                                                         break;
  179.                                                 case 0x01:HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET);//探照灯ON
  180.                                                         break;
  181.                                                 default:break;                                                
  182.                                         }break;
  183.                         
  184.                                 case 0x02:
  185.                                         switch(usart_data[2])
  186.                                         {
  187.                                                 case 0x00:HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);//激光OFF
  188.                                                         break;
  189.                                                 case 0x01:HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);//激光ON
  190.                                                         break;
  191.                                                 default:break;                                                
  192.                                         }break;                                       
  193.                                        
  194.                                 case 0x03:
  195.                                         switch(usart_data[2])
  196.                                         {
  197.                                                 case 0x01://玩具特效1启动
  198.                                                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
  199.                                                         missile1_switch=1;
  200.                                                         break;
  201.                                                 case 0x02://玩具特效2启动
  202.                                                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET);
  203.                                                         missile2_switch=1;
  204.                                                         break;
  205.                                                 case 0x03://玩具特效3启动
  206.                                                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_SET);
  207.                                                         missile3_switch=1;
  208.                                                         break;
  209.                                                 case 0x04://玩具特效4启动
  210.                                                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_SET);
  211.                                                         missile4_switch=1;
  212.                                                         break;
  213.                                                 default:break;
  214.                                         }break;                                                
  215.                                 case 0x04:
  216.                                         switch(usart_data[2])
  217.                                         {
  218.                                                 case 0x00:
  219.                                                         ultrasonic_switch=0;
  220.                                                         TIM3->CCR4 =170;        
  221.                                                         ultrasonic_time=2000;
  222.                                                         break;
  223.                                                 case 0x01:
  224.                                                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);//扫描ON
  225.                                                         ultrasonic_switch=1;
  226.                                                         break;
  227.                                                 default:break;                                                
  228.                                         }break;                                       
  229.                                 case 0x05:
  230.                                 {
  231.                                         TIM3->CCR1=TIM3->CCR2=(usart_data[2]*256)+usart_data[3];
  232.                                 }break;
  233.                                 case 0x06:
  234.                                 {
  235.                                         sleep_time=((usart_data[2]*256)+usart_data[3])*60000;
  236.                                         if(sleep_time) sleep_switch=1;
  237.                                 }break;
  238.                                 case 0x07:
  239.                                 {
  240.                                         TIM3->CCR3 = usart_data[3];//玩具特效舵机PWM占空比(150-230)
  241.                                 }break;
  242.                                 default:break;
  243.                         }
  244.                         usart_switch=0;
  245.                 }
  246.                 /*超声波*/        
  247.                 if(ultrasonic_switch)
  248.                 {
  249.                         ultrasonic();
  250.                 }else if(!ultrasonic_time)         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
  251.                 /*测转速*/
  252.                 speed();        
  253.                 if(speed_time>100)//100ms
  254.                 {
  255.                         /* 打印速度speed1 */        
  256.                         aTxBuffer=0xFE;
  257.                         HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
  258.                         aTxBuffer=0xEF;
  259.                         HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);                        
  260.                         aTxBuffer=0x03;//3位有效数据位                        
  261.                         HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
  262.                         aTxBuffer=0x02;//测速功能标志位                        
  263.                         HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
  264.                         aTxBuffer=0x00;                        
  265.                         HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
  266.                         aTxBuffer=0x00;                        
  267.                         HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
  268.                         /* 打印速度speed2*/        
  269.                         aTxBuffer=0xFE;
  270.                         HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
  271.                         aTxBuffer=0xEF;                        
  272.                         HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
  273.                         aTxBuffer=0x03;//3位有效数据位                        
  274.                         HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
  275.                         aTxBuffer=0x03;//测速功能标志位                        
  276.                         HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
  277.                         aTxBuffer=0x00;                        
  278.                         HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
  279.                         aTxBuffer=0x00;                        
  280.                         HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
  281.                         speed_time=0;
  282.                 }
  283.                 /*测电压*/
  284.                 if(voltage_time>500)
  285.                 {
  286.                         voltage();
  287.                         voltage_time=0;
  288.                 }

  289.                 /*玩具特效启动*/
  290.                 if(missile1_switch && missile1_time>2000)//2s
  291.                 {
  292.                         missile1_time=0;
  293.                         missile1_switch=0;
  294.                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);        
  295.                 }
  296.                
  297.                 if(missile2_switch && missile2_time>2000)//2s
  298.                 {
  299.                         missile2_time=0;
  300.                         missile2_switch=0;
  301.                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);        
  302.                 }
  303.                
  304.                 if(missile3_switch && missile3_time>2000)//2s
  305.                 {
  306.                         missile3_time=0;
  307.                         missile3_switch=0;
  308.                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);
  309.                 }
  310.                
  311.                 if(missile4_switch && missile4_time>2000)//2s
  312.                 {
  313.                         missile4_time=0;
  314.                         missile4_switch=0;
  315.                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_RESET);        
  316.                 }
  317.                
  318.                 if(sleep_switch)
  319.                 {
  320.                         /*舵机归位*/
  321.                         ultrasonic_switch=0;
  322.                         TIM3->CCR4 =170;        
  323.                         HAL_Delay(2000);
  324.                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);//扫描OFF
  325.                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);//激光OFF
  326.                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);//探照灯OFF
  327.                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET);//路由器OFF        
  328.                         HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
  329.                         while(sleep_time)        delay_us(1);//延时函数不能删除,否者程序卡死               
  330.                         HAL_Delay(1000);//此处延时不能删,否者可能会出现程序时序错误
  331.                         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_SET);//路由器ON
  332.                 }
  333.   }
  334. }

  335. /**
  336.   * 函数功能: 串口接收完成回调函数
  337.   * 输入参数: 无
  338.   * 返 回 值: 无
  339.   * 说    明:无
  340.   */
  341. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
  342. {
  343.         if(UartHandle->Instance==USART1)
  344.         {
  345.                 usartjudge();
  346.                 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
  347.                 while(HAL_OK!=HAL_UART_Receive_IT(&husart1,&aRxBuffer,1));               
  348.         }
  349. }

  350. /**
  351.   * 函数功能: AD转换结束回调函数
  352.   * 输入参数: hadc:AD设备类型句柄
  353.   * 返 回 值: 无
  354.   * 说    明: 无
  355.   */
  356. void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
  357. {
  358.   ADC_ConvertedValue=HAL_ADC_GetValue(&hadcx);
  359. }


  360. /**
  361.   * 函数功能: 非阻塞模式下定时器的回调函数
  362.   * 输入参数: htim:定时器句柄
  363.   * 返 回 值: 无
  364.   * 说    明: 无
  365.   */
  366. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  367. {
  368.                 if(htim->Instance==TIM4)
  369.                 {
  370.                         strCapture2 .usPeriod ++;
  371.                         strCapture3 .usPeriod ++;                                
  372.                 }
  373.                 if(htim->Instance==TIM2)
  374.                 {
  375.                         ultrasonic_overtime=1;
  376.                 }        
  377.                                 
  378.                 if(htim->Instance==TIM1)
  379.                 {
  380.                         speed_time++;        
  381.                         voltage_time++;        
  382.                         if(ultrasonic_time) ultrasonic_time--;
  383.                         if(missile1_switch) missile1_time++;        
  384.                         if(missile2_switch) missile2_time++;
  385.                         if(missile3_switch) missile3_time++;
  386.                         if(missile4_switch) missile4_time++;        
  387.                         if(sleep_switch && sleep_time) sleep_time--;
  388.                         else sleep_switch=0;
  389.                 }
  390. }

  391. /**
  392.   * 函数功能: 定时器捕获中断
  393.   * 输入参数: htim:定时器句柄
  394.   * 返 回 值: 无
  395.   * 说    明: 无
  396.   */
  397. void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
  398. {
  399.         if(htim->Instance==TIM4)
  400.         {
  401.                 TIM_IC_InitTypeDef sConfigIC;
  402.                 if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)//TIM_CHANNEL_1
  403.                 {        
  404.                         if ( strCapture2 .ucStartFlag == 0 )
  405.                         {        
  406.                                 strCapture2 .usPeriod = 0;                        
  407.                     // 获取定时器计数值
  408.                                 strCapture2 .usCtr = HAL_TIM_ReadCapturedValue(&htim4,TIM_CHANNEL_1);
  409.                                 // 配置输入捕获参数,主要是修改触发电平
  410.                                 sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_FALLING;
  411.                                 sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
  412.                                 sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
  413.                                 sConfigIC.ICFilter = 0;
  414.                                 HAL_TIM_IC_ConfigChannel(&htim4, &sConfigIC, TIM_CHANNEL_1);
  415.                                 // 清除中断标志位
  416.                                 __HAL_TIM_CLEAR_IT(&htim4, TIM_IT_CC1);
  417.                                 // 启动输入捕获并开启中断
  418.                                 HAL_TIM_IC_Start_IT(&htim4,TIM_CHANNEL_1);   
  419.                                 strCapture2 .ucStartFlag = 1;                        
  420.                         }               
  421.   
  422.                         else
  423.                         {  
  424.                                 // 获取定时器计数值
  425.                                 strCapture2 .usCtr2 = HAL_TIM_ReadCapturedValue(&htim4,TIM_CHANNEL_1);
  426.                                 // 配置输入捕获参数,主要是修改触发电平
  427.                                 sConfigIC.ICPolarity =  TIM_INPUTCHANNELPOLARITY_RISING;
  428.                                 sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
  429.                                 sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
  430.                                 sConfigIC.ICFilter = 0;
  431.                                 HAL_TIM_IC_ConfigChannel(&htim4, &sConfigIC, TIM_CHANNEL_1);
  432.    
  433.                                 // 清除中断标志位
  434.                                 __HAL_TIM_CLEAR_IT(&htim4, TIM_IT_CC1);
  435.                                 // 启动输入捕获并开启中断
  436.                                 HAL_TIM_IC_Start_IT(&htim4,TIM_CHANNEL_1);   
  437.                                 strCapture2 .ucStartFlag = 0;                        
  438.                                 strCapture2 .ucFinishFlag = 1;   
  439.                         }
  440.                 }
  441.                
  442.                 else//TIM_CHANNEL_2
  443.                 {        
  444.                         if ( strCapture3 .ucStartFlag == 0 )
  445.                         {        
  446.                                 strCapture3 .usPeriod = 0;                        
  447.                                 // 获取定时器计数值
  448.                                 strCapture3 .usCtr = HAL_TIM_ReadCapturedValue(&htim4,TIM_CHANNEL_2);  
  449.                                 // 配置输入捕获参数,主要是修改触发电平
  450.                                 sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_FALLING;
  451.                                 sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
  452.                                 sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
  453.                                 sConfigIC.ICFilter = 0;
  454.                                 HAL_TIM_IC_ConfigChannel(&htim4, &sConfigIC, TIM_CHANNEL_2);
  455.                                 // 清除中断标志位
  456.                                 __HAL_TIM_CLEAR_IT(&htim4, TIM_IT_CC2);
  457.                                 // 启动输入捕获并开启中断
  458.                                 HAL_TIM_IC_Start_IT(&htim4,TIM_CHANNEL_2);   
  459.                                 strCapture3 .ucStartFlag = 1;                        
  460.                         }               
  461.   
  462.                         else
  463.                         {  
  464.                                 // 获取定时器计数值
  465.                                 strCapture3 .usCtr2 = HAL_TIM_ReadCapturedValue(&htim4,TIM_CHANNEL_2);
  466.                                 // 配置输入捕获参数,主要是修改触发电平
  467.                                 sConfigIC.ICPolarity =  TIM_INPUTCHANNELPOLARITY_RISING;
  468.                                 sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
  469.                                 sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
  470.                                 sConfigIC.ICFilter = 0;
  471.                                 HAL_TIM_IC_ConfigChannel(&htim4, &sConfigIC, TIM_CHANNEL_2);
  472.    
  473.                                 // 清除中断标志位
  474.                                 __HAL_TIM_CLEAR_IT(&htim4, TIM_IT_CC2);
  475.                                 // 启动输入捕获并开启中断
  476.                                 HAL_TIM_IC_Start_IT(&htim4,TIM_CHANNEL_2);   
  477.                                 strCapture3 .ucStartFlag = 0;                        
  478.                                 strCapture3 .ucFinishFlag = 1;   
  479.                         }
  480.                 }
  481.         }
  482.         if(htim->Instance==TIM2)
  483.         {
  484.                 TIM_IC_InitTypeDef sConfigIC;
  485.                 if ( strCapture1 .ucStartFlag == 0 )
  486.                 {        
  487.                         htim2.Instance->CNT=0; // 清零定时器计数               
  488.                         ultrasonic_overtime=0;
  489.                         strCapture1 .usCtr = 0;
  490.    
  491.                         // 配置输入捕获参数,主要是修改触发电平
  492.                         sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_FALLING;
  493.                         sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
  494.                         sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
  495.                         sConfigIC.ICFilter = 0;
  496.                         HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_2);
  497.                         // 清除中断标志位
  498.                         __HAL_TIM_CLEAR_IT(&htim2, TIM_IT_CC2);
  499.                         // 启动输入捕获并开启中断
  500.                         HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);   
  501.                         strCapture1 .ucStartFlag = 1;                        
  502.                 }               
  503.   
  504.                 else
  505.                 {  
  506.                         // 获取定时器计数值
  507.                         strCapture1 .usCtr = HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_2);
  508.                         // 配置输入捕获参数,主要是修改触发电平
  509.                         sConfigIC.ICPolarity =  TIM_INPUTCHANNELPOLARITY_RISING;
  510.                         sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
  511.                         sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
  512.                         sConfigIC.ICFilter = 0;
  513.                         HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_2);
  514.    
  515.                         // 清除中断标志位
  516.                         __HAL_TIM_CLEAR_IT(&htim2, TIM_IT_CC2);
  517.                         // 启动输入捕获并开启中断
  518.                         HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);   
  519.                         strCapture1 .ucStartFlag = 0;                        
  520.                         strCapture1 .ucFinishFlag = 1;   
  521.                         
  522.                 }               
  523.         }
  524. }

复制代码
51hei.png
压缩包内包含STM32代码与app(不含代码)
STM32代码下载:
STM32代码.7z (15.06 MB, 下载次数: 638)

评分

参与人数 3黑币 +21 收起 理由
shushikuan + 5 很给力!
菜鸡一只314159 + 8 共享资料的黑币奖励!
18925405284 + 8 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:315269 发表于 2018-4-25 10:49 | 显示全部楼层
好资料,51黑有你更精彩!!! 求安卓app源码
回复

使用道具 举报

ID:205327 发表于 2018-4-28 10:58 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ID:318134 发表于 2018-4-28 14:04 | 显示全部楼层
感谢分享!
回复

使用道具 举报

ID:312602 发表于 2018-4-29 16:40 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ID:268288 发表于 2018-5-20 23:46 来自手机 | 显示全部楼层
很好的东西。谢谢分享!
回复

使用道具 举报

ID:268288 发表于 2018-5-21 19:35 | 显示全部楼层
只能下载一次吗?又扣!
回复

使用道具 举报

ID:334068 发表于 2018-5-22 11:16 | 显示全部楼层

很好的东西。谢谢分享!
回复

使用道具 举报

ID:369662 发表于 2018-7-11 18:26 | 显示全部楼层
谢谢分享!!!!1
回复

使用道具 举报

ID:377694 发表于 2018-7-24 14:24 | 显示全部楼层
楼主能发一份资料吗
回复

使用道具 举报

ID:346648 发表于 2018-9-8 11:17 | 显示全部楼层
还差一个B,来试试看。不知道资料全不
回复

使用道具 举报

ID:395308 发表于 2018-9-8 12:39 | 显示全部楼层
很好的东西。谢谢分享!
回复

使用道具 举报

ID:398851 发表于 2018-9-17 09:02 | 显示全部楼层
求安卓app源码,qq1525429221
回复

使用道具 举报

ID:89134 发表于 2019-1-29 20:56 | 显示全部楼层
带安卓app与stm32源码? 不错啊 可以学习了 谢谢分享
回复

使用道具 举报

ID:463011 发表于 2019-2-9 12:42 | 显示全部楼层
求APP源码
回复

使用道具 举报

ID:475713 发表于 2019-2-11 15:43 | 显示全部楼层
tianran7 发表于 2018-4-25 10:49
求安卓app源码,qq664805568

你好 你也是做这个的吗 可以分享一下吗
回复

使用道具 举报

ID:472082 发表于 2019-2-13 18:03 | 显示全部楼层
学习一下  在做做玩玩
回复

使用道具 举报

ID:83127 发表于 2019-2-13 21:55 | 显示全部楼层

很好的东西。谢谢分享!
回复

使用道具 举报

ID:372896 发表于 2019-2-18 22:45 | 显示全部楼层

谢谢楼主
回复

使用道具 举报

ID:235003 发表于 2019-2-24 17:44 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

ID:485595 发表于 2019-3-6 14:53 | 显示全部楼层

谢谢楼主分享
回复

使用道具 举报

ID:486171 发表于 2019-3-7 12:58 来自手机 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

ID:486862 发表于 2019-3-11 12:29 | 显示全部楼层
求安卓app源码,qq1046254814
回复

使用道具 举报

ID:500503 发表于 2019-3-30 12:27 | 显示全部楼层
怎么下载
回复

使用道具 举报

ID:491340 发表于 2019-4-26 13:25 | 显示全部楼层
好东西 值得拥有
回复

使用道具 举报

ID:483023 发表于 2019-7-4 22:10 来自手机 | 显示全部楼层
wifi怎么连的,控制IP是什么
回复

使用道具 举报

ID:431514 发表于 2019-7-31 23:18 | 显示全部楼层
求安卓app源码,qq1543739381
回复

使用道具 举报

ID:462229 发表于 2019-8-24 23:10 | 显示全部楼层
谢谢楼主分享 来学习看看 下载下来
回复

使用道具 举报

ID:501249 发表于 2019-10-8 23:00 | 显示全部楼层
代码好长啊!
回复

使用道具 举报

ID:578238 发表于 2019-10-24 09:55 | 显示全部楼层
你好,可以麻烦你将安卓源码发我一下吗,谢谢,2544766022@qq.com
回复

使用道具 举报

ID:297735 发表于 2019-10-26 21:27 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ID:68875 发表于 2019-11-5 22:23 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ID:616896 发表于 2019-11-20 18:10 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:662520 发表于 2019-12-12 15:53 | 显示全部楼层
谢谢分享!!!!
回复

使用道具 举报

ID:184813 发表于 2020-2-4 21:04 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ID:91165 发表于 2020-2-5 18:28 | 显示全部楼层
x谢谢楼主辛苦了
回复

使用道具 举报

ID:91165 发表于 2020-2-5 18:35 | 显示全部楼层
下载下来了,刚学STM 32这个代码看不懂呀
回复

使用道具 举报

ID:691035 发表于 2020-2-10 09:46 | 显示全部楼层
下载下来打不开
回复

使用道具 举报

ID:241150 发表于 2020-2-25 20:29 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:520967 发表于 2020-3-11 10:34 | 显示全部楼层
ljh2019 发表于 2019-10-24 09:55
你好,可以麻烦你将安卓源码发我一下吗,谢谢,

你好,有STM32智能WiFi视频小车全套资料的安卓APP源码吗,可以麻烦发大家一份吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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