/* USER CODE BEGIN Includes */ #include "stdio.h" #include "string.h"//包含相应的头文件 /* USER CODE END Includes */
...
/* USER CODE BEGIN PFP */ char date[]="😊😊😊😊"; /* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){ if(htim==&htim4)//判断一下可以判断相关的 { HAL_UART_Transmit_IT(&huart1,(uint8_t*)date,strlen(date));//串口发送相关的数据 }
} /* USER CODE END 0 */
...
/* USER CODE BEGIN 2 */ HAL_TIM_Base_Start_IT(&htim4);//启动相关的定时器的口子 int counter = 0; char message[20]; /* USER CODE END 2 */
/* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { counter =__HAL_TIM_GetCounter(&htim4); sprintf(message,"counter: %d",counter);//拼接字符串 HAL_Delay(99); /* USER CODE END WHILE */
/* USER CODE BEGIN Includes */ #include "stdio.h" #include "string.h" #include "oled.h" /* USER CODE END Includes */
...
/* USER CODE BEGIN 2 */ HAL_Delay(20); OLED_Init(); HAL_TIM_Base_Start(&htim2); int counter=0; char message[20]=""; /* USER CODE END 2 */ ... /* USER CODE BEGIN WHILE */ while (1) { OLED_NewFrame(); counter=__HAL_TIM_GET_COUNTER(&htim2); sprintf(message,"counter:%d",counter); OLED_PrintString(10,10,message,&font16x16,OLED_COLOR_NORMAL); OLED_ShowFrame(); /* USER CODE END WHILE */
/* USER CODE BEGIN 0 */ char update[]="自动重装载"; char trigger[]="从模式触发"; void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){ if(htim==&htim2) { if(__HAL_TIM_GET_FLAG(htim,TIM_FLAG_TRIGGER)==SET){ __HAL_TIM_CLEAR_FLAG(htim,TIM_FLAG_TRIGGER); HAL_UART_Transmit(&huart1,(uint8_t*)trigger,strlen(trigger),100); } else{ HAL_UART_Transmit(&huart1,(uint8_t*)update,strlen(update),100); }//判断相应的标志位,并改变不同的标志位数值 } } /* USER CODE END 0 */
/* USER CODE BEGIN 2 */ HAL_TIM_Base_Start_IT(&htim2);//开启定时器中断(非阻塞模式) int counter =0; char message[] =""; /* USER CODE END 2 */
/* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { counter=__HAL_TIM_GET_COUNTER(&htim2);//获取数据 sprintf(message,"counter:%d",counter); HAL_UART_Transmit(&huart1,(uint8_t*)message,strlen(message),100); HAL_Delay(500); /* USER CODE END WHILE */
/* USER CODE BEGIN 0 */ char update[]="自动重装载"; char trigger[]="从模式触发"; void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){ if(htim==&htim2) { HAL_UART_Transmit(&huart1,(uint8_t*)update,strlen(update),100); //触发更新中断,在定时器更新中断中传输相应的数据 } } /* USER CODE END 0 */
/* USER CODE BEGIN 2 */ HAL_TIM_Base_Start_IT(&htim2);//开启定时器中断(非阻塞模式) int counter =0; char message[] =""; /* USER CODE END 2 */
/* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { if(__HAL_TIM_GET_FLAG(htim,TIM_FLAG_TRIGGER)==SET){ __HAL_TIM_CLEAR_FLAG(htim,TIM_FLAG_TRIGGER); HAL_UART_Transmit(&huart1,(uint8_t*)trigger,strlen(trigger),100); }//门模式下不再开启定时器更新中断,所以将判断触发的逻辑写在主函数中,以便清零标志位 counter=__HAL_TIM_GET_COUNTER(&htim2);//获取数据 sprintf(message,"counter:%d",counter); HAL_UART_Transmit(&huart1,(uint8_t*)message,strlen(message),100); HAL_Delay(500); /* USER CODE END WHILE */
/* USER CODE BEGIN 0 */ char update[]="自动重装载"; char trigger[]="从模式触发"; void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){ if(htim==&htim2) { HAL_UART_Transmit(&huart1,(uint8_t*)update,strlen(update),100); //触发更新中断,在定时器更新中断中传输相应的数据 } } /* USER CODE END 0 */
/* USER CODE BEGIN 2 */ HAL_TIM_Base_Start_IT(&htim2);//开启定时器中断(非阻塞模式) int counter =0; char message[] =""; /* USER CODE END 2 */
/* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { if(__HAL_TIM_GET_FLAG(htim,TIM_FLAG_TRIGGER)==SET){ __HAL_TIM_CLEAR_FLAG(htim,TIM_FLAG_TRIGGER); HAL_UART_Transmit(&huart1,(uint8_t*)trigger,strlen(trigger),100); }//门模式下不再开启定时器更新中断,所以将判断触发的逻辑写在主函数中,以便清零标志位 counter=__HAL_TIM_GET_COUNTER(&htim2);//获取数据 sprintf(message,"counter:%d",counter); HAL_UART_Transmit(&huart1,(uint8_t*)message,strlen(message),100); HAL_Delay(500); /* USER CODE END WHILE */
/* USER CODE BEGIN Includes */ #include "oled.h" #include "stdio.h" #include "string.h" /* USER CODE END Includes */
...
/* USER CODE BEGIN 0 */ int up=0; int down =0; float distance=0; void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim){//输入捕获中断回调函数
if(htim==&htim1 && htim->Channel==HAL_TIM_ACTIVE_CHANNEL_4) { //注意变量为HAL_TIM_ACTIVE_CHANNEL_X up = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_3); down = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_4); distance = ((down-up)*0.034)/2; }
} /* USER CODE END 0 */
...
/* USER CODE BEGIN 2 */ HAL_Delay(20); OLED_Init(); HAL_TIM_Base_Start (&htim1);//开启定时器 HAL_TIM_IC_Start (&htim1,TIM_CHANNEL_3);//开始输入捕获 HAL_TIM_IC_Start_IT (&htim1,TIM_CHANNEL_4);//开启输入捕获(中断) char message[20]=""; /* USER CODE END 2 */
/* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_SET); HAL_Delay(1); HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_RESET); //根据手册给超声波模块一个输入电压 __HAL_TIM_SET_COUNTER(&htim1,0);//置零计数周期,防止超出上限 HAL_Delay(20); OLED_NewFrame(); sprintf(message,"距离 :%.2fcm",distance); OLED_PrintString(10,10,message,&font16x16,OLED_COLOR_NORMAL); OLED_ShowFrame(); HAL_Delay(500);//在OLED屏幕上显示 /* USER CODE END WHILE */