/* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "stdio.h" #include "string.h" /* USER CODE END Includes */
/* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif
PUTCHAR_PROTOTYPE { HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF); return ch; } /* USER CODE END 0 */
加入此语句之后可以在main函数中加入printf语句测试是否成功。
将精英板USB232口通过USB数据线与电脑连接,并在电脑上打开串口调试软件:
4.2完善tim.c
在tim.c中加入以下程序:
定义变量:
1 2 3 4 5 6 7 8 9 10
/* USER CODE BEGIN 0 */ //捕获状态 //[7]:0,没有成功的捕获;1,成功捕获到一次.
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */ SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */ MX_GPIO_Init(); MX_TIM5_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ printf("Hello World!\r\n"); HAL_TIM_IC_Start_IT(&htim5,TIM_CHANNEL_1); //开启TIM2的捕获通道2,并且开启捕获中断 __HAL_TIM_ENABLE_IT(&htim5,TIM_IT_UPDATE); //使能更新中断
/* USER CODE END 2 */
/* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */
/* USER CODE BEGIN 3 */ HAL_Delay(100); CHL_capture(); if(TIM5CH2_CAPTURE_STA & 0x80) //成功捕获一个脉宽 { time = TIM5CH2_CAPTURE_STA & 0x3F; //获取溢出次数 time *= 65536; //获得溢出的时间值 time += TIM5CH2_CAPTURE_VAL; //加上最后一次取得的值 len = time * 342.62*100/2000000;
TIM5CH2_CAPTURE_STA = 0; }
printf("LENGTH: %f CM\r\n", len); } /* USER CODE END 3 */ }