| | |
| | | TIM_HandleTypeDef htim1; |
| | | TIM_HandleTypeDef htim2; |
| | | TIM_HandleTypeDef htim3; |
| | | TIM_HandleTypeDef htim4; |
| | | |
| | | UART_HandleTypeDef huart4; |
| | | UART_HandleTypeDef huart1; |
| | | UART_HandleTypeDef huart2; |
| | | UART_HandleTypeDef huart3; |
| | | UART_HandleTypeDef huart6; |
| | | DMA_HandleTypeDef hdma_uart4_rx; |
| | | DMA_HandleTypeDef hdma_usart1_rx; |
| | | DMA_HandleTypeDef hdma_usart1_tx; |
| | | DMA_HandleTypeDef hdma_usart2_rx; |
| | |
| | | static void MX_TIM2_Init(void); |
| | | static void MX_TIM3_Init(void); |
| | | static void MX_USART6_UART_Init(void); |
| | | static void MX_TIM4_Init(void); |
| | | static void MX_UART4_Init(void); |
| | | void StartDefaultTask(void *argument); |
| | | |
| | | /* USER CODE BEGIN PFP */ |
| | |
| | | MX_TIM2_Init(); |
| | | MX_TIM3_Init(); |
| | | MX_USART6_UART_Init(); |
| | | MX_TIM4_Init(); |
| | | MX_UART4_Init(); |
| | | /* USER CODE BEGIN 2 */ |
| | | UART6_StartReceive(); |
| | | Uart_Register(UART_ID_DBG, &huart1); |
| | | Uart_Register(UART_ID_GPS, &huart2); |
| | | Uart_Register(UART_ID_4G, &huart3); |
| | | Uart_Register(UART_ID_SBUS, &huart4); |
| | | Uart_Register(UART_ID_BT, &huart6); |
| | | |
| | | HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); // 电机 |
| | | HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); // 转向 |
| | | // 默认中立位置 |
| | | HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); // MOTOR_TIM |
| | | HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); // STEERING_TIM |
| | | // TIM4 CH1 Capture |
| | | HAL_TIM_IC_Start_IT(&htim4, TIM_CHANNEL_1); |
| | | // HAL_TIM_Base_Start_IT(&htim4); |
| | | __HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, 1500); |
| | | __HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_2, 1500); |
| | | /* USER CODE END 2 */ |
| | |
| | | /* USER CODE BEGIN RTOS_MUTEX */ |
| | | /* add mutexes, ... */ |
| | | DBG_Init(); |
| | | BT_Init(); |
| | | /* USER CODE END RTOS_MUTEX */ |
| | | |
| | | /* USER CODE BEGIN RTOS_SEMAPHORES */ |
| | |
| | | |
| | | /* USER CODE END TIM1_Init 0 */ |
| | | |
| | | TIM_ClockConfigTypeDef sClockSourceConfig = {0}; |
| | | TIM_MasterConfigTypeDef sMasterConfig = {0}; |
| | | TIM_OC_InitTypeDef sConfigOC = {0}; |
| | | TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; |
| | |
| | | htim1.Init.Period = 13513; |
| | | htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; |
| | | htim1.Init.RepetitionCounter = 0; |
| | | htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; |
| | | htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; |
| | | if (HAL_TIM_Base_Init(&htim1) != HAL_OK) |
| | | { |
| | | Error_Handler(); |
| | | } |
| | | sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; |
| | | if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) |
| | | { |
| | | Error_Handler(); |
| | | } |
| | | if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) |
| | | { |
| | | Error_Handler(); |
| | | } |
| | | sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; |
| | | sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; |
| | | sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET; |
| | | sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; |
| | | if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) |
| | |
| | | Error_Handler(); |
| | | } |
| | | /* USER CODE BEGIN TIM1_Init 2 */ |
| | | |
| | | HAL_TIM_Base_Start_IT(&htim1); // ������ʱ����ʹ���ж� |
| | | /* USER CODE END TIM1_Init 2 */ |
| | | HAL_TIM_MspPostInit(&htim1); |
| | | |
| | |
| | | |
| | | /* USER CODE END TIM2_Init 0 */ |
| | | |
| | | TIM_ClockConfigTypeDef sClockSourceConfig = {0}; |
| | | TIM_MasterConfigTypeDef sMasterConfig = {0}; |
| | | TIM_OC_InitTypeDef sConfigOC = {0}; |
| | | |
| | |
| | | htim2.Init.CounterMode = TIM_COUNTERMODE_UP; |
| | | htim2.Init.Period = 13513; |
| | | htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; |
| | | htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; |
| | | htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; |
| | | if (HAL_TIM_Base_Init(&htim2) != HAL_OK) |
| | | { |
| | | Error_Handler(); |
| | | } |
| | | sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; |
| | | if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) |
| | | { |
| | | Error_Handler(); |
| | | } |
| | | if (HAL_TIM_PWM_Init(&htim2) != HAL_OK) |
| | | { |
| | | Error_Handler(); |
| | | } |
| | | sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; |
| | | sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; |
| | | sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; |
| | | if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) |
| | | { |
| | |
| | | Error_Handler(); |
| | | } |
| | | /* USER CODE BEGIN TIM2_Init 2 */ |
| | | |
| | | HAL_TIM_Base_Start_IT(&htim2); // ������ʱ����ʹ���ж� |
| | | /* USER CODE END TIM2_Init 2 */ |
| | | HAL_TIM_MspPostInit(&htim2); |
| | | |
| | |
| | | |
| | | /* USER CODE END TIM3_Init 0 */ |
| | | |
| | | TIM_ClockConfigTypeDef sClockSourceConfig = {0}; |
| | | TIM_MasterConfigTypeDef sMasterConfig = {0}; |
| | | TIM_OC_InitTypeDef sConfigOC = {0}; |
| | | |
| | |
| | | htim3.Init.CounterMode = TIM_COUNTERMODE_UP; |
| | | htim3.Init.Period = 13513; |
| | | htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; |
| | | htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; |
| | | htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; |
| | | if (HAL_TIM_Base_Init(&htim3) != HAL_OK) |
| | | { |
| | | Error_Handler(); |
| | | } |
| | | sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; |
| | | if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK) |
| | | { |
| | | Error_Handler(); |
| | | } |
| | | if (HAL_TIM_PWM_Init(&htim3) != HAL_OK) |
| | | { |
| | | Error_Handler(); |
| | | } |
| | | sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; |
| | | sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; |
| | | sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; |
| | | if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) |
| | | { |
| | |
| | | Error_Handler(); |
| | | } |
| | | /* USER CODE BEGIN TIM3_Init 2 */ |
| | | |
| | | HAL_TIM_Base_Start_IT(&htim3); // ������ʱ����ʹ���ж� |
| | | /* USER CODE END TIM3_Init 2 */ |
| | | HAL_TIM_MspPostInit(&htim3); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * @brief TIM4 Initialization Function |
| | | * @param None |
| | | * @retval None |
| | | */ |
| | | static void MX_TIM4_Init(void) |
| | | { |
| | | |
| | | /* USER CODE BEGIN TIM4_Init 0 */ |
| | | |
| | | /* USER CODE END TIM4_Init 0 */ |
| | | |
| | | TIM_ClockConfigTypeDef sClockSourceConfig = {0}; |
| | | TIM_MasterConfigTypeDef sMasterConfig = {0}; |
| | | TIM_IC_InitTypeDef sConfigIC = {0}; |
| | | |
| | | /* USER CODE BEGIN TIM4_Init 1 */ |
| | | |
| | | /* USER CODE END TIM4_Init 1 */ |
| | | htim4.Instance = TIM4; |
| | | htim4.Init.Prescaler = 239; |
| | | htim4.Init.CounterMode = TIM_COUNTERMODE_UP; |
| | | htim4.Init.Period = 65535; |
| | | htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; |
| | | htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; |
| | | if (HAL_TIM_Base_Init(&htim4) != HAL_OK) |
| | | { |
| | | Error_Handler(); |
| | | } |
| | | sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; |
| | | if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK) |
| | | { |
| | | Error_Handler(); |
| | | } |
| | | if (HAL_TIM_IC_Init(&htim4) != HAL_OK) |
| | | { |
| | | Error_Handler(); |
| | | } |
| | | sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; |
| | | sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; |
| | | if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK) |
| | | { |
| | | Error_Handler(); |
| | | } |
| | | sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING; |
| | | sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI; |
| | | sConfigIC.ICPrescaler = TIM_ICPSC_DIV1; |
| | | sConfigIC.ICFilter = 0xF; |
| | | if (HAL_TIM_IC_ConfigChannel(&htim4, &sConfigIC, TIM_CHANNEL_1) != HAL_OK) |
| | | { |
| | | Error_Handler(); |
| | | } |
| | | /* USER CODE BEGIN TIM4_Init 2 */ |
| | | HAL_TIM_Base_Start_IT(&htim4); // ������ʱ����ʹ���ж� |
| | | /* USER CODE END TIM4_Init 2 */ |
| | | |
| | | } |
| | | |
| | | /** |
| | | * @brief UART4 Initialization Function |
| | | * @param None |
| | | * @retval None |
| | | */ |
| | | static void MX_UART4_Init(void) |
| | | { |
| | | |
| | | /* USER CODE BEGIN UART4_Init 0 */ |
| | | |
| | | /* USER CODE END UART4_Init 0 */ |
| | | |
| | | /* USER CODE BEGIN UART4_Init 1 */ |
| | | |
| | | /* USER CODE END UART4_Init 1 */ |
| | | huart4.Instance = UART4; |
| | | huart4.Init.BaudRate = 100000; |
| | | huart4.Init.WordLength = UART_WORDLENGTH_9B; |
| | | huart4.Init.StopBits = UART_STOPBITS_2; |
| | | huart4.Init.Parity = UART_PARITY_EVEN; |
| | | huart4.Init.Mode = UART_MODE_TX_RX; |
| | | huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE; |
| | | huart4.Init.OverSampling = UART_OVERSAMPLING_16; |
| | | huart4.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; |
| | | huart4.Init.ClockPrescaler = UART_PRESCALER_DIV1; |
| | | huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXINVERT_INIT; |
| | | huart4.AdvancedInit.RxPinLevelInvert = UART_ADVFEATURE_RXINV_ENABLE; |
| | | if (HAL_UART_Init(&huart4) != HAL_OK) |
| | | { |
| | | Error_Handler(); |
| | | } |
| | | if (HAL_UARTEx_SetTxFifoThreshold(&huart4, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK) |
| | | { |
| | | Error_Handler(); |
| | | } |
| | | if (HAL_UARTEx_SetRxFifoThreshold(&huart4, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK) |
| | | { |
| | | Error_Handler(); |
| | | } |
| | | if (HAL_UARTEx_DisableFifoMode(&huart4) != HAL_OK) |
| | | { |
| | | Error_Handler(); |
| | | } |
| | | /* USER CODE BEGIN UART4_Init 2 */ |
| | | |
| | | /* USER CODE END UART4_Init 2 */ |
| | | |
| | | } |
| | | |
| | |
| | | Error_Handler(); |
| | | } |
| | | /* USER CODE BEGIN USART6_Init 2 */ |
| | | __HAL_UART_ENABLE_IT(&huart6, UART_IT_IDLE); |
| | | //__HAL_UART_ENABLE_IT(&huart6, UART_IT_IDLE); |
| | | |
| | | HAL_UART_Receive_DMA(&huart6,uart6_dma_rxbuf,UART6_DMA_RX_BUF_SIZE); |
| | | //HAL_UART_Receive_DMA(&huart6,uart6_dma_rxbuf,UART6_DMA_RX_BUF_SIZE); |
| | | /* USER CODE END USART6_Init 2 */ |
| | | |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | /* DMA controller clock enable */ |
| | | __HAL_RCC_DMA1_CLK_ENABLE(); |
| | | __HAL_RCC_DMA2_CLK_ENABLE(); |
| | | |
| | | /* DMA interrupt init */ |
| | | /* DMA1_Stream0_IRQn interrupt configuration */ |
| | |
| | | /* DMA1_Stream7_IRQn interrupt configuration */ |
| | | HAL_NVIC_SetPriority(DMA1_Stream7_IRQn, 5, 0); |
| | | HAL_NVIC_EnableIRQ(DMA1_Stream7_IRQn); |
| | | /* DMA2_Stream0_IRQn interrupt configuration */ |
| | | HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 5, 0); |
| | | HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn); |
| | | |
| | | } |
| | | |
| | |
| | | __HAL_RCC_GPIOA_CLK_ENABLE(); |
| | | __HAL_RCC_GPIOE_CLK_ENABLE(); |
| | | __HAL_RCC_GPIOB_CLK_ENABLE(); |
| | | __HAL_RCC_GPIOD_CLK_ENABLE(); |
| | | |
| | | /*Configure GPIO pin Output Level */ |
| | | HAL_GPIO_WritePin(GPIOC, RED_Pin|GREEN_Pin|BLUE_Pin, GPIO_PIN_SET); |