ADC 多通道DAM傳輸

2021-08-21 04:50:12 字數 3265 閱讀 5616

一、初始化dma傳輸

dma_inittypedef dma_initstructure;					//定義結構體

rcc_ahbperiphclockcmd(rcc_ahbperiph_dma1, enable); //開啟dma時鐘

dma_deinit(dma1_channel1);

//決定資料從**來到**去

dma_initstructure.dma_peripheralbaseaddr = (uint32_t)(&( adc1->dr )); //外設位址

dma_initstructure.dma_memorybaseaddr = (uint32_t)&adc_value; //儲存器位址

dma_initstructure.dma_dir = dma_dir_peripheralsrc; //傳輸方向

//資料要傳多少,傳的單位是什麼

dma_initstructure.dma_buffersize = adc_count ; //傳輸數目

dma_initstructure.dma_peripheralinc = dma_peripheralinc_disable; //外設位址遞增模式

dma_initstructure.dma_memoryinc = dma_memoryinc_enable; //儲存器位址遞增模式

dma_initstructure.dma_memorydatasize = dma_memorydatasize_halfword; //外設資料寬度

dma_initstructure.dma_peripheraldatasize = dma_peripheraldatasize_halfword; //儲存器資料寬度

dma_initstructure.dma_mode = dma_mode_circular ; //傳輸模式是否迴圈

dma_initstructure.dma_priority = dma_priority_high; //通道優先順序

dma_initstructure.dma_m2m = dma_m2m_disable; //儲存器到儲存器模式

dma_init(dma1_channel1, &dma_initstructure); //呼叫庫函式將值寫入

dma_clearflag(dma1_flag_tc2); //清除標誌位

dma_cmd(dma1_channel1, enable); //dma使能

二、adc轉換配置

//轉換規則               adc號    通道號       轉換順序   取樣時間

adc_regularchannelconfig(adc_x , adc_channel_10 , 1, adc_sampletime_55cycles5);

adc_regularchannelconfig(adc_x , adc_channel_11 , 2, adc_sampletime_55cycles5);

adc_regularchannelconfig(adc_x , adc_channel_12 , 3, adc_sampletime_55cycles5);

adc_regularchannelconfig(adc_x , adc_channel_13 , 4, adc_sampletime_55cycles5);

adc_regularchannelconfig(adc_x , adc_channel_14 , 5, adc_sampletime_55cycles5);

adc_regularchannelconfig(adc_x , adc_channel_15 , 6, adc_sampletime_55cycles5);

三、程式原始碼

1、bsp_adc.h檔案

#ifndef __bsp_adc_h

#define __bsp_adc_h

#include "stm32f10x.h"

//adc相關gpio 時鐘 外設

#define rcc_gpio_clock rcc_apb2periphclockcmd

#define rcc_gpio_periph         rcc_apb2periph_gpioc

#define gpio_port gpioc

#define gpio_ch0_pin gpio_pin_0

#define gpio_ch1_pin gpio_pin_1

#define gpio_ch2_pin gpio_pin_2

#define gpio_ch3_pin gpio_pin_3

#define gpio_ch4_pin gpio_pin_4

#define gpio_ch5_pin gpio_pin_5

#define rcc_adc_clock rcc_apb2periphclockcmd

#define rcc_adc_periph rcc_apb2periph_adc1

#define adc_x adc1

#define adc_count 6

#define adc_irqn adc1_2_irqn

void adc_init_config(void);

#endif /* __bsp_adc_h */

2、bsp_adc.c檔案

#include "bsp_adc.h"

__io uint16_t adc_value[adc_count];

static void adc_gpio_config(void)

static void adc_mpde_config(void)

void adc_init_config(void)

3、main.c檔案

#include "stm32f10x.h"   // 相當於51微控制器中的  #include #include "bsp_led.h"

#include "usart.h"

#include "bsp_adc.h"

extern __io uint16_t adc_value[adc_count];

float value[adc_count];

void delay(u32 i)

int main(void)

}

STM32多通道ADC操作

自 今天嘗試了下stm32的adc取樣,並利用dma實現取樣資料的直接搬運儲存,這樣就不用cpu去參與操作了。找了不少例子參考,adc和dma的設定了解了個大概,並直接利用開發板來做一些實驗來驗證相關的操作,保證自己對各部分設定的理解。我這裡用了3路的adc通道,1路外部變阻器輸入,另外兩路是內部的...

adc 取樣 通道

今天學習stm32的adc部分,adc1有18個通道,其中adc16和adc17是內部通道,分別接內部溫度計和vrefint。在做a d轉換的時候,16個多路通道可以分為兩組 規則組和注入組。不知道大家怎麼看,也許是我看的不夠專注,反正我覺得stm32的參考手冊真是晦澀難懂,就像 一樣。就規則組這個...

STM32的ADC取樣與多通道ADC取樣

stm32庫開發實戰指南 劉火良,楊森著 原理性質的東西還是少講,因為上面那本書裡面講解的很詳細了,直接來看硬體電路圖 這裡使用的是3362電位器 10k 即用stm32來測量pb0和gnd兩端的電壓,這樣的電路設計比較簡單也容易理解,但是存在一定的弊端,下面給出 stm32庫開發實戰指南 上面配套...