淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 开源电子网 公众平台:“正点原子” 官方网站:www.alientek.com 联系电话:13922348612 ddddd ALIENTEK 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 《手把手教你学STM32》 ADC实验 适用平台 STM32F1xx 开发板 (正点原子) STM32F4xx 开发板 (正点原子) ddddd 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 目录 ADC库函数配置 1 手把手写ADC实验 2 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com ADC 参考资料: 正点原子探索者STM32F4开发板 《STM32F4开发指南-库函数版本》-第23章 ADC实验 STM32F4xx官方资料: 《STM32F4中文参考手册》-第11章 模数转换(ADC) 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com ADC STM32F40x系列ADC外部通道和引脚对应关系 通道号 ADC1 ADC2 ADC3 通道0 PA0 通道1 PA1 通道2 PA2 通道3 PA3 通道4 PA4 PF6 通道5 PA5 PF7 通道6 PA6 PF8 通道7 PA7 PF9 通道8 PB0 PF10 通道9 PB1 PF3 通道10 PC0 通道11 PC1 通道12 PC2 通道13 PC13 通道14 PC4 PF4 通道15 PC5 PF5 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com ADC 常用库函数 void ADC_CommonInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct); 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); 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com ADC ADC通用初始化函数ADC_CommonInit void ADC_CommonInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct); typedef struct { uint32_t ADC_Mode;//多重ADC模式选择 uint32_t ADC_Prescaler; //ADC预分频 uint32_t ADC_DMAAccessMode; //DMA访问模式 uint32_t ADC_TwoSamplingDelay; //2个采样阶段之间的延迟 }ADC_CommonInitTypeDef; 这些参数用来配置ADC_CCR寄存器的相关参数 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com ADC void ADC_CommonInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct) ADC_CommonInitTypeDef ADC_CommonInitStructure; ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式 ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;//两个采样阶段之间的延迟5个时钟 ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //DMA失能 ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4; ADC_CommonInit(&ADC_CommonInitStructure); 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com ADC ADC初始化函数ADC_Init void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct); typedef struct { uint32_t ADC_Resolution;//ADC分辨率 FunctionalState ADC_ScanConvMode; //是否使用扫描模式。ADC_CR1位8:SCAN位 FunctionalState ADC_ContinuousConvMode; //单次转换OR连续转换:ADC_CR2的位1:CONT uint32_t ADC_ExternalTrigConvEdge; //外部触发使能方式:ADC_CR2的位29:28,EXTEN 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; 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com ADC void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct); ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12位模式 ADC_InitStructure.ADC_ScanConvMode = DISABLE;//非扫描模式 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//关闭连续转换 ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//禁止触发检测,使用软件触发 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐 ADC_InitStructure.ADC_NbrOfConversion = 1;//1个转换在规则序列中 ADC_Init(ADC1, &ADC_InitStructure);//ADC初始化 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com ADC 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的软件转换启动 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com ADC 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_5, 1, ADC_SampleTime_480Cycles); ADC 获取转换结果函数ADC_GetConversionValue uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx); ADC_GetConversionValue(ADC1);//获取ADC1转换结果 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com ADC 硬件连接 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com ADC 实验目的:ADC1的通道5(PA5)进行单次转化 开启PA口时钟和ADC1时钟,设置PA1为模拟输入。 RCC_AHB1PeriphClockCmd (RCC_AHB1Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); GPIO_Init(); ② 复位ADC1,同时设置ADC1分频因子。 ADC_DeInit(); ③ 初始化ADC_CCR寄存器。 ADC_CommonInit(); ④初始化ADC1参数,设置ADC1的工作模式以及规则序列的相关信息。 void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct); ⑤ 使能ADC。 ADC_Cmd(ADC1, ENABLE); ⑥配置规则通道参数: ADC_RegularChannelConfig(); ⑦开启软件转换:ADC_SoftwareStartConvCmd(ADC1); ⑧ 等待转换完成,读取ADC值。 ADC_GetConversionValue(ADC1); 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 谢谢您对“正点原子”团队的支持 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com