金牌会员
- 积分
- 2354
- 金钱
- 2354
- 注册时间
- 2019-10-29
- 在线时间
- 380 小时
|
50金钱
请教大家一个问题,我用F030芯片,裸机时,进入stop模式,然后唤醒可以正常的;在运行freertos时,进入stop模式,能唤醒(调试发现执行到了进入stop模式代码后),但是不会进入到任务中,执行任务相关的代码
RTC闹钟中断 5S进一次
- void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
- {
- RTC_TimeTypeDef sTime = {0};
- // HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);
- HAL_GPIO_TogglePin(CH6_GPIO_Port,CH6_Pin);
- HAL_GPIO_TogglePin(CH6_GPIO_Port,CH6_Pin);
- sTime.Hours = 0;
- sTime.Minutes = 0;
- sTime.Seconds = 0;
- sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
- sTime.StoreOperation = RTC_STOREOPERATION_RESET;
- HAL_RTC_SetTime(hrtc, &sTime, RTC_FORMAT_BIN);
- stop_cnt++;
- }
复制代码
进入stop模式的代码
- void MCU_stop_FUNC(void)
- {
- if(stop_cnt>4){//RTC中断中 每5s累加一次
- stop_cnt=0;
-
- HAL_GPIO_TogglePin(CH5_GPIO_Port,CH5_Pin);
- HAL_GPIO_TogglePin(CH5_GPIO_Port,CH5_Pin);
- HAL_ADC_Stop_DMA(&hadc);
- rf_sleep();
-
- // vTaskSuspend(rfTaskHandle);
- // vTaskSuspend(otherTaskHandle);
- HAL_GPIO_WritePin(LED_RED_GPIO_Port,LED_RED_Pin,GPIO_PIN_SET);
- HAL_GPIO_WritePin(LED_GREEN_GPIO_Port,LED_GREEN_Pin,GPIO_PIN_SET);
- HAL_GPIO_WritePin(LED_BLUE_GPIO_Port,LED_BLUE_Pin,GPIO_PIN_SET);
- SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
- HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI ); //进入stop PWR_MAINREGULATOR_ON PWR_LOWPOWERREGULATOR_ON
-
- HAL_GPIO_TogglePin(CH5_GPIO_Port,CH5_Pin);
- HAL_GPIO_TogglePin(CH5_GPIO_Port,CH5_Pin);
- SystemClock_Config();
- HAL_ADC_Start_DMA(&hadc, (uint32_t*)adcBuf, 2);
- rf_out_of_sleep();
- HAL_GPIO_WritePin(LED_GREEN_GPIO_Port,LED_GREEN_Pin,GPIO_PIN_RESET);
- SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
- //vTaskResume(rfTaskHandle);
- //vTaskResume(otherTaskHandle);
- //osKernelStart();//开启任务调度
- }
- }
复制代码 在空闲任务中执行进入stop模式的代码
- static portTASK_FUNCTION( prvIdleTask, pvParameters )
- {
- /* Stop warnings. */
- ( void ) pvParameters;
- for( ;; )
- {
- /* See if any tasks have deleted themselves - if so then the idle task
- is responsible for freeing the deleted task's TCB and stack. */
- prvCheckTasksWaitingTermination();
- MCU_stop_FUNC();
- ............................
- }
复制代码
目前想实现的就是在任务跑时,能正常唤醒,执行任务
我看了一些帖子,说进入stop前,关闭SysTick,唤醒后,初始化系统时钟,并开启SysTick;但是我试了还是不能正常跑起来
请教下该如何在执行操作系统时(freertos),正常唤醒,正常执行任务??
谢谢啦
|
最佳答案
查看完整内容[请看2#楼]
找到问题了
是这个函数有问题
rf_out_of_sleep();
之前的是
参考SX1280文档这里,
后续我重新创建了个带有freertos的工程,进入低功耗,在唤醒,是没问题的,然后我就慢慢找目前的这个工程,结果发现
文档中这里写着,NSS拉低会唤醒...........
改成这样,可以正常唤醒并跑任务了。
下面是我测试创建的工程
|