文章目录
- 1. ADC
- 2. STM32F10x ADC特点
- **3.STM32F10x大容量芯片带3个ADC控制器**![在这里插入图片描述](https://img-blog.csdnimg.cn/20210222205701845.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21hbnRvdXlvdXlvdQ==,size_16,color_FFFFFF,t_70)
- 4. ADC引脚
- 5. ADC框图
- 6.STM32通道组
- 7.单次转化 VS 连续转换
- 8.扫描模式
- 9.ADC中断
- 10.ADC时钟配置
- 11.ADC_CR1寄存器
- 12.ADC_CR2寄存器
- 13.数据对齐方式
- 14.ADC_SMPR1寄存器
- 14.ADC_SMPR2寄存器
- 15.ADC的采样时间
- 16.ADC_SQR1/SQR2/SQR3规则序列寄存器
- 17.ADC_JSQR注入系列寄存器
- 18.ADC_DR规则通道数据寄存器
- 19.ADC_JDR注入通道数据寄存器
- 20.ADC_SR状态寄存器
- 21.常用库函数
1. ADC
Analog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。
典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。
2. STM32F10x ADC特点
3.STM32F10x大容量芯片带3个ADC控制器![在这里插入图片描述](https://img-blog.csdnimg.cn/20210222205701845.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21hbnRvdXlvdXlvdQ==,size_16,color_FFFFFF,t_70)
其中144脚芯片因为带PF脚,所以多5个通道,为21个外部通道。
小于144脚芯片只有16个外部通道。
4. ADC引脚
5. ADC框图
6.STM32通道组
STM32F1的ADC的各通道可以单次,连续,扫描
或者间断模式执行。
7.单次转化 VS 连续转换
8.扫描模式
9.ADC中断
10.ADC时钟配置
注:不要让ADC时钟超过14MHz,否则可能不准。
11.ADC_CR1寄存器
在扫描模式下,由ADC_SQRx或者ADC_JSQRx寄存器选中的通道被转换。如果设置了EOCIE或者JEOCIE,在最后一个通道转换完毕后才会产生EOC或者JEOC中断。
12.ADC_CR2寄存器
13.数据对齐方式
14.ADC_SMPR1寄存器
14.ADC_SMPR2寄存器
15.ADC的采样时间
最小采样时间1us(ADC时钟=14MHz,采样周期为1.5周期下得到)
16.ADC_SQR1/SQR2/SQR3规则序列寄存器
17.ADC_JSQR注入系列寄存器
18.ADC_DR规则通道数据寄存器
19.ADC_JDR注入通道数据寄存器
20.ADC_SR状态寄存器
21.常用库函数
void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);
void ADC_DeInit(ADC_TypeDef* ADCx)
void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState);
void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);
uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);
void ADC_ResetCalibration(ADC_TypeDef* ADCx);
FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx);
void ADC_StartCalibration(ADC_TypeDef* ADCx);
FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx);
ADC初始化函数ADC_Init
void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);
typedef struct
{
uint32_t ADC_Mode;//ADC模式:配置ADC_CR1寄存器的位[19:16] :DUALMODE[3:0]位
FunctionalState ADC_ScanConvMode; //是否使用扫描模式。ADC_CR1位8:SCAN位
FunctionalState ADC_ContinuousConvMode; //单次转换OR连续转换:ADC_CR2的位1:CONT
uint32_t ADC_ExternalTrigConv; //触发方式:ADC_CR2的位[19:17] :EXTSEL[2:0]
uint32_t ADC_DataAlign; //对齐方式:左对齐还是右对齐:ADC_CR2的位11:ALIGN
uint8_t ADC_NbrOfChannel;//规则通道序列长度:ADC_SQR1的位[23:20]: L[3:0]
}ADC_InitTypeDef;
typedef struct
{
uint32_t ADC_Mode;//ADC模式:配置ADC_CR1寄存器的位[19:16] :DUALMODE[3:0]位
FunctionalState ADC_ScanConvMode; //是否使用扫描模式。ADC_CR1位8:SCAN位
FunctionalState ADC_ContinuousConvMode; //单次转换OR连续转换:ADC_CR2的位1:CONT
uint32_t ADC_ExternalTrigConv; //触发方式:ADC_CR2的位[19:17] :EXTSEL[2:0]
uint32_t ADC_DataAlign; //对齐方式:左对齐还是右对齐:ADC_CR2的位11:ALIGN
uint8_t ADC_NbrOfChannel;//规则通道序列长度:ADC_SQR1的位[23:20]: L[3:0]
}ADC_InitTypeDef;
ADC使能函数 ADC_Cmd();
void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);
ADC_Cmd(ADC1, ENABLE); //使能指定的ADC1
ADC使能软件转换函数 ADC_SoftwareStartConvCmd
void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能ADC1的软件转换启动
ADC 规则通道配置函数ADC_RegularChannelConfig
void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5 );
ADC 获取转换结果函数ADC_GetConversionValue
uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);
ADC_GetConversionValue(ADC1);//获取ADC1转换结果
22.实验目的:ADC1的通道1(PA1)进行单次转化