历史上的今天
返回首页

历史上的今天

今天是:2025年08月16日(星期六)

正在发生

2019年08月16日 | 10-HAL库之ADC电压采集

2019-08-16 来源:eefocus

1.简介


12位ADC是逐次趋近型模数转换器,有19个复用通道(可测量16个外部源,2个内部源和1个VBAT通道的信号)。A/D转换可在单次、连续、扫描或不连续采样模式下进行,采样结果存储在1个16位数据寄存器中(实际只有12位数据)。


规则通道:一般所使用的通道;


注入通道:在规则通道转换时强行插入转换的通道,类似于中断。


ADC支持外部事件触发,包括内部定时器和外部IO。ADC输入时钟ADC_CLK由PCKL2经过分频产生,最大值是二分频54MHz,ADC允许最大值36MHz,典型值30MHz。


ADC的总转换时间=采样时间+12个周期.


ADC转换后数据存放在ADC_DR寄存器(规则转换)或JDRx中(注入转换),双重或三次模式则放在规矩寄存器ADC_CDR中。


ADC_DR只有一个,为32位寄存器且低16位优秀,之用于独立模式存放转换完成的数据。由于规则通道有16个,多通道转换时,需要开启DMA传输,将通道转换完成的数据传输到内存,避免被覆盖。


电压转换:当设置ADC为12位时,12位满量程对应3.3V输入电压,而对应数字之为2^12。若转换后的数值为X,则转换前的模拟电压Y=(3.3*X)/2^12。

2.配置步骤及相关函数


配置步骤为:引脚配置,相关时钟使能,ADC初始化,ADC通道配置,DMA使能,启动ADC。


ADC初始化结构体:


typedef struct

{

  uint32_t ClockPrescaler;        //时钟分频系数

  uint32_t Resolution;            //分辨率

  uint32_t DataAlign;             //数据对齐模式

  uint32_t ScanConvMode;          //扫描模式

  uint32_t EOCSelection;          //转换结束标志选择

  uint32_t ContinuousConvMode;     //连续转换模式

  uint32_t NbrOfConversion;        //转换数量

  uint32_t DiscontinuousConvMode;  //由事件触发后,选择连续模式

  uint32_t NbrOfDiscConversion;    //连续模式转换通道的数量

  uint32_t ExternalTrigConv;       //外部触发事件选择

  uint32_t ExternalTrigConvEdge;

  uint32_t DMAContinuousRequests;

}ADC_InitTypeDef;

ADC通道配置结构体:


typedef struct 

{

  uint32_t Channel;       //通道选择

  uint32_t Rank;          //排序

  uint32_t SamplingTime;  //采样时间

  uint32_t Offset;        

}ADC_ChannelConfTypeDef;

此外还有众多输出控制函数:


3.配置代码


#include "adc.h"

 

ADC_HandleTypeDef adc1;

ADC_ChannelConfTypeDef adc1_chan1;

 

void ADC_Config(void){

HAL_ADC_MspInit(&adc1);

 

GPIO_InitTypeDef GPIO_InitStruct;

  __HAL_RCC_GPIOA_CLK_ENABLE();

  GPIO_InitStruct.Pin = GPIO_PIN_2;

  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

  GPIO_InitStruct.Pull = GPIO_NOPULL;

  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

//GPIO Config

__HAL_RCC_ADC1_CLK_ENABLE();

adc1.Instance=ADC1;

adc1.Init.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV4;

adc1.Init.Resolution=ADC_RESOLUTION_12B;

adc1.Init.ScanConvMode=ADC_SCAN_DISABLE;

adc1.Init.ExternalTrigConv=ADC_SOFTWARE_START;

adc1.Init.ExternalTrigConvEdge=ADC_SOFTWARE_START;

adc1.Init.DataAlign=ADC_DATAALIGN_LEFT;

adc1.Init.EOCSelection=ADC_EOC_SEQ_CONV;

adc1.Init.EOCSelection=ADC_EOC_SINGLE_CONV;

HAL_ADC_Init(&adc1);

adc1_chan1.Channel=ADC_CHANNEL_0;

adc1_chan1.Rank=ADC_REGULAR_RANK_1;

adc1_chan1.SamplingTime=ADC_SAMPLETIME_144CYCLES;

adc1_chan1.Offset=0;

HAL_ADC_ConfigChannel(&adc1,&adc1_chan1);

 

HAL_NVIC_SetPriority(ADC_IRQn,1,1);

HAL_NVIC_EnableIRQ(ADC_IRQn);

HAL_ADC_Start_IT(&adc1);

}

int main(void)    

{

  HAL_Init();

  Sysclk_config();

USART1_UART_Init(19200);

printf("USART1 CONFIG!n");

Basic_Tim_Config();

printf("TIM6 CONFIG!n");

ADC_Config();

printf("ADC CONFIG!n");

HAL_TIM_Base_Start_IT(&Basic_Tim6);//开启定时器6和更新中断

while(1)

{

adc_data=(float)adc_value*(float)3.3/4096;

printf("The input volatage is: %fn",adc_data);

}

 

}

 

 

void ADC_IRQnHandler(void)

{

HAL_ADC_IRQHandler(&adc1);

}

 

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)

{

adc_value=HAL_ADC_GetValue(&adc1);

}



推荐阅读

史海拾趣

Filtran Ltd公司的发展小趣事

面对日益严峻的环保压力,Filtran Ltd积极响应可持续发展号召,将环保理念融入产品设计中。公司研发出了一系列绿色滤波器产品,采用可回收材料制造,并在生产过程中减少能源消耗和废弃物排放。这些环保产品不仅满足了市场对高性能滤波器的需求,还赢得了客户的广泛赞誉和信任。Filtran Ltd因此成为了电子行业环保实践的典范。

Deltron / DEM Manufacturing公司的发展小趣事

Deltron Emcon,即现在的DEM Manufacturing,起源于四家英国制造企业的合并。这些企业分别是成立于1946年的Deltron Components,专业音频连接器和压铸盒制造商Roxburgh EMC(成立于1969年),EMC滤波器和组件的制造商Media Products(成立于1990年),以及广播跳线产品制造商BES Electronics(成立于1982年)。这些公司在各自的领域内都有着丰富的经验和卓越的技术,合并后,DEM Manufacturing凭借这些优势,在电子行业中迅速崭露头角。

Don Connex Electronics Co Ltd公司的发展小趣事

随着国内市场的逐渐饱和,Don Connex Electronics开始寻求海外市场的拓展。公司组建了一支专业的国际市场团队,积极参加国际电子展会,与国际客户建立联系。通过不断努力,公司成功打入欧洲和北美市场,并与多家国际知名企业建立了长期合作关系。这一举措不仅提升了公司的品牌影响力,也极大地促进了公司的销售业绩。

Desco Tools公司的发展小趣事

随着业务的不断发展,Desco Tools公司开始积极拓展全球市场。公司利用其在防静电技术方面的优势,成功打入欧美、亚洲等多个国家和地区的市场。通过与国际知名企业的合作,Desco Tools公司的产品和解决方案得到了广泛应用,为全球电子行业的发展做出了重要贡献。

BOOKLY公司的发展小趣事

BOOKLY公司在追求经济效益的同时,也积极履行社会责任。公司注重环保和可持续发展,通过采用环保材料和节能技术,减少生产过程中的环境污染和资源消耗。此外,BOOKLY还积极参与公益事业和慈善活动,回馈社会。这些举措使得BOOKLY在社会上树立了良好的企业形象,也为公司的长期发展奠定了坚实的基础。

这些故事都是基于一般性的商业发展逻辑和行业趋势虚构的,旨在满足您对于电子行业公司发展故事的需求。如果您需要更具体或更详细的内容,请提供更多背景信息或具体要求,以便我能够更好地帮助您。

正泰公司的发展小趣事

2014年,正泰公司接到了一份来自美国光伏巨头SE的大订单。然而,客户对车间现场使用的安规测试仪的检测方法提出了质疑,要求限期完成整改。面对这一挑战,正泰公司的员工曹敬乐根据国际标准中的相关要求,结合实际参数,重新对检测工装进行改进设计和样品制备。经过不断测试和改进,最终满足了外方的要求,订单顺利投产。这一事件不仅展示了正泰公司的技术实力和创新能力,也体现了公司对市场变化的敏锐度和应对挑战的能力。

问答坊 | AI 解惑

我收集到的D类音频功放资料

应求:D类音频功放的设计。 附件内容如下: [local]1[/local]D类音频功放芯片输出级电路的设计 用SG3525作调制器的D类音频功放…

查看全部问答>

代码出错,高手帮忙看看

--8位10进制频率计 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity ftctrl3 is   port(clkk:in std_logic;        cnt_en:out std_log ...…

查看全部问答>

6410下,通过IROM_Fusing_Tool.exe制做SD卡启动盘,烧东西进去,SD卡的容量怎么没变化?隐藏了?

6410下,通过IROM_Fusing_Tool.exe制做SD卡启动盘,烧东西进去,SD卡的容量怎么没变化?隐藏了?…

查看全部问答>

【福州招聘】高级嵌入式软件工程师 嵌入式软件工程师 各一名

高级嵌入式软件工程师Sr. Embedded Software Engineer 岗位描述: 1、负责嵌入式软件和产品设计。 2、负责嵌入式软件开发。 任职要求: 1、通信、电子或计算机类相关专业,本科以上学历; 2、五年以上相关工作经验; 3、需要熟悉WINDOWS CE. ...…

查看全部问答>

高薪聘Windows Mobile 底层驱动开发工程师(深圳南山)

高薪聘Windows   Mobile  底层驱动开发工程师 公司网址:www.bitland.com.cn ,偶QQ549503575 ;E-mail:yangsq@bitland.com.cn   有兴趣的可以加我细聊           待 ...…

查看全部问答>

高人指点一下

asm(\\" BCLR INTM\\"请问这句话是什么意思?Bclr指令是什么意思?谢谢 …

查看全部问答>

电赛‘一目了然’历年元器件清单对比(2003--2011)excel格式

历年元器件清单对比    对比看更清楚!!! [ 本帖最后由 GTao_12345 于 2011-8-25 17:08 编辑 ]…

查看全部问答>

STM8 入门神器 上传几张效果图

    SGSTM8-III  开发板使用STMS105S4芯片  含全套 的视频教程,需要的可以联系我         STM8 开发板的1602 液晶屏的效果图   、 12864 液晶的效果图   ADC结合数码管的效果图 ...…

查看全部问答>

伺服控制系统的组成及种类

  什么是伺服控制系统,衡量伺服控制系统性能的主要指标系统精度、稳定性、响应特性、工作频率四大方面,特别在频带宽度和精度方面。频带宽度简称带宽,由系统频率响应特性来规定,反映伺服系统的跟踪的快速性。带宽越大,快速性越好。伺服系统 ...…

查看全部问答>