标签:arc gpio get value div2 规则 status smo rip
#include "sys.h"
#include "delay.h"
#include "adc.h"
//PF6 ADC3 通道4
void 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~4
uint32_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~4
Rank: 1
ADC_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);
}
标签:arc gpio get value div2 规则 status smo rip
原文地址:http://www.cnblogs.com/baoshulin/p/6217714.html