ADC基于stm32的电压电流采集Word文档格式.docx
- 文档编号:18583414
- 上传时间:2022-12-28
- 格式:DOCX
- 页数:18
- 大小:53.18KB
ADC基于stm32的电压电流采集Word文档格式.docx
《ADC基于stm32的电压电流采集Word文档格式.docx》由会员分享,可在线阅读,更多相关《ADC基于stm32的电压电流采集Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
voidNVIC_Configuration(void);
voidTIM_Configuration(void);
voidADC_Configuration(void);
voidnumdisplay(uint16_tnum);
voidnumdisplay1(uint16_tnum);
voiddelay(void);
voiddelay()
{
inti,j;
for(i=0;
i<
0xfffff;
i++)j++;
}
vu16ADC_ConvertedValue[3];
/*******************************************************************************
*FunctionName:
main
*Description:
Mainprogram
*Input:
None
*Output:
*Return:
*Attention:
*******************************************************************************/
intmain(void)
inti=0;
GPIO_Configuration();
NVIC_Configuration();
TIM_Configuration();
ADC_Configuration();
/*Infiniteloop*/
for(i=0;
i<
10;
i++)
{
numb[i]=i;
}
numb[10]=1;
numb[11]=2;
numb[12]=3;
numb[13]=4;
numb[14]=5;
numb[15]=6;
;
while
(1)
{delay();
numdisplay((ADC_ConvertedValue[1]/4.096)*10.79);
//显示电流值
numdisplay1((ADC_ConvertedValue[2]/4.096)*11.755);
//显示电压值
GPIO_Configuration
ConfigureGPIOPin
*******************************************************************************/
voidnumdisplay(uint16_tnum)//电流的
uint16_ttemp1=0;
uint16_ttemp2=0;
uint16_ttemp3=0;
uint16_ttemp4=0;
if((num<
10000)&
&
(num>
=1000))
temp1=num/1000;
temp2=(num-temp1*1000)/100;
temp3=(num-temp1*1000-temp2*100)/10;
temp4=num-temp1*1000-temp2*100-temp3*10;
elseif((num<
1000)&
=100))
temp2=num/100;
temp3=(num-temp2*100)/10;
temp4=num-temp2*100-temp3*10;
elseif((100>
num)&
=10))
temp3=num/10;
temp4=num-temp3*10;
elseif(num<
10)
temp4=num;
else
{}
numb[12]=temp1;
numb[13]=temp2;
numb[14]=temp3;
numb[15]=temp4;
}
voidnumdisplay1(uint16_tnum)//电压的
uint16_ttemp5=0;
uint16_ttemp6=0;
uint16_ttemp7=0;
uint16_ttemp8=0;
temp5=num/1000;
temp6=(num-temp5*1000)/100;
temp7=(num-temp5*1000-temp6*100)/10;
temp8=num-temp5*1000-temp6*100-temp7*10;
temp6=num/100;
temp7=(num-temp6*100)/10;
temp8=num-temp6*100-temp7*10;
temp5=10;
temp7=num/10;
temp8=num-temp7*10;
temp8=num;
numb[8]=temp5;
numb[9]=temp6;
numb[10]=temp7;
numb[11]=temp8;
voidGPIO_Configuration(void)
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD
|RCC_APB2Periph_GPIOE,ENABLE);
/**
*LED1->
PD8,LED2->
PD9,LED3->
PD10,LED4->
PD11
*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9
|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
;
GPIO_Init(GPIOD,&
GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_8|GPIO_Pin_11|GPIO_Pin_7|GPIO_Pin_10|GPIO_Pin_12;
GPIO_Init(GPIOC,&
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_11|GPIO_Pin_8|GPIO_Pin_10|GPIO_Pin_12;
GPIO_Init(GPIOA,&
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_15;
GPIO_Init(GPIOE,&
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_11|GPIO_Pin_13|GPIO_Pin_15;
GPIO_Init(GPIOB,&
/*ConfigurePA.05.06.07(ADCChannel5.6.7)asanaloginput-------------------------*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
voidADC_Configuration(void)
ADC_InitTypeDefADC_InitStructure;
DMA_InitTypeDefDMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_AFIO,ENABLE);
/*DMAchannel1configuration----------------------------------------------*/
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1_DR_Address;
DMA_InitStructure.DMA_MemoryBaseAddr=(u32)&
ADC_ConvertedValue;
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;
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_High;
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;
DMA_Init(DMA1_Channel1,&
DMA_InitStructure);
/*EnableDMA1channel1*/
DMA_Cmd(DMA1_Channel1,ENABLE);
/*ADC1configuration------------------------------------------------------*/
ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode=ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel=3;
ADC_Init(ADC1,&
ADC_InitStructure);
/*ADC1regularchannel15configuration*/
ADC_RegularChannelConfig(ADC1,ADC_Channel_5,1,ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_6,2,ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_7,3,ADC_SampleTime_239Cycles5);
/*EnableADC1DMA*/
ADC_DMACmd(ADC1,ENABLE);
/*EnableADC1*/
ADC_Cmd(ADC1,ENABLE);
/*EnableADC1resetcalibarationregister*/
ADC_ResetCalibration(ADC1);
/*ChecktheendofADC1resetcalibrationregister*/
while(ADC_GetResetCalibrationStatus(ADC1));
/*StartADC1calibaration*/
ADC_StartCalibration(ADC1);
/*ChecktheendofADC1calibration*/
while(ADC_GetCalibrationStatus(ADC1));
/*StartADC1SoftwareConversion*/
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
TIM_Configuration
TIM_Configurationprogram.
*Reswitch(count2)turn:
voidTIM_Configuration(void)
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
TIM_DeInit(TIM3);
TIM_TimeBaseStructure.TIM_Period=200;
/*自动重装载寄存器周期的值(计数值)*/
/*累计TIM_Period个频率后产生一个更新或者中断*/
TIM_TimeBaseStructure.TIM_Prescaler=(100-1);
/*时钟预分频数例如:
时钟频率=72MHZ/(时钟预分频+1)*/
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
/*采样分频*/
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
/*向上计数模式*/
TIM_TimeBaseInit(TIM3,&
TIM_TimeBaseStructure);
TIM_ClearFlag(TIM3,TIM_FLAG_Update);
/*清除溢出中断标志*/
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM3,ENABLE);
/*开启时钟*/
NVIC_Configuration
Configurationthenestedvectoredinterruptcontroller.
voidNVIC_Configuration(void)
NVIC_InitTypeDefNVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&
NVIC_InitStructure);
#ifdefUSE_FULL_ASSERT
/**
*@briefReportsthenameofthesourcefileandthesourcelinenumber
*wheretheassert_paramerrorhasoccurred.
*@paramfile:
pointertothesourcefilename
*@paramline:
assert_paramerrorlinesourcenumber
*@retvalNone
*/
voidassert_failed(uint8_t*file,uint32_tline)
{
/*Usercanaddhisownimplementationtoreportthefilenameandlinenumber,
ex:
printf("
Wrongparametersvalue:
file%sonline%d\r\n"
file,line)*/
while
(1)
#endif
/*********************************************************************************************************
ENDFILE
********
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ADC 基于 stm32 电压 电流 采集