日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stm32双adc电压采集

發布時間:2024/3/26 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stm32双adc电压采集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult;?? ?//ADC工做模式:ADC同步規則組模式

ADC_DMACmd(ADC1, ENABLE);? //使能ADC的DMA位

ADC_ExternalTrigConvCmd(ADC2, ENABLE);?? //使能ADC2的外部觸發模式,用adc1觸發adc2

#include "adc.h"#include "delay.h"#include "usart.h" #define M 128 #define N 8 uint16_t adcvalue[N][M]; u32 ADC_ConvertedValue; //初始化ADC1 void Adc1_Multi_Init(void) { ADC_InitTypeDef ADC_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1 , ENABLE ); //使能ADC1通道時鐘RCC_ADCCLKConfig(RCC_PCLK2_Div6); //設置ADC分頻因子6 72M/6=12,ADC最大時間不能超過14M//PA1 做為模擬通道輸入引腳GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模擬輸入引腳GPIO_Init(GPIOA, &GPIO_InitStructure); ADC_DeInit(ADC1); //復位ADC1,將外設 ADC1 的所有寄存器重設為缺省值ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult; //ADC工做模式:ADC1同步規則組模式ADC_InitStructure.ADC_ScanConvMode =DISABLE; //模數轉換工做在非掃描模式ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //模數轉換工做在單次轉換模式ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //轉換由軟件而不是外部觸發啟動ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC數據右對齊ADC_InitStructure.ADC_NbrOfChannel = 1; //順序進行規則轉換的ADC通道的數目ADC_Init(ADC1, &ADC_InitStructure); //根據ADC_InitStruct中指定的參數初始化外設ADCx的寄存器 ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5 );// 開啟ADC的DMA支持ADC_DMACmd(ADC1, ENABLE); //使能ADC的DMA位/* Enable ADC1 */ADC_Cmd(ADC1, ENABLE); //使能ADC1/* Enable ADC1 reset calibaration register 使能ADC1復位校準寄存器 */ ADC_ResetCalibration(ADC1);/* Check the end of ADC1 reset calibration register ADC1復位校準寄存器檢查結束*/while(ADC_GetResetCalibrationStatus(ADC1));/* Start ADC1 calibaration 啟動ADC1校準 */ADC_StartCalibration(ADC1);/* Check the end of ADC1 calibration ADC1校準檢查結束 */while(ADC_GetCalibrationStatus(ADC1));} //初始化ADC2 void Adc2_Multi_Init(void) { ADC_InitTypeDef ADC_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC |RCC_APB2Periph_ADC2 , ENABLE ); //使能ADC2通道時鐘RCC_ADCCLKConfig(RCC_PCLK2_Div6); //設置ADC分頻因子6 72M/6=12,ADC最大時間不能超過14M//PB0,1 做為模擬通道輸入引腳GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模擬輸入引腳GPIO_Init(GPIOC, &GPIO_InitStructure); ADC_DeInit(ADC2); //復位ADC2,將外設 ADC2 的所有寄存器重設為缺省值ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult; //ADC工做模式:ADC1同步規則組模式ADC_InitStructure.ADC_ScanConvMode =DISABLE; //模數轉換工做在非掃描模式ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //模數轉換工做在單次轉換模式ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //轉換由軟件而不是外部觸發啟動ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC數據右對齊ADC_InitStructure.ADC_NbrOfChannel = 1; //順序進行規則轉換的ADC通道的數目ADC_Init(ADC2, &ADC_InitStructure); //根據ADC_InitStruct中指定的參數初始化外設ADCx的寄存器 ADC_RegularChannelConfig(ADC2, ADC_Channel_10, 1, ADC_SampleTime_239Cycles5 );ADC_ExternalTrigConvCmd(ADC2, ENABLE); //使能ADC2的外部觸發模式/* Enable ADC2 */ADC_Cmd(ADC2, ENABLE); //使能ADC2/* Enable ADC1 reset calibaration register 使能ADC2復位校準寄存器 */ ADC_ResetCalibration(ADC2);/* Check the end of ADC1 reset calibration register ADC2復位校準寄存器檢查結束*/while(ADC_GetResetCalibrationStatus(ADC2));/* Start ADC1 calibaration 啟動ADC2校準 */ADC_StartCalibration(ADC2);/* Check the end of ADC1 calibration ADC2校準檢查結束 */while(ADC_GetCalibrationStatus(ADC2));}/*初始化ADC */ void MY_ADC_Init(void) {Adc1_Multi_Init();Adc2_Multi_Init();}void task_adc(u16 *value1,u16 *value2)//傳參獲取兩個值 { int i;*value1=0;*value2=0;printf("\r\n 采樣開始\r\n");for(i=0;i<M;i++){/* Start ADC1 Software Conversion 啟動ADC1軟件轉換 */ ADC_SoftwareStartConvCmd(ADC1, ENABLE); //開始轉換ADC_ConvertedValue=ADC1->DR;adcvalue[0][i] = (ADC_ConvertedValue&0xffff); //獲取ADC的值adcvalue[1][i] = ((ADC_ConvertedValue>> 16)&0xffff); //獲取ADC的值delay_ms(1);*value1=adcvalue[0][2];//也可以取平均值*value2=adcvalue[1][2];}}

總結

以上是生活随笔為你收集整理的stm32双adc电压采集的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。