新手上路
- 积分
- 24
- 金钱
- 24
- 注册时间
- 2017-1-31
- 在线时间
- 12 小时
|

楼主 |
发表于 2017-2-5 23:11:48
|
显示全部楼层
本帖最后由 超级歪 于 2017-2-5 23:40 编辑
代码如下:
main函数部分:
#include "adc.h"
#include "delay.h"
#include "sys.h"
int main(void)
{ int test=0;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
adc_init();
while(1)
{
test=get_adc(ADC_Channel_1);
printf("the number is\n");
USART_SendData(USART1, test);//向串口1发送数据
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
delay_ms(1000);
}
}
ADC配置部分:
#include"adc.h"
#include"delay.h"
void adc_init(void)//adc初始化
{
GPIO_InitTypeDef GPIO_InitStruct;
ADC_InitTypeDef ADC_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_ADC1,ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct);
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
ADC_DeInit(ADC1);
ADC_InitStruct.ADC_Mode=ADC_Mode_Independent;
ADC_InitStruct.ADC_ScanConvMode=DISABLE;
ADC_InitStruct.ADC_ContinuousConvMode=DISABLE;
ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
ADC_InitStruct.ADC_DataAlign=ADC_DataAlign_Right;
ADC_InitStruct.ADC_NbrOfChannel=1;
ADC_Init(ADC1,&ADC_InitStruct);
ADC_ResetCalibration(ADC1);//使能复位校准
while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束
ADC_StartCalibration(ADC1); //开启AD校准
while(ADC_GetCalibrationStatus(ADC1)); //等待校准结束
}
u16 get_adc(u8 ch)//获取某一个通道转化结果
{
ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
return ADC_GetConversionValue(ADC1);
}
u16 get_adc_average(u8 ch , u8 times)//取平均值
{
u32 temp_val=0;
u8 t;
for(t=0;t<times;t++)
{
temp_val+=get_adc(ch);
delay_ms(5);
}
return temp_val/times;
}
|
|