1. 程式人生 > >STM32待機模式Standby Mode與ADC DMA模式測試備忘

STM32待機模式Standby Mode與ADC DMA模式測試備忘

1)STM32執行十秒後自動進入待機,使用WakeUp引腳喚醒CPU後,重複以上動作。

int main(void)
{
	time_cnt = 0;
    
    HAL_Init();
	SystemClock_Config();
    
	HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_RESET);
	HAL_PWR_DisableWakeUpPin(PWR_CSR_EWUP);						//禁止wakeup PA0引腳,可以用來做普通引腳功能
    
    
	while (1)
	{
		HAL_Delay(1000);
        HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_13);					//執行時,閃LED
        time_cnt++;
        if(time_cnt >= 10)										//10秒後,進入待機模式
        {
            time_cnt = 0;
            
			//開啟wakeup引腳,待機後來個上升沿就可以喚醒cpu了
            HAL_PWR_EnableWakeUpPin(PWR_CSR_EWUP);
			//清除wakeup_flag,這裡很重要,假如沒有,就不能重複的讓cpu喚醒再進入待機
			//即HAL_PWR_EnterSTANDBYMode()將不起作用!!
            __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
			//cpu進入待機模式,NREST Pin,IWDG,RTC alarm,WakeUp引腳上升沿,都可以喚醒cpu
            HAL_PWR_EnterSTANDBYMode();
        }
    }
}



其他都沒什麼,最重要的是注意要清一下喚醒標誌位 __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);

因為cpu喚醒第一次後,會置位PWR_FLAG_WU和PWR_FLAG_SB,假如不清除,第二次待機就實現不了了。

2)開啟ADC,使用掃描模式,分別取樣Ch7和Ch8資料,存放於一個數組內





庫函式用起來還是非常方便的

__IO uint16_t   adc_value[100];

//start adc
HAL_ADC_Start_DMA(&hadc, (uint32_t*)&adc_value[0], 100);

dma就會自動將adc的資料取樣100個,放到adc_value 這個陣列內,排放順序當然是adc_value[0]放Ch7,adc_value[1]放Ch8,adc_value[2]放Ch7,adc_value[3]放Ch8。。。以此交錯放置,取樣完會產生中斷。

void DMA1_Channel1_IRQHandler(void)
{
    /* USER CODE BEGIN DMA1_Channel1_IRQn 0 */
    
    /* USER CODE END DMA1_Channel1_IRQn 0 */
    HAL_NVIC_ClearPendingIRQ(DMA1_Channel1_IRQn);
    
    HAL_DMA_IRQHandler(&hdma_adc);
    /* USER CODE BEGIN DMA1_Channel1_IRQn 1 */
    
    /* USER CODE END DMA1_Channel1_IRQn 1 */
}

上面是Stm32Cube自動生成的程式碼,挺方便的,中斷後會自動進入這個函式,這時只需要再自己寫一個

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
    //自定義功能
}
來替換掉系統的弱定義函式就可以了。
__weak void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)<span style="white-space:pre">	</span>//系統給出的弱定義空函式
然後就可以關閉ADC
//shut down adc
HAL_ADC_Stop_DMA(&hadc);

到這裡,ADC取樣一百個點完成,都存放在adc_value[100]這個數組裡了,簡單吧。

完。

相關推薦

STM32模式Standby ModeADC DMA模式測試

1)STM32執行十秒後自動進入待機,使用WakeUp引腳喚醒CPU後,重複以上動作。 int main(void) { time_cnt = 0; HAL_Init(); SystemClock_Config(); HAL_GPIO_

親測實驗,stm32模式和停機模式喚醒程式的區別,以及喚醒後程序入口。

這兩天研究了STM32的低功耗知識,低功耗裡主要研究的是STM32的待機模式和停機模式。讓微控制器進入的待機模式和停機模式比較容易,實驗中通過設定中斷口PA1來響應待機和停機模式。 void EXTI1_IRQHandler(void) {if(!GPIO_ReadInputDataBit(

STM32模式喚醒測試以及獨立看門狗測試

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

WCF系列教程之消息交換模式之請求答復模式(Request/Reply)

人員 point program enabled col ise sleep wds 類型 1、使用WCF請求與答復模式須知 (1)、客戶端調用WCF服務端需要等待服務端的返回,即使返回類型是void (2)、相比Duplex來講,這種模式強調的是客戶端的被動接受,也就是說

設計模式的分類 單例模式

設計模式GOF23(Group of four 四人幫) 一、設計模式是面向物件思想中重要的一點。 二、模式分為分為三種: 1.建立型模式:幫助我們建立物件 (1)單例模式 (2)工廠模式 (3)抽象工廠模式 (4)建造者模式 (5)原型模式 2.結構型模式:

關係模式的分解函式依賴模式的判斷

一:候選鍵的判斷 屬性集的閉包: 令α為一屬性集。我們稱在函式依賴集F下由α函式確定的所有屬性的集合為F下α的閉包,記為α+ 。 下面給出一個計算α+的演算法,該演算法的輸入是函式依賴集F和屬性集α,輸出儲存在變數result中。 演算法: result=α;

neon 的常見彙編指令程式碼對照【基礎

作者:歌神flaming  來源:CSDN  原文:https://blog.csdn.net/u010684585/article/details/78455993    .arm .text  .global cost_init cost_i

@Autowired@Qualifer的使用區別

使用 @Autowired 註釋進行byType注入,如果需要 byName(byName 就是通過 id 去標識)注入,增加 @Qualifier 註釋 @Qualifer 如果沒有的話,報的錯如下: no unique bean of type [org.spring

Asciidoctor gradle 整合生成 PDF

緣起 簡單文件一般使用 markdown 就足夠了,尤其單頁文件,不過稍微複雜點的文件用這玩意顯然就很不方便了,就單單一個不支援

STM32 RTC模式

目錄 1、背景 1.1什麼是待機模式 1.2退出待機模式 1.2.1RTC喚醒退出低功耗模式(待機為例) 1.2.3 進入待機模式之前的建議操作順序: 2、RTC初始化和配置 2.1 RTC暫存器防寫 2.2 RTC日曆初始化和配置 2.3 設定RTC週期性喚

第23章 RTX 低功耗之模式

時間戳 根據 class 方式 上升沿 校準 輸出 hsi 采樣 STM32F103 待機模式介紹 本章節我們主要講解待機模式,待機模式可實現系統的最低功耗。該模式是在 Cortex-M3 深睡眠模式時關閉電壓調節器。整個 1.8V 供電區域被斷電。 PLL、 HSI 和

STM32 多通道ADC採集詳解(DMA模式和非DMA模式

ADC相關問題: 1.採集到的值如何轉化計算?   在STM32系列晶片大都是12位只有少部分是16位的,如:F373晶片。   12位解析度意味著我們採集電壓的精度可以達到:Vref / 4096。    採集電壓= Vref * ADC_DR / 4096;  

STM32 DMA模式ADC多通道採集

ADC取樣基準電壓3.3V    3個通道採集資料 採集資料存放位置 ADC_ConvertedValue[0] ADC_ConvertedValue[1] ADC_ConvertedValue[2] 三個值對應ADC三個通道採集出來的值 實際電壓為 = 取樣值*

設定虛擬機器網路互連(僅主機)模式

為了實現主機與虛擬機器的Linux系統互連,可以對虛擬機器進行設定,達到目的。VMware的網路連線模式有三種:1、僅主機模式:也就是host_only,這種模式僅僅只讓虛擬機器與本地物理機通訊,不可以上網;2、NAT模式:這種模式保留僅主機模式的功能下,還能讓主機上網;3、

mac 蘋果電腦的睡眠休眠,決耗電的問題,AddressBookSourceSync

前一陣電腦關上蓋子任然很費電,於是調查一下, 方法1 檢視自己電腦的休眠狀態,改成25可以解決待機耗電的問題 pmset -g 以下是蘋果電腦的幾種休眠狀態, hibernatemode=0 by default is supported

android新增電量小部件,點選位置資訊圖示,模式切換需要改為四種

android版本為5.1 小部件功能的實現是在各自的應用程式裡面, 小部件新增的過程是在Launcher裡面 很明顯,電量小部件的實現是在Settings裡面 要寫一個widgets,必須用到AppWidgetProvider這個類 AppWidgetProvider它是

stm32簡明教程系列(二)----GPIO(上)八種模式的區別應用場合

一.概述 GPIO全稱為通用輸入/輸出埠。是stm32用於輸出訊號,輸入訊號的通道。他有以下八種模式: 輸入方式 浮空輸入 GPIO_Mode_IN_FLOATING 上拉GPIO_Mode_IPU 下拉GPIO_Mode_IPD 模擬輸入 GPIO_Mode_A

STM32F103C8T6低功耗測試模式

只測試了待機模式,待機模式實現系統的最低功耗。 原理圖如下,一開始全部焊接了,其中S2用來進入待機,S1用來喚醒 測試程式為: #include "stm32f10x.h" #include "system_stm32f10x.h"v oid S

android 加密手機完畢後兩分鐘出現有頻率的雜音

加密 tin ger 詳細 pps 主動 oid per 手機 這個音效是code裏面主動加的,是為了提醒end user輸入PIN的一個提示音,也標誌著加密手機動作的完畢。 詳細位置是在alps\packages\apps\Settings\src\com\andro

設計模式—靜態代理模式(聚合繼承方式比較)

rri 技術分享 ktr sta too div ide rup 增加 一、概述 1.目標:要在Tank的move()方法做時間代理及日誌代理(可以設想以後還要增加很多代理處理),且代理間的順序可活更換 2.思路: (1)聚合:代理類聚合了被代理類,且代理類及被代理類都實現