个人网站怎样申请icp,做网站的镜像是什么意思,网站建设 域名业务 邮箱,本科毕业设计代做网站【F5265ADC简介】 ADC 是 12 位的逐次逼近型#xff08;SAR#xff09;模拟数字转换器#xff0c;可以将模拟信号转换成数字信号。ADC 有可测量内部或外部信号源#xff0c;其中 ADC1 有 14 路外部输入通道#xff0c;ADC2 有 17 路外部输入通道和 2 路内部通道。这些 ADC…【F5265ADC简介】 ADC 是 12 位的逐次逼近型SAR模拟数字转换器可以将模拟信号转换成数字信号。ADC 有可测量内部或外部信号源其中 ADC1 有 14 路外部输入通道ADC2 有 17 路外部输入通道和 2 路内部通道。这些 ADC 的通道可以单次、单周期和连续进行转换。根据不同的方式又可以选择普通通道转换、任意通道转换。 ADC 的最大输入时钟为 48MHz它是由 APB2 时钟(PCLK2)分频产生 【功能框图】
T_SENSOR温度传感器通道在 ADC2 的 AIN17 通道V_SENSOR内部参考电压通道在ADC2 的 AIN18 通道。 本篇就是分享如何获取T_SENSOR温度传感器通道 与V_SENSOR内部电压并显示在LCD屏上。 【ADC配置与初始化】 根据示例中代码初始化如下
/************************************************************************************************************************ brief* note none* param none* retval none*********************************************************************************************************************/
void ADC_Configure(void)
{ADC_InitTypeDef ADC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2, ENABLE);ADC_CalibrationConfig(ADC2, 0x1FE);ADC_StructInit(ADC_InitStructure);ADC_InitStructure.ADC_Resolution ADC_Resolution_12b;ADC_InitStructure.ADC_Prescaler ADC_Prescaler_16;ADC_InitStructure.ADC_Mode ADC_Mode_Scan;ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right;ADC_Init(ADC2, ADC_InitStructure);ADC_SampleTimeConfig(ADC2, ADC_Channel_TempSensor, ADC_SampleTime_240_5);ADC_SampleTimeConfig(ADC2, ADC_Channel_VoltReference, ADC_SampleTime_240_5);ADC_AnyChannelNumCfg(ADC2, 1);ADC_AnyChannelSelect(ADC2, ADC_AnyChannel_0, ADC_Channel_TempSensor);ADC_AnyChannelSelect(ADC2, ADC_AnyChannel_1, ADC_Channel_VoltReference);ADC_AnyChannelCmd(ADC2, ENABLE);ADC_TempSensorCmd(ENABLE);ADC_VrefSensorCmd(ENABLE);ADC_Cmd(ADC2, ENABLE);
}1、使能 ADC 时钟首先使用 RCC_APB2PeriphClockCmd 函数使能 ADC2 的时钟这是使用 ADC2 模块的前提。 2、ADC_CalibrationConfig(ADC2, 0x1FE); 在 ADC 初始化之前配置 ADC 校准时钟。PRECAL 必须为偶数范围从 0 到 0x1FF。 3、接着配置ADC为12位16分频单周期扫描模式扫描结果右对齐模式。 4、配置两个转换通道、转换时间 5、配置adc 任何通道转换最大数量为1 6、配置从通道 17 和通道 18 的任何通道作为任何通道模式操作中的输入通道。 7、分别使能转换通道、开启温度、内部电压转换。 8、最后开启ADC2。 【温度转换】 在用户手册中有以下说明 内置的温度传感器仅用来检测器件内部的温度变化TA。 因此需要先获取V25 uint16_t OffsetT (*(volatile uint32_t *)(0x1FFFF7FC) 0xFFFF0000) 0x10; T(℃)(( Value * VDDA- V25 3300) /(4096Avg_Slope))25 VDDAADC 当前采样时的 VDDA 电压单位 mV ValueADC 的转换结果数据 Avg_Slope 温度与电压曲线的平均斜率以 mV/℃ 或 μV/℃ 表示 采集温度并转换值如下 /* Internal temperature sensor */Value ADC_GetAnyChannelConvertedValue(ADC2, ADC_AnyChannel_0);Temperature 25 ((float)Value * (float)Voltage * (float)1000 - (float)OffsetT * (float)3300) / ((float)4096 * (float)AVG_SLOPE);【内部电压】 转换公式为 Vref (ADC_ADDR*3.3)/ 4096 获取代码为 /* Internal voltage sensor */Value ADC_GetAnyChannelConvertedValue(ADC2, ADC_AnyChannel_1);Voltage (float)(OffsetV) * (float)3.3 / (float)Value;【获取电压、温度值代码】
/************************************************************************************************************************ brief* note none* param none* retval none*********************************************************************************************************************/
void ADC_InternalTemperatureSensor_Sample(void)
{uint16_t Value;char lcd_buff[64];float Voltage, Temperature;uint16_t OffsetV (*(volatile uint32_t *)(0x1FFFF7FC) 0x0000FFFF) 0x00;uint16_t OffsetT (*(volatile uint32_t *)(0x1FFFF7FC) 0xFFFF0000) 0x10;printf(\r\nTest %s, __FUNCTION__);ADC_Configure();while (1){ADC_SoftwareStartConvCmd(ADC2, ENABLE);while (RESET ADC_GetFlagStatus(ADC2, ADC_FLAG_EOS)){}ADC_ClearFlag(ADC2, ADC_FLAG_EOS);/* Internal voltage sensor */Value ADC_GetAnyChannelConvertedValue(ADC2, ADC_AnyChannel_1);Voltage (float)(OffsetV) * (float)3.3 / (float)Value;/* Internal temperature sensor */Value ADC_GetAnyChannelConvertedValue(ADC2, ADC_AnyChannel_0);Temperature 25 ((float)Value * (float)Voltage * (float)1000 - (float)OffsetT * (float)3300) / ((float)4096 * (float)AVG_SLOPE);printf(\r\nVDD : %0.2f, Temperature : %0.2f, Voltage, Temperature);sprintf(lcd_buff, VDD:%.2fV,Voltage);LcdShowString(10,48,lcd_buff,WHITE,BLACK,16);sprintf(lcd_buff, Temp:%.2f,Temperature);LcdShowString(10,64,lcd_buff,WHITE,BLACK,16);PLATFORM_DelayMS(500);}
}【实验效果】