ST意法半导体
直播中

王伟

7年用户 1471经验值
私信 关注
[问答]

MC SDK为什么不适用于MCU停止模式?

目前我正在做一个 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 */

谢谢!





回帖(1)

张彪其

2022-12-5 09:26:25
该代码确实是绝对的废话。阅读参考手册,查看示例并了解什么是停止模式和睡眠模式以及如何使用它们。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分