完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
规则 和 注入 是两类通道,不是模式。
ADC时钟 如果只用规则通道而不用注入通道,则ADC时钟与AHB没有约束关系。 1. ADC的启动 1.1 退出深度掉电模式和ADC稳压器的开启 使用ADC的第一步就是退出“深度掉电模式”,即ADC-》CR中的DEEPPWD = 0; 然后使能稳压器,即ADC-》CR中的ADVREGEN = 1; 等待稳压器启动,具体启动时间参见数据手册。(G474数据手册写的是20us )数据手册第146页 DM00431551_ENV3 ADC1-》CR &= ~ADC_CR_DEEPPWD;//退出掉电模式 ADC1-》CR |= ADC_CR_ADVREGEN;//使能稳压器 for (i = 0; i 《 0xffff; i++)//延时等待稳压器稳定 { /* code */ } 1.2 选择输入模式 ADC-》DIFSEL 模式选择寄存器 中选择 差分输入或者单端输入模式。 ADC1-》DIFSEL = (ADC1-》DIFSEL & 0xfff80000)//模式选择寄存器 // |ADC_DIFSEL_DIFSEL_18 //bit18:【0|单端输入模式】【1|差分输入模式】 // |ADC_DIFSEL_DIFSEL_17 // |ADC_DIFSEL_DIFSEL_16 // |ADC_DIFSEL_DIFSEL_15 // |ADC_DIFSEL_DIFSEL_14 // |ADC_DIFSEL_DIFSEL_13 // |ADC_DIFSEL_DIFSEL_12 // |ADC_DIFSEL_DIFSEL_11 // |ADC_DIFSEL_DIFSEL_10 // |ADC_DIFSEL_DIFSEL_9 // |ADC_DIFSEL_DIFSEL_8 // |ADC_DIFSEL_DIFSEL_7 // |ADC_DIFSEL_DIFSEL_6 // |ADC_DIFSEL_DIFSEL_5 // |ADC_DIFSEL_DIFSEL_4 // |ADC_DIFSEL_DIFSEL_3 // |ADC_DIFSEL_DIFSEL_2 // |ADC_DIFSEL_DIFSEL_1 // |ADC_DIFSEL_DIFSEL_0 ; 1.3 校准 校准分为单端校准和差分校准 确定DEEPPWD=0(退出深度掉电模式),ADVREGEN=1(稳压器开启),并且已经等待了稳压器的启动时间。 确定ADEN=0。 配置ADC-》CR寄存器中的ADCALDIF标志位,选择输入模式(ADCALDIF=0 单端输入 / ADCALDIF=1 差分输入)。 ADC-》CR寄存器的ADCAL标志位置位,即开启校准(ADCALDIF配置为什么模式就校准什么模式)。 等待ADC-》CR寄存器的ADCAL硬件清除,即ADCAL=0,代表校准结束。 在ADC-》CALFACT寄存器中读取校准系数。 下面以单端输入校准为例: ADC1-》CR &= ~ADC_CR_ADCALDIF;//单端输入模式 步骤2 ADC1-》CR &= ~ADC_CR_ADEN; //禁止ADC 步骤3 ADC1-》CR |= ADC_CR_ADCAL; //校准ADC 步骤4 i = 0xffff; while((ADC1-》CR & ADC_CR_ADCAL) && (i--));//等待校准结束。步骤5 if(i == 0)//超时判断 { return FAILED; } 如果通道中又有差分输入还有单端输入,则需要将两个系数都进行校准。 1.4 转换队列设置 1.5 采样时间设置 每个通道都可以用不同的采样时间进行采样,采样时间由ADC-》SMPR1寄存器中的SMP位进行编程。因此,可以在以下采样时间值中进行选择: • SMP = 000: 2.5 ADC clock cycles • SMP = 001: 6.5 ADC clock cycles • SMP = 010: 12.5 ADC clock cycles • SMP = 011: 24.5 ADC clock cycles • SMP = 100: 47.5 ADC clock cycles • SMP = 101: 92.5 ADC clock cycles • SMP = 110: 247.5 ADC clock cycles • SMP = 111: 640.5 ADC clock cycles 总转换时间计算如下:TCONV = SMP + 12.5 ADC时钟周期(12-bit) 例如: Fadc_ker_ck = 30MHz,并且SMP=0 即2.5 ADC时钟周期 TCONV = (2.5 + 12.5)个 ADC 时钟周期,即 15 / 30 us = 500ns 采样结束后,ADC_ISR_EOSMP置位,代表采样结束(仅在规则转换中有效) 器与分辨率的转换时间如下表: 注意: 每个通道的采样时间必须遵循数据手册的最小采样时间。(数据手册第146页 DM00431551_ENV3) SMPPLUS control bit 在ADC-》SMPR1寄存器中有这么个标志位,其作用是为了方便 交错模式 对称。 2 ADC采样模式 2.1 Bulb sampling mode(灯泡模式?) 启动该采样模式,则在第二个ADC空闲时间进行采样,如下图 该采样方式有最大采样时间限制,参考数据手册。 该采样方式不适用连续采样和注入采样。 如果该模式启动(ADC-》CFGR2中的BULB=1),则不准置位ADC-》CFGR2中的SMPTRIG。 2.2 Sampling time control trigger mode(采样时间控制触发模式) 当SMPTRIG置位时(在ADC-》CFGR2寄存器中),通过SMPx位(在ADC-》SMPRx寄存器中)编程的采样时间是无效的。采样时间由触发信号边缘控制。 该模式分为软件控制和硬件控制: 硬件触发 当选择硬件触发器时,触发信号的每个上升沿开始采样周期。下降沿结束采样周期并开始转换。EXTEN(外部触发极性选择,在ADC-》CFGR寄存器中)必须设置为01(上升沿有效)。 Hardware triggers with not defined rising and falling edges (one pulse event) cannot be used in Bulb mode. 软件触发 当选择软件触发器时,软件触发器不是ADC-》CR中的ADSTART位,而是ADC-》CFGR2寄存器中的SWTRIG位。置位SWTRIG位开始采样周期,清除SWTRIG位结束采样周期同时开始转换。EXTEN(外部触发极性选择,在ADC-》CFGR寄存器中)必须设置为00(禁止外部触发)。 3. 转换模式 3.1 单次转换模式(CONT=0) 当ADC_CFGR_CONT=0,代表配置为单次转换模式。 规则模式:置位ADSTART(ADC-》CR寄存器)或者外部触发 注入模式:置位JADSTART(ADC-》CR寄存器)或者外部触发 在规则序列中,每次转换完成后 转换后的数据存储到16位ADC_DR寄存器 置位ADC_ISR_EOC(结束常规转换)标志(读取或者写1 清零) 如果设置了ADC_IER_EOCIE位,就会产生一个中断 在注入序列中,每次转换完成后 转换后的数据存储到16位ADC_JDRy寄存器 置位ADC_ISR_JEOC(结束常规转换)标志(读取或者写1 清零) 如果设置了ADC_IER_JEOCIE位,就会产生一个中断 在规则序列完成后 ADC_ISR_EOSEOS标志位置位(写1清零) 如果ADC_IER_EOSIE置位,则会产生一个中断 在注入序列完成后 ADC_ISR_JEOS标志位置位(写1清零) 如果ADC_IER_JEOSIE置位,则会产生一个中断 提示:如果想转换单个通道请将 L(队列转换长度,在ADC1-》SQR1寄存器中)设置为1。 3.2 连续转换模式(CONT=1) 当ADC_CFGR_CONT=1,代表配置为连续转换模式。 只有规则通道有连续转换模式。 在规则序列中,每次转换完成后 转换后的数据存储到16位ADC_DR寄存器 置位ADC_ISR_EOC(结束常规转换)标志(读取或者写1 清零) 如果设置了ADC_IER_EOCIE位,就会产生一个中断 在规则序列完成后 ADC_ISR_EOSEOS标志位置位(写1清零) 如果ADC_IER_EOSIE置位,则会产生一个中断 然后,一个新的序列立即重启,ADC连续重复转换序列。 禁止同时置位 ADC_CFGR_DISCEN 和 ADC_CFGR_CONT。 注入通道要想连续转换,需要设置自动注入。 连续转换模式下,ADSTART不会被硬件清除。 不能同时使能ADC_CFGR_DISCEN和ADC_CFGR_CONT。 3.3 不连续模式 当ADC_CFGR_DISCEN=1,开启不连续模式,每次触发都只转换ADC_CFGR_DISCNUM个通道数量,每次转换都会置位EOC标志位,直到转换完ADC-》SQR里面的通道(总个数为ADC-》SQR1中的L),最后置位EOS标志位。 当ADC_CFGR_DISCEN=0,关闭不连续模式,一次触发转换ADC_SQR1_L个通道,每次转换都会置位EOC标志位,最后置位EOS标志位。 不能同时使能ADC_CFGR_DISCEN和ADC_CFGR_CONT。 4. 触发模式 ADSTART 当EXTEN[1:0] == 0,ADSTART=1立即触发转换 当EXTEN[1:0] != 0,ADSTART=1得等待下个有效硬件触发才进行转换 JADSTART 当JEXTEN[1:0] == 0,JADSTART=1立即触发转换 当JEXTEN[1:0] != 0,JADSTART=1得等待下个有效硬件触发才进行转换 外部触发 当注入队列使能(ADC_CFGR_JQDIS=0),软件不能触发注入通道。 转换过程中,触发会被忽略。 触发极性 触发源 具体触发源见手册的第627页(DM00355726_ENV4) DMA请求 双ADC模式 当ADC_CCR_DUAL不等于0的时候,ADC进入双ADC模式,双ADC模式下,从ADC的配置位和主模式的配置位共享(CFGR寄存器),只需在主ADC中配置触发源、触发方式、触发极性、注入触发源、注入触发极性就可以,从ADC不用配置。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1780 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1081 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1679 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
596浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
556浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 01:05 , Processed in 0.810975 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号