generated from Template/H563ZI-HAL-CMake-Template
	add Encoder and PID control and Abstacle control
This commit is contained in:
		| @@ -59,6 +59,8 @@ | ||||
|  | ||||
| TX_EVENT_FLAGS_GROUP system_events; | ||||
| TX_EVENT_FLAGS_GROUP sensor_events; | ||||
| TX_EVENT_FLAGS_GROUP response_events; // 用于避障事件实现 | ||||
|  | ||||
| MotorCommand current_motor_cmd = {0,0}; | ||||
| _GPSData gps_data; | ||||
|  | ||||
| @@ -95,6 +97,13 @@ TX_QUEUE im948_uart_rx_queue; | ||||
| TX_THREAD gps_task; | ||||
| ULONG gps_task_stack[GPS_TASK_STACK_SIZE / sizeof(ULONG)]; | ||||
|  | ||||
| static TX_THREAD obstacle_thread; | ||||
| static UCHAR obstacle_stack[512]; | ||||
| //超声波 | ||||
| static UCHAR ultrasonic_stack[512]; | ||||
| static void obstacle_thread_entry(ULONG); | ||||
| TX_THREAD ultrasonic_task_thread; | ||||
|  | ||||
| /* USER CODE END 1 */ | ||||
| /* USER CODE END 1 */ | ||||
|  | ||||
| @@ -182,7 +191,40 @@ UINT App_ThreadX_Init(VOID *memory_ptr) | ||||
| 	{ | ||||
| 		return status; | ||||
| 	} | ||||
|     HCBle_SendData("✅ BLE RX/TX 线程和队列初始化完成\r\n"); | ||||
| 	 | ||||
| 	// obstacle_thread create | ||||
| 	status = tx_thread_create(&obstacle_thread, | ||||
| 							"obstacle", | ||||
| 							obstacle_thread_entry, | ||||
| 							0,obstacle_stack,sizeof(obstacle_stack),8,8,TX_NO_TIME_SLICE,TX_AUTO_START); | ||||
| 	 | ||||
| 	if(status != TX_SUCCESS) | ||||
| 	{ | ||||
| 		return status; | ||||
| 	} | ||||
| 	 | ||||
| 	 status = tx_thread_create(&ultrasonic_task_thread, | ||||
|                      "Ultrasonic", | ||||
|                      ultrasonic_task_entry, | ||||
|                      0, | ||||
|                      ultrasonic_stack, | ||||
|                      sizeof(ultrasonic_stack), | ||||
|                      7, 7,    // 这里的优先级 | ||||
|                      TX_NO_TIME_SLICE, | ||||
|                      TX_AUTO_START); | ||||
| 	// | ||||
| //    HCBle_SendData("✅ BLE RX/TX 线程和队列初始化完成\r\n"); | ||||
| 					  | ||||
| 	status = ControlThreadCreate(); | ||||
| 	if(status != TX_SUCCESS) | ||||
| 	{ | ||||
| 		return status; | ||||
| 	}			  | ||||
| 	status = Encoder_ThreadCreate();	 | ||||
| 	if(status != TX_SUCCESS) | ||||
| 	{ | ||||
| 		return status; | ||||
| 	}	 | ||||
| 	 | ||||
|     return TX_SUCCESS; | ||||
| } | ||||
| @@ -206,6 +248,48 @@ void MX_ThreadX_Init(void) | ||||
| } | ||||
|  | ||||
| /* USER CODE BEGIN 1 */ | ||||
|  | ||||
| //新加入的 obstacle  | ||||
| static void obstacle_thread_entry(ULONG arg) | ||||
| { | ||||
| 	while(1) | ||||
| 	{ | ||||
| 		ULONG evt; // 这个应该是用来接收数据的 | ||||
| 		tx_event_flags_get(&response_events,EVENT_OBSTACLE_DETECTED,TX_OR_CLEAR,&evt,TX_WAIT_FOREVER); | ||||
| 		 | ||||
| 		switch(obstacle_level) | ||||
| 		{ | ||||
| 			case 1: // 远 | ||||
| 				Buzzer_Open(); | ||||
| 				Shake_Motor_Open(); | ||||
| 				tx_thread_sleep(30); | ||||
| 				Buzzer_Close(); | ||||
| 				Shake_Motor_Close(); | ||||
| 				break; | ||||
| 			 | ||||
| 			case 2: | ||||
| 				for(int i = 0; i < 2;i++) | ||||
| 				{ | ||||
| 					Buzzer_Open(); | ||||
| 					Shake_Motor_Open(); | ||||
| 					tx_thread_sleep(50); | ||||
| 					Buzzer_Close(); | ||||
|                     Shake_Motor_Close(); | ||||
|                     tx_thread_sleep(30); | ||||
| 				} | ||||
| 				break; | ||||
| 				 | ||||
| 			case 3: // 近 | ||||
| 				Buzzer_Open(); | ||||
| 				Shake_Motor_Open(); | ||||
| 				tx_thread_sleep(150); | ||||
| 				Buzzer_Close(); | ||||
| 				Shake_Motor_Close(); | ||||
| 				break; | ||||
| 			default: | ||||
| 				break; | ||||
| 		} | ||||
| 		tx_thread_sleep(20); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /* USER CODE END 1 */ | ||||
|   | ||||
| @@ -46,10 +46,10 @@ void MX_GPIO_Init(void) | ||||
|   /* GPIO Ports Clock Enable */ | ||||
|   __HAL_RCC_GPIOH_CLK_ENABLE(); | ||||
|   __HAL_RCC_GPIOC_CLK_ENABLE(); | ||||
|   __HAL_RCC_GPIOA_CLK_ENABLE(); | ||||
|   __HAL_RCC_GPIOB_CLK_ENABLE(); | ||||
|   __HAL_RCC_GPIOG_CLK_ENABLE(); | ||||
|   __HAL_RCC_GPIOE_CLK_ENABLE(); | ||||
|   __HAL_RCC_GPIOA_CLK_ENABLE(); | ||||
|   __HAL_RCC_GPIOD_CLK_ENABLE(); | ||||
|  | ||||
|   /*Configure GPIO pin Output Level */ | ||||
|   | ||||
| @@ -100,10 +100,12 @@ int main(void) | ||||
|   MX_UART4_Init(); | ||||
|   MX_TIM1_Init(); | ||||
|   MX_TIM8_Init(); | ||||
|   MX_TIM5_Init(); | ||||
|   /* USER CODE BEGIN 2 */ | ||||
|  | ||||
|    imu600_init(); | ||||
|    GPS_Init(); | ||||
|    DWT_Init(); | ||||
| //	HCBle_InitDMAReception(); | ||||
| //	HAL_Delay(200); | ||||
| //	GPS_Init(); | ||||
|   | ||||
| @@ -58,6 +58,7 @@ | ||||
| /* External variables --------------------------------------------------------*/ | ||||
| extern TIM_HandleTypeDef htim2; | ||||
| extern TIM_HandleTypeDef htim3; | ||||
| extern TIM_HandleTypeDef htim5; | ||||
| extern DMA_NodeTypeDef Node_GPDMA1_Channel5; | ||||
| extern DMA_QListTypeDef List_GPDMA1_Channel5; | ||||
| extern DMA_HandleTypeDef handle_GPDMA1_Channel5; | ||||
| @@ -242,6 +243,20 @@ void TIM3_IRQHandler(void) | ||||
|   /* USER CODE END TIM3_IRQn 1 */ | ||||
| } | ||||
|  | ||||
| /** | ||||
|   * @brief This function handles TIM5 global interrupt. | ||||
|   */ | ||||
| void TIM5_IRQHandler(void) | ||||
| { | ||||
|   /* USER CODE BEGIN TIM5_IRQn 0 */ | ||||
|  | ||||
|   /* USER CODE END TIM5_IRQn 0 */ | ||||
|   HAL_TIM_IRQHandler(&htim5); | ||||
|   /* USER CODE BEGIN TIM5_IRQn 1 */ | ||||
|  | ||||
|   /* USER CODE END TIM5_IRQn 1 */ | ||||
| } | ||||
|  | ||||
| /** | ||||
|   * @brief This function handles TIM6 global interrupt. | ||||
|   */ | ||||
|   | ||||
							
								
								
									
										139
									
								
								Core/Src/tim.c
									
									
									
									
									
								
							
							
						
						
									
										139
									
								
								Core/Src/tim.c
									
									
									
									
									
								
							| @@ -28,6 +28,7 @@ TIM_HandleTypeDef htim1; | ||||
| TIM_HandleTypeDef htim2; | ||||
| TIM_HandleTypeDef htim3; | ||||
| TIM_HandleTypeDef htim4; | ||||
| TIM_HandleTypeDef htim5; | ||||
| TIM_HandleTypeDef htim8; | ||||
|  | ||||
| /* TIM1 init function */ | ||||
| @@ -51,7 +52,7 @@ void MX_TIM1_Init(void) | ||||
|   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; | ||||
|   htim1.Init.RepetitionCounter = 0; | ||||
|   htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; | ||||
|   sConfig.EncoderMode = TIM_ENCODERMODE_TI1; | ||||
|   sConfig.EncoderMode = TIM_ENCODERMODE_TI12; | ||||
|   sConfig.IC1Polarity = TIM_ICPOLARITY_RISING; | ||||
|   sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI; | ||||
|   sConfig.IC1Prescaler = TIM_ICPSC_DIV1; | ||||
| @@ -126,7 +127,6 @@ void MX_TIM3_Init(void) | ||||
|  | ||||
|   TIM_ClockConfigTypeDef sClockSourceConfig = {0}; | ||||
|   TIM_MasterConfigTypeDef sMasterConfig = {0}; | ||||
|   TIM_IC_InitTypeDef sConfigIC = {0}; | ||||
|   TIM_OC_InitTypeDef sConfigOC = {0}; | ||||
|  | ||||
|   /* USER CODE BEGIN TIM3_Init 1 */ | ||||
| @@ -147,10 +147,6 @@ void MX_TIM3_Init(void) | ||||
|   { | ||||
|     Error_Handler(); | ||||
|   } | ||||
|   if (HAL_TIM_IC_Init(&htim3) != HAL_OK) | ||||
|   { | ||||
|     Error_Handler(); | ||||
|   } | ||||
|   if (HAL_TIM_PWM_Init(&htim3) != HAL_OK) | ||||
|   { | ||||
|     Error_Handler(); | ||||
| @@ -161,14 +157,6 @@ void MX_TIM3_Init(void) | ||||
|   { | ||||
|     Error_Handler(); | ||||
|   } | ||||
|   sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING; | ||||
|   sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI; | ||||
|   sConfigIC.ICPrescaler = TIM_ICPSC_DIV1; | ||||
|   sConfigIC.ICFilter = 0; | ||||
|   if (HAL_TIM_IC_ConfigChannel(&htim3, &sConfigIC, TIM_CHANNEL_3) != HAL_OK) | ||||
|   { | ||||
|     Error_Handler(); | ||||
|   } | ||||
|   sConfigOC.OCMode = TIM_OCMODE_PWM1; | ||||
|   sConfigOC.Pulse = 0; | ||||
|   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; | ||||
| @@ -236,6 +224,59 @@ void MX_TIM4_Init(void) | ||||
|   /* USER CODE END TIM4_Init 2 */ | ||||
|   HAL_TIM_MspPostInit(&htim4); | ||||
|  | ||||
| } | ||||
| /* TIM5 init function */ | ||||
| void MX_TIM5_Init(void) | ||||
| { | ||||
|  | ||||
|   /* USER CODE BEGIN TIM5_Init 0 */ | ||||
|  | ||||
|   /* USER CODE END TIM5_Init 0 */ | ||||
|  | ||||
|   TIM_ClockConfigTypeDef sClockSourceConfig = {0}; | ||||
|   TIM_MasterConfigTypeDef sMasterConfig = {0}; | ||||
|   TIM_IC_InitTypeDef sConfigIC = {0}; | ||||
|  | ||||
|   /* USER CODE BEGIN TIM5_Init 1 */ | ||||
|  | ||||
|   /* USER CODE END TIM5_Init 1 */ | ||||
|   htim5.Instance = TIM5; | ||||
|   htim5.Init.Prescaler = 250-1; | ||||
|   htim5.Init.CounterMode = TIM_COUNTERMODE_UP; | ||||
|   htim5.Init.Period = 4294967295; | ||||
|   htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; | ||||
|   htim5.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; | ||||
|   if (HAL_TIM_Base_Init(&htim5) != HAL_OK) | ||||
|   { | ||||
|     Error_Handler(); | ||||
|   } | ||||
|   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; | ||||
|   if (HAL_TIM_ConfigClockSource(&htim5, &sClockSourceConfig) != HAL_OK) | ||||
|   { | ||||
|     Error_Handler(); | ||||
|   } | ||||
|   if (HAL_TIM_IC_Init(&htim5) != HAL_OK) | ||||
|   { | ||||
|     Error_Handler(); | ||||
|   } | ||||
|   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; | ||||
|   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; | ||||
|   if (HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig) != HAL_OK) | ||||
|   { | ||||
|     Error_Handler(); | ||||
|   } | ||||
|   sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING; | ||||
|   sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI; | ||||
|   sConfigIC.ICPrescaler = TIM_ICPSC_DIV1; | ||||
|   sConfigIC.ICFilter = 0; | ||||
|   if (HAL_TIM_IC_ConfigChannel(&htim5, &sConfigIC, TIM_CHANNEL_1) != HAL_OK) | ||||
|   { | ||||
|     Error_Handler(); | ||||
|   } | ||||
|   /* USER CODE BEGIN TIM5_Init 2 */ | ||||
|  | ||||
|   /* USER CODE END TIM5_Init 2 */ | ||||
|  | ||||
| } | ||||
| /* TIM8 init function */ | ||||
| void MX_TIM8_Init(void) | ||||
| @@ -258,7 +299,7 @@ void MX_TIM8_Init(void) | ||||
|   htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; | ||||
|   htim8.Init.RepetitionCounter = 0; | ||||
|   htim8.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; | ||||
|   sConfig.EncoderMode = TIM_ENCODERMODE_TI1; | ||||
|   sConfig.EncoderMode = TIM_ENCODERMODE_TI12; | ||||
|   sConfig.IC1Polarity = TIM_ICPOLARITY_RISING; | ||||
|   sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI; | ||||
|   sConfig.IC1Prescaler = TIM_ICPSC_DIV1; | ||||
| @@ -303,7 +344,7 @@ void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* tim_encoderHandle) | ||||
|     */ | ||||
|     GPIO_InitStruct.Pin = E1A_Pin|E1B_Pin; | ||||
|     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; | ||||
|     GPIO_InitStruct.Pull = GPIO_NOPULL; | ||||
|     GPIO_InitStruct.Pull = GPIO_PULLUP; | ||||
|     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; | ||||
|     GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; | ||||
|     HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); | ||||
| @@ -327,7 +368,7 @@ void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* tim_encoderHandle) | ||||
|     */ | ||||
|     GPIO_InitStruct.Pin = E2A_Pin|E2B_Pin; | ||||
|     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; | ||||
|     GPIO_InitStruct.Pull = GPIO_NOPULL; | ||||
|     GPIO_InitStruct.Pull = GPIO_PULLUP; | ||||
|     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; | ||||
|     GPIO_InitStruct.Alternate = GPIO_AF3_TIM8; | ||||
|     HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); | ||||
| @@ -365,17 +406,6 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) | ||||
|     /* TIM3 clock enable */ | ||||
|     __HAL_RCC_TIM3_CLK_ENABLE(); | ||||
|  | ||||
|     __HAL_RCC_GPIOC_CLK_ENABLE(); | ||||
|     /**TIM3 GPIO Configuration | ||||
|     PC8     ------> TIM3_CH3 | ||||
|     */ | ||||
|     GPIO_InitStruct.Pin = HC_Echo_Pin; | ||||
|     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; | ||||
|     GPIO_InitStruct.Pull = GPIO_NOPULL; | ||||
|     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; | ||||
|     GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; | ||||
|     HAL_GPIO_Init(HC_Echo_GPIO_Port, &GPIO_InitStruct); | ||||
|  | ||||
|     /* TIM3 interrupt Init */ | ||||
|     HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0); | ||||
|     HAL_NVIC_EnableIRQ(TIM3_IRQn); | ||||
| @@ -394,6 +424,32 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) | ||||
|  | ||||
|   /* USER CODE END TIM4_MspInit 1 */ | ||||
|   } | ||||
|   else if(tim_baseHandle->Instance==TIM5) | ||||
|   { | ||||
|   /* USER CODE BEGIN TIM5_MspInit 0 */ | ||||
|  | ||||
|   /* USER CODE END TIM5_MspInit 0 */ | ||||
|     /* TIM5 clock enable */ | ||||
|     __HAL_RCC_TIM5_CLK_ENABLE(); | ||||
|  | ||||
|     __HAL_RCC_GPIOA_CLK_ENABLE(); | ||||
|     /**TIM5 GPIO Configuration | ||||
|     PA0     ------> TIM5_CH1 | ||||
|     */ | ||||
|     GPIO_InitStruct.Pin = HC_Echo_Pin; | ||||
|     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; | ||||
|     GPIO_InitStruct.Pull = GPIO_NOPULL; | ||||
|     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; | ||||
|     GPIO_InitStruct.Alternate = GPIO_AF2_TIM5; | ||||
|     HAL_GPIO_Init(HC_Echo_GPIO_Port, &GPIO_InitStruct); | ||||
|  | ||||
|     /* TIM5 interrupt Init */ | ||||
|     HAL_NVIC_SetPriority(TIM5_IRQn, 0, 0); | ||||
|     HAL_NVIC_EnableIRQ(TIM5_IRQn); | ||||
|   /* USER CODE BEGIN TIM5_MspInit 1 */ | ||||
|  | ||||
|   /* USER CODE END TIM5_MspInit 1 */ | ||||
|   } | ||||
| } | ||||
| void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) | ||||
| { | ||||
| @@ -509,14 +565,6 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) | ||||
|     /* Peripheral clock disable */ | ||||
|     __HAL_RCC_TIM3_CLK_DISABLE(); | ||||
|  | ||||
|     /**TIM3 GPIO Configuration | ||||
|     PB1     ------> TIM3_CH4 | ||||
|     PC8     ------> TIM3_CH3 | ||||
|     */ | ||||
|     HAL_GPIO_DeInit(PWMB_GPIO_Port, PWMB_Pin); | ||||
|  | ||||
|     HAL_GPIO_DeInit(HC_Echo_GPIO_Port, HC_Echo_Pin); | ||||
|  | ||||
|     /* TIM3 interrupt Deinit */ | ||||
|     HAL_NVIC_DisableIRQ(TIM3_IRQn); | ||||
|   /* USER CODE BEGIN TIM3_MspDeInit 1 */ | ||||
| @@ -534,6 +582,25 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) | ||||
|  | ||||
|   /* USER CODE END TIM4_MspDeInit 1 */ | ||||
|   } | ||||
|   else if(tim_baseHandle->Instance==TIM5) | ||||
|   { | ||||
|   /* USER CODE BEGIN TIM5_MspDeInit 0 */ | ||||
|  | ||||
|   /* USER CODE END TIM5_MspDeInit 0 */ | ||||
|     /* Peripheral clock disable */ | ||||
|     __HAL_RCC_TIM5_CLK_DISABLE(); | ||||
|  | ||||
|     /**TIM5 GPIO Configuration | ||||
|     PA0     ------> TIM5_CH1 | ||||
|     */ | ||||
|     HAL_GPIO_DeInit(HC_Echo_GPIO_Port, HC_Echo_Pin); | ||||
|  | ||||
|     /* TIM5 interrupt Deinit */ | ||||
|     HAL_NVIC_DisableIRQ(TIM5_IRQn); | ||||
|   /* USER CODE BEGIN TIM5_MspDeInit 1 */ | ||||
|  | ||||
|   /* USER CODE END TIM5_MspDeInit 1 */ | ||||
|   } | ||||
| } | ||||
|  | ||||
| /* USER CODE BEGIN 1 */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user