標(biāo)題: STM32L431在STOP2模式下能否將串口的RX配置成EXTI喚醒呢?為什么我的喚醒不了呢?... [打印本頁(yè)]
作者: ohh132 時(shí)間: 2024-10-31 16:09
標(biāo)題: STM32L431在STOP2模式下能否將串口的RX配置成EXTI喚醒呢?為什么我的喚醒不了呢?...
STM32L431在STOP2模式下能否將串口的RX配置成EXTI喚醒呢?為什么我的喚醒不了呢?并且空閑中斷也不能用,手冊(cè)中說(shuō)在硬件上已經(jīng)將EXTI與RX引腳連到一塊了,但是呢STOP2模式不能將串口喚醒,所以它的那種方式好像不能使用,只能用最原始的將RX配置成EXTI的方式了,但是也還是喚醒不了
進(jìn)入STOP2模式,
- void EnterStop2ModeRTC(void) // 自定義的Enter函數(shù)
- {
- __HAL_RCC_PWR_CLK_ENABLE();
- __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
- __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(&hrtc, RTC_FLAG_WUTF);
- __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG();
- __HAL_RTC_TIMESTAMP_CLEAR_FLAG(&hrtc, RTC_FLAG_TSF);
- __HAL_RTC_TAMPER_TIMESTAMP_EXTI_CLEAR_FLAG();
- while (__HAL_UART_GET_FLAG(&huart3, USART_ISR_BUSY) == SET)
- ;
- while (__HAL_UART_GET_FLAG(&huart3, USART_ISR_REACK) == RESET)
- ;
- setUca3RxToExti();//配置串口3的RX為EXTI
- HAL_SuspendTick();
- //HAL_DBGMCU_EnableDBGStopMode();
- __HAL_RCC_PWR_CLK_ENABLE();
- HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI); // 進(jìn)入STOP2模式
- }
復(fù)制代碼退出STOP2
- void ExitStop2ModeRTC(void)
- {
- SystemClock_Config();
- HAL_ResumeTick();
- SCB->SCR &= ~SCB_SCR_SLEEPONEXIT_Msk;
- }
復(fù)制代碼主函數(shù)
- while (1)
- {
- while (getExitLPM3())
- {
- saveData();
- lcdActionPro(); // lcd進(jìn)程
- keyActPro();
- // if (uart[_COM3].active)
- // {
- // }
- }
- }
- EnterStop2ModeRTC();
- }
復(fù)制代碼在函數(shù)getExitLPM3()中,判斷了一個(gè)標(biāo)志位是否被置位,如果置位了就進(jìn)入里面的while
EXTI回調(diào)函數(shù):
- void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
- {
- if ((GPIO_Pin == GPIO_PIN_5))
- {
- ExitStop2ModeRTC();
- HAL_NVIC_DisableIRQ(EXTI9_5_IRQn);
- setUca3RxToRx();
- // uart[_COM3].active = true;
- }
- }
復(fù)制代碼在EXTI的回調(diào)函數(shù)中退出了STOP2模式并重新將串口RX引腳配置為接收引腳
- void setUca3RxToExti(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct;
- GPIO_InitStruct.Pin = GPIO_PIN_5;
- GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
- HAL_NVIC_SetPriority(EXTI9_5_IRQn, 0, 0);
- HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
- uart[_COM3].active = false;
- }
- void setUca3RxToRx(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct;
- GPIO_InitStruct.Pin = GPIO_PIN_5;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
- HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
- // // HAL_NVIC_SetPriority(USART3_IRQn, 0, 0);
- // // HAL_NVIC_EnableIRQ(USART3_IRQn);
- __HAL_UART_ENABLE_IT(&huart3, UART_IT_RXNE);
- // __HAL_UART_ENABLE_IT(&huart3, UART_IT_RXNE | UART_IT_IDLE);
- }
復(fù)制代碼串口中斷
- void USER_USART3_IRQHandler(void)
- {
- uint8_t data = 0;
- if (__HAL_UART_GET_FLAG(&huart3, UART_FLAG_RXNE) != RESET)
- {
- data = (uint8_t)huart3.Instance->RDR;
- wrEleQueue(&uart[_COM3].Rx, data);
- // uart[_COM3].active = true;
- // bleAppConfig.rxAct = 1;
- // bleAppConfig.tmrResp = bleAppConfig.tmrRxHold = HAL_LPTIM_ReadCounter(&hlptim1);
- // __HAL_UART_CLEAR_FLAG(&huart3, UART_FLAG_RXNE);
- }
- // if (__HAL_UART_GET_FLAG(&huart3, UART_FLAG_IDLE))
- // {
- // // uart[_COM3].flag = 1;
- // uart[_COM3].active = false;
- // __HAL_UART_CLEAR_IDLEFLAG(&huart3);
- // }
- }
復(fù)制代碼中間好像邏輯有點(diǎn)問(wèn)題,但是我想不明白了哈哈,就是那個(gè)標(biāo)志位被置位true后就會(huì)一直在內(nèi)層的while中循環(huán),出不來(lái)了,就進(jìn)不去STOP2了,但是不知道在哪將它給置為false,本來(lái)想使用IDLE空閑中斷的,但是空閑中斷使用后收不到數(shù)據(jù),現(xiàn)在不使用的時(shí)候第一包數(shù)據(jù)永遠(yuǎn)都是錯(cuò)誤的,有沒(méi)有大佬能幫忙看一下,謝謝大家
歡迎光臨 (http://m.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
www.日本在线观看
|
天天撸夜夜操
|
日本免费在线视频
|
高清一级片
|
精产国产伦理一二三区
|
亚洲福利视频一区
|
国产综合亚洲精品一区二
|
伦一理一级一a一片
|
日韩专区在线观看
|
欧美午夜理伦三级在线观看
|
日本a级大片|
欧美在线日韩
|
日本黄a三级三级三级
|
国产欧美一区二区三区视频在线观看
|
五月天一区二区三区
|
日本黄色免费
|
久本草精品
|
欧美激情网
|
国产深夜福利
|
国产欧美一区二区精品性色超碰
|
91精品国产色综合久久不卡98
|
97在线免费视频
|
国产欧美一区二区三区在线看蜜臀
|
黄色影院在线观看
|
国产三级在线
|
天天躁日日躁bbbbb
|
91蜜桃在线观看
|
狠狠干婷婷|
日本不卡免费
|
99精品网站
|
中文字幕日韩在线观看
|
大色av
|
av每日更新
|
一区二区三区在线看
|
国产在线视频网站
|
亚洲一区二区中文字幕
|
国产一级视频在线观看
|
中文字幕免费av
|
午夜小视频在线观看
|
91啦丨九色丨刺激
|
欧美一级特黄视频
|