女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ADC,DMA,多路,單次/連續轉換 (標準外設庫)

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 作者:黃工的嵌入式技術 ? 2020-03-04 11:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

今天回答一個朋友的問題吧,ADC如何使用DMA采集多通道模擬電壓。

1寫在前面

這個問題其實之前寫過一些相關文章,原理我之前也有相關描述。如果想要徹底弄明白其原理,建議閱讀《參考手冊》、結合標準外設庫來理解。

現在很多人習慣使用STM32CubeMX來直接生成初始化代碼,如果沒有掌握STM32CubeMX、HAL庫,使用STM32CubeMX生成的代碼,或許就不能滿足你的應用。

同時,STM32CubeMX生成的代碼,想要根據代碼進一步了解其原理,其實很難

ADC轉換一些基礎原理,我這里就不過多描述了,請直接看下面標準外設庫源碼、及后面給的注釋。

下面寫2點:ADC軟件單次觸發轉換,和連續轉換。

2

ADC,DMA,單次觸發轉換

這里以ADC,使用DMA,通過軟件單次觸發轉換為例。主要需注意幾個相關參數即可。

1.GPIO配置

2.DMA配置

3.ADC配置

4.ADC單次觸發轉換

5.源代碼

/* 靜態變量 ------------------------------------------------------------------*/static volatile uint16_t sADC_Buf[3];/************************************************函數名稱 : ADC_GPIO_Configuration功 能 : ADC引腳配置參 數 : 無返 回 值 : 無作 者 : strongerHuang*************************************************/void ADC_GPIO_Configuration(void){ GPIO_InitTypeDef GPIO_InitStructure; /* 使能時鐘 */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模擬輸入 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; GPIO_Init(GPIOA, &GPIO_InitStructure);}/************************************************函數名稱 : ADC_DMA_Configuration功 能 : ADC DMA配置參 數 : 無返 回 值 : 無作 者 : strongerHuang*************************************************/void ADC_DMA_Configuration(void){ DMA_InitTypeDef DMA_InitStructure; /* 使能時鐘 */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); /* 配置DMA */ DMA_InitStructure.DMA_Channel = DMA_Channel_0; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&(ADC1->DR));//外設地址 DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)(&sADC_Buf[0]); //內存地址 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; //傳輸方向:外設 -> 內存 DMA_InitStructure.DMA_BufferSize = 3; //傳輸長度 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外設遞增:關閉 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //內存遞增:打開 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//數據寬度 DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //正常模式 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //優先級 DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_Init(DMA2_Stream0, &DMA_InitStructure);}/************************************************函數名稱 : ADC_Configuration功 能 : ADC參數配置參 數 : 無返 回 值 : 無作 者 : strongerHuang*************************************************/void ADC_Configuration(void){ ADC_InitTypeDef ADC_InitStructure; ADC_CommonInitTypeDef ADC_CommonInitStructure; /* 使能時鐘 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); /* ADC配置 */ ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent; ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2; ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; ADC_CommonInit(&ADC_CommonInitStructure); ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; ADC_InitStructure.ADC_ScanConvMode = ENABLE; //瀏覽模式(多通道) ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //連續轉化模式 ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //數據右對齊 ADC_InitStructure.ADC_NbrOfConversion = 3; //轉換通道數 ADC_Init(ADC1, &ADC_InitStructure); /* 通道配置 */ ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_3Cycles); ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 2, ADC_SampleTime_3Cycles); ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 3, ADC_SampleTime_3Cycles); ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE); ADC_DMACmd(ADC1, ENABLE); //使能ADC的DMA功能 ADC_Cmd(ADC1, ENABLE); //使能ADC}/************************************************函數名稱 : ADC_Initializes功 能 : ADC初始化參 數 : 無返 回 值 : 無作 者 : strongerHuang*************************************************/void ADC_Initializes(void){ ADC_GPIO_Configuration(); ADC_DMA_Configuration(); ADC_Configuration();}/************************************************函數名稱 : ADC_Get功 能 : 轉換參 數 : 無返 回 值 : 無作 者 : strongerHuang*************************************************/void ADC_Get(void){ DMA_Cmd(DMA2_Stream0, DISABLE); //關閉DMA //內存地址 DMA_MemoryTargetConfig(DMA2_Stream0, (uint32_t)sADC_Buf, DMA_Memory_0); DMA_ClearFlag(DMA2_Stream0, DMA_FLAG_TCIF0); //清除標志位 DMA_Cmd(DMA2_Stream0, ENABLE); //使能DMA ADC_SoftwareStartConv(ADC1); //啟動轉換 while(RESET == DMA_GetFlagStatus(DMA2_Stream0, DMA_FLAG_TCIF0)); //等待轉換完成 //得到3條通道轉換結果:sADC_Buf //進行相關換算,處理...}

提示:以上源代碼只為方便學習和理解,請結合實際應用修改、或增減代碼。

3

ADC,DMA,連續轉換

我這里寫的連續,是ADC連續轉換,同時,DMA循環存儲。大部分配置和上面差不多,這種方式也用的比較多,寫給大家。

1.DMA配置

2.ADC配置

3.源代碼

/* 靜態變量 ------------------------------------------------------------------*/static volatile uint16_t sADC_Buf[3];/************************************************函數名稱 : ADC_GPIO_Configuration功 能 : ADC引腳配置參 數 : 無返 回 值 : 無作 者 : strongerHuang*************************************************/void ADC_GPIO_Configuration(void){ GPIO_InitTypeDef GPIO_InitStructure; /* 使能時鐘 */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模擬輸入 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; GPIO_Init(GPIOA, &GPIO_InitStructure);}/************************************************函數名稱 : ADC_DMA_Configuration功 能 : ADC DMA配置參 數 : 無返 回 值 : 無作 者 : strongerHuang*************************************************/void ADC_DMA_Configuration(void){ DMA_InitTypeDef DMA_InitStructure; /* 使能時鐘 */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); /* 配置DMA */ DMA_InitStructure.DMA_Channel = DMA_Channel_0; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&(ADC1->DR));//外設地址 DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)(&sADC_Buf[0]); //內存地址 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; //傳輸方向:外設 -> 內存 DMA_InitStructure.DMA_BufferSize = 3; //傳輸長度 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外設遞增:關閉 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //內存遞增:打開 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//數據寬度 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //循環模式 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //優先級 DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_Init(DMA2_Stream0, &DMA_InitStructure);}/************************************************函數名稱 : ADC_Configuration功 能 : ADC參數配置參 數 : 無返 回 值 : 無作 者 : strongerHuang*************************************************/void ADC_Configuration(void){ ADC_InitTypeDef ADC_InitStructure; ADC_CommonInitTypeDef ADC_CommonInitStructure; /* 使能時鐘 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); /* ADC配置 */ ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent; ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2; ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; ADC_CommonInit(&ADC_CommonInitStructure); ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; ADC_InitStructure.ADC_ScanConvMode = ENABLE; //瀏覽模式(多通道) ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //連續轉化模式 ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //數據右對齊 ADC_InitStructure.ADC_NbrOfConversion = 3; //轉換通道數 ADC_Init(ADC1, &ADC_InitStructure); /* 通道配置 */ ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_3Cycles); ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 2, ADC_SampleTime_3Cycles); ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 3, ADC_SampleTime_3Cycles); ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE); ADC_DMACmd(ADC1, ENABLE); //使能ADC的DMA功能 ADC_Cmd(ADC1, ENABLE); //使能ADC ADC_SoftwareStartConv(ADC1); //啟動轉換}/************************************************函數名稱 : ADC_Initializes功 能 : ADC初始化參 數 : 無返 回 值 : 無作 者 : strongerHuang*************************************************/void ADC_Initializes(void){ ADC_GPIO_Configuration(); ADC_DMA_Configuration(); ADC_Configuration();}/************************************************函數名稱 : ADC_Get功 能 : 轉換參 數 : 無返 回 值 : 無作 者 : strongerHuang*************************************************/void ADC_Get(void){ //得到3條通道轉換結果:sADC_Buf //進行相關換算,處理...}

這種方式比較簡單,直接去讀取轉換結果就行。實際應用需要濾波,求平均之類的操作。

提示:以上源代碼只為方便學習和理解,請結合實際應用修改、或增減代碼。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • adc
    adc
    +關注

    關注

    99

    文章

    6673

    瀏覽量

    548762
  • 模擬電壓
    +關注

    關注

    6

    文章

    64

    瀏覽量

    18597
  • GPIO
    +關注

    關注

    16

    文章

    1279

    瀏覽量

    53845
  • stm32cubemx
    +關注

    關注

    5

    文章

    286

    瀏覽量

    16123
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    基于APM32F411 DMA_ADC Handler模式分析及解決

    最近在編寫DMA_ADC例程的過程中出現了一個中斷配置的問題,在ADC采集過程中,結合手冊進行ADC連續轉換模式配置采集,手冊上給出需要進行
    的頭像 發表于 06-24 14:30 ?422次閱讀
    基于APM32F411 <b class='flag-5'>DMA_ADC</b> Handler模式分析及解決

    STM32F4標準外設資料

    stm32f4xx.h,標準外設
    發表于 06-08 09:49 ?0次下載

    STM32使用外部中斷觸發ADC采樣DMA搬運出現兩進入DMA中斷的異常情況,怎么解決?

    STM32使用外部中斷觸發ADC采樣DMA搬運出現兩進入DMA中斷的異常情況,使用的HAL+MX配置的,示波器觀察波形
    發表于 03-14 12:46

    STM32G030F6 ADC+DMA多通道非連續采樣無法正常工作怎么解決?

    配置:使用STM32G030F6 ADC外設時,ADC使用兩個通道。DMA配置為循環模式,ADC掃描模式+非
    發表于 03-12 07:10

    請問ADS1232轉換模式都是連續轉換模式嗎?

    請問ADS1232轉換模式都是連續轉換模式嗎,如果轉換模式應該怎樣設置,喚醒模式可以認為是
    發表于 02-06 06:17

    ads1220連續轉換模式讀取數據時是正確的,但是配置成單模式時讀出的全是0,為什么?

    ads1220連續轉換模式讀取數據時是正確的,但是配置成單模式時讀出的全是0,模式的配置是不是有特別之處??
    發表于 12-17 08:29

    求助,關于模數轉換器ADS1115連續轉換的問題求解

    采集端口,從寄存器讀取的值還是之前端口的值。所以針對轉換連續轉換的問題,我希望可以得到一個詳細的解釋,數據手冊感覺不太清楚
    發表于 11-29 14:26

    ADC器件連續轉換轉換的區別是什么?

    轉換指的是, ADC根據信號請求對輸入信號進行一切換,將轉換值存儲到內部
    發表于 11-28 06:23

    ADS1291為什么無法應用轉換模式?

    您好,我最近在用ADS1291采集心電信號,使用連續模式時,可以正常采集信號,但使用轉換模式時,DRDY引腳一直是高電平,無法讀取數據,調試的過程中有兩
    發表于 11-26 06:19

    用于ADCDMA乒乓

    電子發燒友網站提供《用于ADCDMA乒乓.pdf》資料免費下載
    發表于 09-07 11:27 ?1次下載
    用于<b class='flag-5'>ADC</b>的<b class='flag-5'>DMA</b>乒乓

    運用MSPM0的DMA和Event功能實現ADC多路周期性采樣

    電子發燒友網站提供《運用MSPM0的DMA和Event功能實現ADC多路周期性采樣.pdf》資料免費下載
    發表于 09-06 15:01 ?12次下載
    運用MSPM0的<b class='flag-5'>DMA</b>和Event功能實現<b class='flag-5'>ADC</b><b class='flag-5'>多路</b>周期性采樣

    STM32CUBEMX(3)--ADC通過DMA方式采樣,USART打印

    @TOC 概述 直接存儲器訪問(DMA)用于在外設與存儲器之間以及存儲器與存儲器之間提供高速數據傳輸??梢栽跓o需任何CPU操作的情況下通過DMA快速傳輸傳輸。這樣節省的CPU資源可供其它操作
    發表于 09-04 14:08

    AD7124轉換速率突然變慢是為什么

    AD7124程序中根據設定的次數進行轉換,發現有時候轉換的速率會變很慢,這是為什么呢
    發表于 08-07 10:56

    ADS1112精密、連續自校準模數轉換器(ADC)數據表

    電子發燒友網站提供《ADS1112精密、連續自校準模數轉換器(ADC)數據表.pdf》資料免費下載
    發表于 07-24 09:52 ?0次下載
    ADS1112精密、<b class='flag-5'>連續</b>自校準模數<b class='flag-5'>轉換</b>器(<b class='flag-5'>ADC</b>)數據表

    ADS1110精密、連續自校準模數轉換器(ADC)數據表

    電子發燒友網站提供《ADS1110精密、連續自校準模數轉換器(ADC)數據表.pdf》資料免費下載
    發表于 07-19 11:24 ?1次下載
    ADS1110精密、<b class='flag-5'>連續</b>自校準模數<b class='flag-5'>轉換</b>器(<b class='flag-5'>ADC</b>)數據表
    主站蜘蛛池模板: 油尖旺区| 华安县| 双流县| 西林县| 西华县| 西丰县| 仁寿县| 阿瓦提县| 高唐县| 孟村| 阳谷县| 林甸县| 龙江县| 邯郸市| 双鸭山市| 广安市| 四平市| 西充县| 文化| 衡东县| 玛曲县| 繁昌县| 横山县| 上杭县| 建水县| 丰镇市| 许昌县| 卓尼县| 正蓝旗| 瓦房店市| 宁德市| 长垣县| 平塘县| 冀州市| 新建县| 玉山县| 牟定县| 台江县| 尼勒克县| 卫辉市| 延吉市|