首页 > 代码库 > ADC
ADC
#include "sys.h"#include "delay.h"#include "adc.h"//PF6 ADC3 通道4void my_adc3_init(){ ADC_InitTypeDef ADC_InitStruct; GPIO_InitTypeDef GPIO_InitStruct; ADC_CommonInitTypeDef ADC_CommonStruct; //1.打开ADC时钏 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); //配置成模拟模式 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AN; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOF, &GPIO_InitStruct); /* 配置CR1 CR2寄存器 每个ADC控制器,配置对应的CR1,CR2 使用 void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct) 来初始化ADC控制器 ADC_TypeDef* ADCx 选择对应的控制器 uint32_t ADC_Resolution; 功能:配置分辨率 范围:ADC_Resolution_6b ~12 寄存器:CR1 24~25位 FunctionalState ADC_ScanConvMode; 功能:是否开启扫描模式 范围:ENABLE DISABLE FunctionalState ADC_ContinuousConvMode; 功能:是否开启连续模式 范围:ENABLE DISALBE uint32_t ADC_ExternalTrigConvEdge; 功能:触发方式 范围:ADC_ExternalTrigConvEdge_None 寄存器:CR2 28~29位 uint32_t ADC_ExternalTrigConv; 功能:触发源的选择 范围:……。 寄存器:CR2 24~27 uint32_t ADC_DataAlign; 功能:数据对齐方式 范围:ADC_DataAlign_Right ADC_DataAlign_Left 寄存器CR2 11 uint8_t ADC_NbrOfConversion; 功能:规则通道的选择 范围: 寄存器:SQR1寄存器 20-23位 */ ADC_InitStruct.ADC_ContinuousConvMode = DISABLE; ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right; //ADC_InitStruct.ADC_ExternalTrigConv = ADC_InitStruct.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; ADC_InitStruct.ADC_NbrOfConversion = 1; //1个规则通道 ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b; ADC_InitStruct.ADC_ScanConvMode = DISABLE; ADC_Init(ADC3, &ADC_InitStruct); /*void ADC_CommonInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct);主要配置通用寄存器 CCR,配置该寄存器三个ADC控制器都有效uint32_t ADC_Mode;功能:配置ADC模式范围:ADC_Mode_Independent ……。寄存器:CCR 0~4uint32_t ADC_Prescaler;功能:配置分频系数范围:ADC_Prescaler_Div2~8 最后分率不能超过36MHz 寄存器:16~17位uint32_t ADC_DMAAccessMode;功能:是否开启DMA模式范围:ADC_DMAAccessMode_Disabled寄存器:CCR 14~15位uint32_t ADC_TwoSamplingDelay;功能:两次采样延迟时间范围: ADC_TwoSamplingDelay_5Cycles~20寄存器CCR 8~11位*/ ADC_CommonStruct.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; ADC_CommonStruct.ADC_Mode = ADC_Mode_Independent; ADC_CommonStruct.ADC_Prescaler = ADC_Prescaler_Div4; ADC_CommonStruct.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; ADC_CommonInit(&ADC_CommonStruct); //使能ADC控制器 //CR2 0位 开启ADC控制器 ADC_Cmd(ADC3, ENABLE); //规则通道的配置 ADC_RegularChannelConfig(ADC3,ADC_Channel_4,1 ,ADC_SampleTime_480Cycles);/*void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)ADC_TypeDef* ADCx 1~3通道:ADC_Channel_0~4Rank: 1ADC_SampleTime_3Cycles~480 周期转换周期*/ }//手动开启ADC的转换uint16_t get_val(){/* 开启转换 void ADC_SoftwareStartConv(ADC_TypeDef* ADCx); */ //ADC_SoftwareStartConvCmd; ADC_SoftwareStartConv(ADC3); //转换ADC值,需要一定时间 //delay_ms(10);/* FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);*/ //等待时间必须要有 while(ADC_GetFlagStatus(ADC3, ADC_FLAG_EOC) == RESET) { } return ADC_GetConversionValue(ADC3);}
ADC
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。