从零开始学习stm32(七)
数模转换模型
? 信号是什么呢?信号是运载信息的工具,是信息的载体。生活中处处有信号,比如路口的红绿灯,这是通行的信号、机场的地面搭台信号等等。可以说信号与我们的生活息息相关。通常来说,信号可以分为两大类:数字信号和模拟信号。模拟信号是连续的信号,它在一段连续的时间范围内可以任意瞬间呈现任意数值。数字信号是不连续的信号,它的自变量是离散的、因变量也是离散的,这种信号的自变量用整数来表示,因变量用有限数字中的一个数字来表示。
? 数字信号的优点有很多,数字信号加强了通信的保密性,提高了抗干扰能力,传输差错可以控制,改善了传输质量,便于使用现代数字信号处理计数来对数字信息进行处理,可构建综合数字通信网,综合传递各种消息,使得通行功能增强。数字信号也有它的缺点,它占用频带较宽,技术要求复杂,模数转换时会带来量化误差。
? 将模拟信号转换为数字信号的方法时,通过模数转换器将模拟信号转换为数字信号,它的基本原理时把输入的模拟信号按照规定时间间隔采样,并与一系列标准的数字信号比较,数字信号逐次收敛,直至两种信号相等为止,然后显示出此信号的二进制数。
stm32中的ADC功能
? stm32中使用的时逐次逼近型的模数转换器,具有12位的分辨率。
? 相关寄存器
void ADCx_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
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_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_Cmd(ADC1, ENABLE);
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
u16 Get_ADC_Value(u8 times)
{
u32 temp_val=0;
u8 t;
for(t=0;t<times;t++)
{
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
temp_val+=ADC_GetConversionValue(ADC1);
delay_ms(5);
}
return temp_val/times;
}
本文为百问网韦东山7天物联网智能家居学习总结
|