目前我正在做一个 BLDC 项目,通过 MC SDK,我们可以控制电机。
而且我们还想让 MCU(
STM32F4) 进入 STOP 模式以节省一些电量,问题是 MCU 无法进入 STOP 模式,有人试过这个吗?
的
编码:
- void McuEnterStopMode(void)
- {
- __disable_irq();
- HAL_CAN_Stop(&hcan1);
- HAL_Suspendtick();
- HAL_TIM_Base_Stop(&htim1);
- HAL_TIM_Base_Stop(&htim3);
- HAL_NVIC_DisableIRQ(TIM1_BRK_TIM9_IRQn);
- HAL_NVIC_DisableIRQ(TIM1_BRK_TIM9_IRQn);
- HAL_NVIC_DisableIRQ(TIM3_IRQn);
- HAL_NVIC_DisableIRQ(TIM7_IRQn);
- HAL_NVIC_DisableIRQ(FPU_IRQn);
- htim1.Instance->CR1 &= ~(TIM_CR1_CEN);
- htim3.Instance->CR1 &= ~(TIM_CR1_CEN);
- htim1.Instance->SR = 0;
- htim3.Instance->SR = 0;
- TIM7->CR1 &= ~(TIM_CR1_CEN);
- TIM7->SR = 0;
- TIM3->CR1 &= ~(TIM_CR1_CEN);
- TIM3->SR = 0;
- ClearFPU();
- HAL_NVIC_ClearPendingIRQ(TIM1_BRK_TIM9_IRQn);
- HAL_NVIC_ClearPendingIRQ(TIM1_BRK_TIM9_IRQn);
- HAL_NVIC_ClearPendingIRQ(TIM3_IRQn);
- HAL_NVIC_ClearPendingIRQ(TIM7_IRQn);
- HAL_NVIC_ClearPendingIRQ(FPU_IRQn);
- // 3. 进入stop
- HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
- __enable_irq();
- HAL_ResumeTick();
- HAL_Init();
- MX_NVIC_Init();
- SystemClock_Config();
- HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/SYS_TICK_FREQUENCY);
- HAL_CAN_Start(&hcan1);
- HAL_TIM_Base_Start(&htim1);
- HAL_TIM_Base_Start(&htim3);
- HAL_NVIC_EnableIRQ(TIM1_BRK_TIM9_IRQn);
- HAL_NVIC_EnableIRQ(TIM1_BRK_TIM9_IRQn);
- HAL_NVIC_EnableIRQ(TIM3_IRQn);
- HAL_NVIC_EnableIRQ(TIM7_IRQn);
- HAL_NVIC_EnableIRQ(FPU_IRQn);
- }
的
的
在调用下面的代码之前,我检查了 EXTI 也没有挂起的中断。
- HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
而且
我试过如果不在main中调用MX_MotorControl_Init(line30),睡眠和唤醒都可以,谁能提供一些建议?
- int main(void)
- {
- /* USER CODE BEGIN 1 */
- /* USER CODE END 1 */
- /* MCU Configuration--------------------------------------------------------*/
- /* 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_ADC1_Init();
- MX_ADC2_Init();
- MX_TIM1_Init();
- MX_TIM3_Init();
- MX_USART1_UART_Init();
- MX_MotorControl_Init();
- MX_SPI2_Init();
- MX_SPI1_Init();
- MX_UART5_Init();
- MX_CAN1_Init();
- /* Initialize interrupts */
- MX_NVIC_Init();
- /* USER CODE BEGIN 2 */
的
谢谢!