本文主要是介绍#天空星ADC,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、使用ADC
PA5------------------------ADC1-------------------channel5
二、记录
1.数据对齐
2.数据位数(分辨率)
3.采样间隔
4.采样时钟分频(40MHZ以下)
5.转换外部触发源,外部触发边沿
6.转换通道数
三、代码
/** 立创开发板软硬件资料与相关扩展板软硬件资料官网全部开源* 开发板官网:www.lckfb.com* 技术支持常驻论坛,任何技术问题欢迎随时交流学习* 立创论坛:club.szlcsc.com* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!* 不靠卖板赚钱,以培养中国工程师为己任*/
#include "board.h"
#include "bsp_uart.h"
#include "stdio.h"
#include "sys.h"uint16_t adc_value=0;
int main(void)
{board_init();uart1_init(115200);//1.配置ADC的GPIOGPIO_InitTypeDef GPIO_InitStructure;//2.打开时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; //模拟引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(GPIOA, &GPIO_InitStructure);//3.配置ADC公共配置ADC_CommonInitTypeDef ADC_CommonInitStructure;ADC_CommonInitStructure.ADC_DMAAccessMode=ADC_DMAAccessMode_Disabled; //禁用DMA通道ADC_CommonInitStructure.ADC_Mode=ADC_Mode_Independent; //独立模式(单通道扫描,不会分时复用扫描其他通道)ADC_CommonInitStructure.ADC_Prescaler=ADC_Prescaler_Div4; //84MHZ/4=21MHZADC_CommonInitStructure.ADC_TwoSamplingDelay=ADC_TwoSamplingDelay_5Cycles; //采样时间间隔5个采样周期ADC_CommonInit(&ADC_CommonInitStructure); //4.配置ADCADC_InitTypeDef ADC_InitStructure;//5.打开ADC的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);ADC_InitStructure.ADC_ContinuousConvMode=DISABLE; //禁止连续转换ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right; //数据右对齐ADC_InitStructure.ADC_ExternalTrigConvEdge=ADC_ExternalTrigConvEdge_None; //无外部边沿触发转换ADC_InitStructure.ADC_NbrOfConversion=1; //只有1路转换ADC_InitStructure.ADC_Resolution=ADC_Resolution_12b; //数据位12位ADC_InitStructure.ADC_ScanConvMode=DISABLE; //禁止多路扫描ADC_Init(ADC1,&ADC_InitStructure);//6.使能ADCADC_Cmd(ADC1,ENABLE);while(1){ //7.配置采集通道ADC_RegularChannelConfig(ADC1,ADC_Channel_5,1,ADC_SampleTime_480Cycles);//8.软件打开ADCADC_SoftwareStartConv(ADC1);//9.检测ADC是否转换完成if(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==SET){adc_value=ADC_GetConversionValue(ADC1);printf("the adc value is %d\r\n",adc_value);printf("the voltage is %f mv\r\n",((float)adc_value)*0.8056640625); //0.8056640625=3300/4096ADC_ClearFlag(ADC1,ADC_FLAG_EOC); //清0转换完成标志位}delay_ms(1000); }}
这篇关于#天空星ADC的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!