日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

stm32 DMA 多通道數(shù)據(jù)采集

發(fā)布者:MysticalWhisper最新更新時(shí)間:2024-10-14 來源: cnblogs關(guān)鍵字:stm32  DMA  數(shù)據(jù)采集 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

程序如下:
/******************** (C) COPYRIGHT 2012               ***************************
 * 文件名  :adc.c
 * 描述    :adc應(yīng)用函數(shù)庫       
 * 庫版本  :ST3.5.0
**********************************************************************************/
#include 'bsp.h'

#define ADC1_DR_Address    ((u32)0x40012400+0x4c)

__IO uint16_t ADC_ConvertedValue[2];
//__IO u16 ADC_ConvertedValueLocal;

                                                                   
/*
 * 函數(shù)名:ADC1_GPIO_Config
 * 描述  :使能ADC1和DMA1的時(shí)鐘,初始化PC.01
 * 輸入  : 無
 * 輸出  :無
 * 調(diào)用  :內(nèi)部調(diào)用
 */
static void ADC1_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    
    /* Enable DMA clock */
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
    
    /* Enable ADC1 and GPIOa clock */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA, ENABLE);
    
    /* Configure PC.01  as analog input */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(GPIOA, &GPIO_InitStructure);                //
}


/* 函數(shù)名:ADC1_Mode_Config
 * 描述  :配置ADC1的工作模式為MDA模式
 * 輸入  : 無
 * 輸出  :無
 * 調(diào)用  :內(nèi)部調(diào)用
 */
static void ADC1_Mode_Config(void)
{
    DMA_InitTypeDef DMA_InitStructure;
    ADC_InitTypeDef ADC_InitStructure;
    
    /* DMA channel1 configuration */
    DMA_DeInit(DMA1_Channel1);
    DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;     //ADC地址
    DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;//內(nèi)存地址
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
    DMA_InitStructure.DMA_BufferSize = 2;//轉(zhuǎn)換的是2個通道,所以是2
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外設(shè)地址固定
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//內(nèi)存地址不固定
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;    //半字
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;        //循環(huán)傳輸
    DMA_InitStructure.DMA_Priority = DMA_Priority_High;
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
    DMA_Init(DMA1_Channel1, &DMA_InitStructure);
    
    /* Enable DMA channel1 */
    DMA_Cmd(DMA1_Channel1, ENABLE);
    
    /* ADC1 configuration */
    
    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;    //獨(dú)立ADC模式
    ADC_InitStructure.ADC_ScanConvMode = ENABLE;//掃描模式,多通道,DISABLE ;      //禁止掃描模式,掃描模式用于多通道采集
    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;    //開啟連續(xù)轉(zhuǎn)換模式,即不停地進(jìn)行ADC轉(zhuǎn)換
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;    //不使用外部觸發(fā)轉(zhuǎn)換
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;     //采集數(shù)據(jù)右對齊
    ADC_InitStructure.ADC_NbrOfChannel = 2;         //2要轉(zhuǎn)換的通道數(shù)目2
    ADC_Init(ADC1, &ADC_InitStructure);
    
    /*配置ADC時(shí)鐘,為PCLK2的8分頻,即9Hz*/
    RCC_ADCCLKConfig(RCC_PCLK2_Div8);
    /*配置ADC1的通道2為55.    5個采樣周期,序列為1 */
    ADC_RegularChannelConfig(ADC1, ADC_Channel_2 , 1, ADC_SampleTime_55Cycles5);
    ADC_RegularChannelConfig(ADC1, ADC_Channel_3 , 2, ADC_SampleTime_55Cycles5);
    /* Enable ADC1 DMA */
    ADC_DMACmd(ADC1, ENABLE);
    
    /* Enable ADC1 */
    ADC_Cmd(ADC1, ENABLE);
    
    /*復(fù)位校準(zhǔn)寄存器 */   
    ADC_ResetCalibration(ADC1);
    /*等待校準(zhǔn)寄存器復(fù)位完成 */
    while(ADC_GetResetCalibrationStatus(ADC1));
    
    /* ADC校準(zhǔn) */
    ADC_StartCalibration(ADC1);
    /* 等待校準(zhǔn)完成*/
    while(ADC_GetCalibrationStatus(ADC1));
    
    /* 由于沒有采用外部觸發(fā),所以使用軟件觸發(fā)ADC轉(zhuǎn)換 */
    ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}

/*
 * 函數(shù)名:ADC1_Init
 * 描述  :無
 * 輸入  :無
 * 輸出  :無
 * 調(diào)用  :外部調(diào)用
 */
void ADC1_Init(void)
{
    ADC1_GPIO_Config();
    ADC1_Mode_Config();
}

直接從ADC_ConvertedValue[2]數(shù)組中取兩個通道的ad轉(zhuǎn)換值即可。

關(guān)鍵字:stm32  DMA  數(shù)據(jù)采集 引用地址:stm32 DMA 多通道數(shù)據(jù)采集

上一篇:stm32控制舵機(jī)
下一篇:stm32庫函數(shù)FSMC_NORSRAMInit()解析

推薦閱讀最新更新時(shí)間:2025-06-07 23:45

關(guān)于STM32 ADC時(shí)采用DMA的一點(diǎn)疑問
手冊上有這樣的話:只有ADC1能夠產(chǎn)生DMA請求,似乎是只有ADC通道1能采用DMA方式傳輸數(shù)據(jù)。 但是萬利的開發(fā)板上的ADC例子,用的是ADC通道10,還用了DMA 方式傳數(shù)據(jù)。 所以我猜測 “只有ADC1能夠產(chǎn)生DMA請求”中提到的ADC1 并不是指ADC 通道1, 而是軟件可配置的 ADC 通道的分類形式,可分為ADC1和ADC2. 我們可將 通道10(或其他)配置成ADC1 “模式”。通過函數(shù) /* ADC1 regular channel10 configuration */ ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_5
[單片機(jī)]
STM32學(xué)習(xí)日志——DMA實(shí)驗(yàn)
一、DMA簡介 DMA全程Direct Memory Access,即直接存儲器訪問;傳輸數(shù)據(jù)從一個地址空間復(fù)制到另一個地址空間,CPU只初始化這個傳輸動作,傳輸動作本身由DMA控制器完成,無需經(jīng)過CPU控制,使CPU效率大大提高。STM32最多由2個DMA,DMA2僅存在于大容量芯片,DMA1有7個通道,DMA2有5個通道。DMA具有4個優(yōu)先級:分別是最高、高、中等、低。仲裁器根據(jù)優(yōu)先級來啟動DAM。它可以實(shí)現(xiàn)外設(shè)到存儲器、存儲器到外設(shè)、存儲器到存儲器的傳輸。傳輸數(shù)據(jù)寬度分為字節(jié)(8bit),半字(16bit),字(32bit);傳輸源與傳輸目標(biāo)的數(shù)據(jù)寬度應(yīng)一致,不一致可能導(dǎo)致數(shù)據(jù)丟失,詳情可查閱STM32中文參考手冊表57:可
[單片機(jī)]
<font color='red'>STM32</font>學(xué)習(xí)日志——<font color='red'>DMA</font>實(shí)驗(yàn)
STM32 DMA串口發(fā)送模式配置及使用簡單分享
  贈人玫瑰,手有余香;很感謝網(wǎng)上其他樓主的分享;我這個貼子是關(guān)于STM32 DMA USART 發(fā)送模式的調(diào)試分享,我為什么要建這個帖子呢,因?yàn)槲也幌肟吹竭€有其他人跟我一樣,為了調(diào)通DMA串口,而花上大半天的時(shí)間,這很不利于大家高效率的開發(fā),網(wǎng)上的經(jīng)驗(yàn)都是從頭教到尾的,內(nèi)容極多,對于有點(diǎn)小經(jīng)驗(yàn)的人,或者是想很快達(dá)到目的的人,這個很不適合他們;我的這個很簡單(本帖不適合不熟悉配置STM32串口的玩家),他只是說串口的DMA怎么配置,還有我用的是DMA1_通道4,因?yàn)槲业氖谴?的TX長話短說:直接po代碼:   DMA_InitTypeDef DMA_InitStruct; //DMA類型聲明   RCC_AHBPeriphC
[單片機(jī)]
STM32:DMA實(shí)例之串口(USART)通信
硬件平臺:stm32f10xZET6 開發(fā)環(huán)境:keil MDK uVision v4.10 開發(fā)語言:C、ST_lib_3.5固件庫 /* 代碼演示 main.c */ #include stm32f10x.h #include bsp_usart1.h #include bsp_led.h extern uint8_t SendBuff ; static void Delay(__IO u32 nCount); /** * @brief 主函數(shù) */ int main(void) { /* USART1 config 115200 8-N-1 */ USART1_Config(); USART1_
[單片機(jī)]
STM32 HAL庫DMA串口使用問題集錦
開發(fā)小白用stm32開發(fā)時(shí)遇到的問題記錄 1.問題描述:使用HAL_UART_Receive_DMA進(jìn)行接收時(shí),經(jīng)常接收不到信息 處理過程: 經(jīng)查閱資料發(fā)現(xiàn)對于DMA串口,每個串口都有其對應(yīng)的通道,查詢后更改串口通道。 由于使用NUCLEO開發(fā)板進(jìn)行調(diào)試,調(diào)試過程中發(fā)現(xiàn)使用的串口未被引到對應(yīng)的排針上,而是接到板上自帶的STLINK的串口上。 串口極其不穩(wěn)定,有時(shí)能收到有時(shí)不能收到,但是另外一發(fā)送模塊確實(shí)是發(fā)出來了,經(jīng)打中斷發(fā)現(xiàn)經(jīng)常會出現(xiàn)溢出錯誤,調(diào)試了半天都不行,極其苦惱,后靈光一閃,在使用HAL_UART_Receive_DMA函數(shù)接收之前利用HAL_UART_Init函數(shù)再次對串口進(jìn)行初始化,之后發(fā)現(xiàn)可以接
[單片機(jī)]
STM32中基于DMA的ADC采樣實(shí)例之MQ-2煙霧傳感器
最近學(xué)習(xí)了一下STM32中的ADC采樣,由于手頭正好有一個MQ-2的煙霧傳感器,所以正好可以測試一把。體驗(yàn)ADC采樣的過程。下面介紹一下這個MQ-2煙霧傳感器。 1.MQ-2煙霧傳感器簡介 MQ-2氣體傳感器所使用的氣敏材料是在清潔空氣中電導(dǎo)率較低的二氧化錫(SnO2)。當(dāng)傳感器所處環(huán)境中存在可燃?xì)怏w時(shí),傳感器的電導(dǎo)率隨空氣中可燃?xì)怏w濃度的增加而增大。使用簡單的電路即可將電導(dǎo)率的變化轉(zhuǎn)換為與該氣體濃度相對應(yīng)的輸出信號。 MQ-2氣體傳感器對液化氣、丙烷、氫氣的靈敏度高,對天然氣和其它可燃蒸汽的檢測也很理想。這種傳感器可檢測多種可燃性氣體,是一款適合多種應(yīng)用的低成本傳感器。 2.傳感器模塊圖 3.MQ-2傳感器
[單片機(jī)]
<font color='red'>STM32</font>中基于<font color='red'>DMA</font>的ADC采樣實(shí)例之MQ-2煙霧傳感器
STM32串口使用心得(一)——DMA+空閑中斷接收
一,因何用之? 之前曾經(jīng)寫過一篇《關(guān)于CubeMX的串口全雙工接收發(fā)送鎖死的問題》的文章,討論了STM32的串口在全雙工模式下會出現(xiàn)鎖死問題的現(xiàn)象。當(dāng)時(shí)的解決辦法是在串口接收中斷中加入解鎖機(jī)制,貌似臨時(shí)解決了這個問題。但這幾天程序不知道怎么回事,又開始頻繁地出現(xiàn)死機(jī)現(xiàn)象,而且仿真的時(shí)候會進(jìn)入HardFault()。 二,緣何致之? 最讓人頭疼的問題就是大部分時(shí)間里沒有問題。 死機(jī)的現(xiàn)象總是在意想不到的情形下發(fā)生,可能剛下載完程序就出現(xiàn)了;或者正常跑了好幾天才出現(xiàn)。所以,為了尋找死機(jī)的原因,采取了以下兩種方式: 1,縮短任務(wù)執(zhí)行的延時(shí),加重MCU負(fù)擔(dān)。此舉可使死機(jī)的概率大幅提高。(仔細(xì)想來,之前貌似解決問題的時(shí)候
[單片機(jī)]
stm32串口dma接收異步數(shù)據(jù)
本文采用第3種方式.在波特率576000下大數(shù)據(jù)包沖擊證明可行. 源代碼: //串口接收DMA緩存 #define UART_RX_LEN 128 extern uint8_t Uart_Rx ; //串口接收DMA緩存 uint8_t Uart_Rx = {0}; //---------------------串口功能配置--------------------- //打開串口對應(yīng)的外設(shè)時(shí)鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE); //串口發(fā)DMA配置 //啟動DMA時(shí)鐘 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1
[單片機(jī)]
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved