历史上的今天
返回首页

历史上的今天

今天是:2025年01月26日(星期日)

2019年01月26日 | STM32->ADC

2019-01-26 来源:eefocus

ADC初始化,以HAL库为例:


    MX_ADC1_Init();           //cube自动生成的初始化结构,会调用HAL_ADC_MspInit()初始化底层寄存器。


    HAL_ADC_ConfigChannel(ADC_HandleTypeDef* hadc, ADC_ChannelConfTypeDef* sConfig) 设置通道参数:


    typedef struct

    {

         uint32_t Channel;                   

         uint32_t Rank;                                         

         uint32_t SamplingTime;      

    }ADC_ChannelConfTypeDef;


校准:


    HAL_ADCEx_Calibration_Start(&hadc1);


启动转换:


    HAL_ADC_Start()                 // 轮询模式

    HAL_ADC_Start_IT(),             // 中断模式

    HAL_ADC_Start_DMA()             // DMA模式


在HAL库中,对应方式的接收就是将Start改为Stop。




获取数据:


HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length)


DMA方式需要一个32位pData数组来接收,而不是16位,轮询方式:


    HAL_ADC_Start(&hadc1);


    while(__HAL_ADC_GET_FLAG(&hadc1,ADC_FLAG_EOC)==RESET);

    uint16_t adc= HAL_ADC_GetValue(&hadc1);


    HAL_ADC_GetValue在单通道转换没有问题,多通道时只会返回rank等级最高的数据,所以无法简单获取多个通道的AD值,常见的多通道方式可以是每次采集完成都通过HAL_ADC_ConfigChannel(&hadc1, &sConfig)重新选择通道,这个过程可以是在轮询中完成,也可以是在AD中断函数中中完成。但在所有的实现方式中,都应该在初始化ADC的时候,只选择单通道: 


    hadc1.Init.NbrOfConversion = 1;

    HAL_ADC_Init(&hadc1);


{

  uint32_t DataAlign;             /*!

  uint32_t ScanConvMode;          /*!< one channel converted, the one defined in rank 1.    多通道下需要使能

  uint32_t ContinuousConvMode;    /*!<一次触发,组内多通道连续转换

  uint32_t NbrOfConversion;       /*!< Min_Data = 1 and Max_Data = 16. */     通道数

  uint32_t DiscontinuousConvMode; /*!< This parameter can be set to ENABLE or DISABLE. */ 一次触发,大组内的小组转换一次

  uint32_t NbrOfDiscConversion;   /*!<  Min_Data = 1 and Max_Data = 8. */   大组内多少通道分为一个小组

  uint32_t ExternalTrigConv;       触发方式

}ADC_InitTypeDef;




Discontinuous mode模式(DISCEN=1)下,需要硬件或软件的触发事件去启动定义在一个序列中的每次转换。DISCEN=0时,一个硬件或软件的触发事件就可以启动定义在一个序列中的所有转换,任何触发事件都会重新开始完整的序列转换。


在STM32中,启动的方式:


• Setting the ADSTART bit in the ADC_CR register  

• Hardware trigger event


触发方式:


ADC_ExternalTrigConv_T1_CC1、


ADC_ExternalTrigConv_T1_CC2、


ADC_ExternalTrigConv_T1_CC3、


ADC_ExternalTrigConv_T2_CC2、


ADC_ExternalTrigConv_T3_TRGO、


ADC_ExternalTrigConv_T4_CC4、


ADC_ExternalTrigConv_EXT_IT11、


软件触发:ADC_SoftwareStartConvCmd(ADC1, ENABLE);


注入通道,选择EXTI_IT15和TIM8_CC4作为外部触发事件

规则通道,选择EXTI_IT11和TIM8_TRGO作为外部触发事件

上一篇:STM32->DMA

下一篇:STM32-HAL

推荐阅读

史海拾趣

DeLorme公司的发展小趣事

随着公司业务的不断发展,DeLorme公司开始积极寻求市场扩张的机会。他们通过与国外知名品牌的合作,将自己的产品推向了国际市场。同时,他们还积极参与国际性的户外活动和赛事,通过这些活动提高品牌知名度和影响力。在国际市场的竞争中,DeLorme公司凭借其独特的技术优势和优质的产品质量逐渐获得了认可。

HEICO Corporation公司的发展小趣事

随着业务的不断发展,HEICO Corporation开始在全球范围内布局其电子业务。公司建立了完善的供应链管理体系,与全球供应商建立了长期稳定的合作关系。这种全球化布局不仅有助于HEICO获取更优质的原材料和零部件,还降低了生产成本和风险。同时,HEICO还注重本地化生产和服务,以满足不同地区客户的需求。通过优化供应链管理和提升本地化服务能力,HEICO在电子行业中保持了强劲的增长势头。

Electronic Sensor + Resistor GmbH公司的发展小趣事

Electronic Sensor + Resistor GmbH(简称ESR公司)的创立源于两位电子工程师的远见卓识。他们发现市场上对于高精度电子传感器和定制电阻器的需求日益增长,但现有产品往往无法满足特定应用的性能要求。于是,ESR公司应运而生,专注于研发和生产高性能的电子传感器和电阻器。

在创业初期,ESR公司面临着资金、技术和市场的三重挑战。但凭借其卓越的研发实力和坚持不懈的市场推广,公司逐渐在市场上树立起高品质、高可靠性的品牌形象。通过与多家知名企业的合作,ESR公司的产品逐渐获得了市场的认可。

CONTEC公司的发展小趣事

1996年,CONTEC公司在秦皇岛经济技术开发区成立,初期便自主掌握了心电、脑电生产技术。这一技术的掌握为公司奠定了坚实的基础,使得其在医疗行业设备领域开始崭露头角。随着技术的不断进步和市场的扩大,公司逐渐发展成为国内领先的医疗设备供应商之一。

DFI公司的发展小趣事

近年来,随着智能医疗和金融科技等新兴领域的兴起,DFI看到了新的发展机遇。公司开始将这些领域作为重点发展方向,投入大量资源进行研发和创新。通过与合作伙伴的紧密合作,DFI成功推出了一系列具有创新性的智能医疗和金融科技产品。这些产品不仅为客户提供了更便捷、更高效的服务体验,也为DFI带来了新的增长点。随着这些新兴领域的不断发展壮大,DFI有望在未来实现更大的突破和发展。

请注意,以上故事均为虚构,旨在展示DFI公司可能的发展历程和业务活动。实际情况可能有所不同,具体信息请参考DFI公司的官方资料。

飞虹(FeiHong)公司的发展小趣事

2013年8月26日,苏州锋驰微电子有限公司在江苏省苏州市张家港市正式成立,法定代表人为Fang Gang Feng。公司初期便明确了以集成电路IP、物联网、计算机软硬件、电子产品、集成电路及应用电路方案技术的设计、研发为核心业务的发展方向。在成立之初,面对激烈的市场竞争,苏州锋驰凭借对技术的执着追求和敏锐的市场洞察力,逐步在行业内站稳脚跟。

问答坊 | AI 解惑

冒昧的问一些如何根据元件大小选取元件的封装形式的问题

各位达人,我在做PCB板的时候对于如何根据元件数值选取元件封装时感到很吃力,举个例子 1.在选取三极管的时候,什么时候选TO-92A,什么时候选TO-92B? 2.一个电容比如一个100N/250V的电容,选取的是RAD0.3,这个电压的要求是不是贴片难以达到, ...…

查看全部问答>

关于TCL自动化测试的问题

现在要测试的文件比如有test.c和test.h 我需要用TCL写一个自动化测试脚本,为test.c中的变量赋值并运行 请问这个脚本该如何写,最好能给个示例,谢谢…

查看全部问答>

MC55连接网络问题,高分

当做为服务端时,测试过程, AT^SICS=0,conType,GPRS0 OK AT^SICS=0,apn,cmnet OK AT^SISS=1,srvType,socket OK AT^SISS=1,conId,0 OK AT^SISS=1,address,\"socktcp://listener:1000\" OK AT^SISO=1 OK at^siso? ^SISO ...…

查看全部问答>

请问各位大侠SRAM与DRAM的区别?

请问各位大侠SRAM与DRAM的区别? 是不是DRAM比SRAM访问速度要快, 两个是不同的存储介质,会不会是内存的某一块是SRAM,另一块是DRAM,只是地址不一样? 请大侠指点指点!谢谢!…

查看全部问答>

模拟电路上下册

《模拟电路上下册》 …

查看全部问答>

嵌入式单片机安卓画板研发和培训,高薪包就业!

嵌入式单片机安卓画板研发和培训,高薪包就业! 改变人生轨迹 规划职业蓝图! ----信盈达成就您的高薪梦想!         技术顾问:欧阳老师15989362803,QQ:877037118     信盈达科技有限公司专业提供嵌入式Arm+Lin ...…

查看全部问答>

两块LPC800 miniKIT换有关MSP430的东东

本人有四块LPC800miniKIT 欲拿出两块LPC800miniKIT换有关MSP430的东东,如果价值比较高,可以再加上加别的开发板 …

查看全部问答>