这些细节在STM32F4的原厂参考手册中没有说明,只是很简短的列了一下。
我是查看ST前几天刚发布的接口库才最后弄明白的,不敢独享!
1、STM32F4有3个独立的ADC单元,性能强劲,可以独立使用,也可以联合使用它们。
联合使用在参考手册中叫Interleave模式,最大的目的是加倍提升采样速度。
2、采样速度大幅提高以后,就需要使用DMA来配合提取采样结果,从而发挥STM32F4
ADC模块的最大效能。
3、ADC模块使用DMA有4种模式可选,默认模式和模式1没有什么特别之处。
最有意思的是模式2和模式3:
模式2可以选择多达3个ADC模块工作于Interleave模式,ADC速度从单一模块的
2.4Msps暴涨为7.2Msps,而且还是12-bit的分辨率!唯一的要求是每完成2次转换,
允许DMA一次性取走2个采样值。
模式3跟模式2类同,但要求ADC模块的采样率为8-bit或6-bit,由于转换时间要比
12-bit时短,所以速度更快,适用于速度要求更快,但精度要求较低的场合。
比如用2个ADC模块很容易就可以做到6Msps的速率,而且2次的结果可以存为halfword,
经由DMA取走,耗用内存也比模式2来的少。
剩下的那一个ADC模块也不用闲着,可以工作于其他设定(比如:高精度)的模式。
关键字:STM32F4 ADC模块 DMA模式
引用地址:
STM32F4 ADC模块使用不同DMA模式的区别和对比
推荐阅读最新更新时间:2024-03-16 15:15
STM32F4_SYSTICK定时器
关于SYSTICK定时器的说明,在STM32F4的参考手册中并没有提到,因为这个定时器是属于Cortex内核的内容。在《Cortex M3权威指南》中,可以在第八章,也即“NVIC与中断控制”那一章节的最后才可看到其详细说明,摘取如下。 //-----------------------------------------------------------------------------------------------------------// SysTick定时器被捆绑在NVIC中,用
[单片机]
STM32F4 UART1 DMA收发的一些问题解决
早些时间写过一篇“STM32F4 UART1 DMA发送和接收不定长度数据”的博文。很多转载的都不注明出处的。后来就没再怎么用过F4的uart 也有朋友反映过会莫名的进接受完成中断,但是实际接受的数据量并没有达到设置的DMA接受长度,应该不会进DMA接收中断,我也没搞明白就不了了之了,可看这个链接:http://www.openedv.com/forum.php?mod=viewthread&tid=76091&extra= 最近有个项目用到了这个功能。之前能接受发送到程序,下载到单片机里面怎么都不行了。很调了很久发现了以下几个问题 1.串口DMA接收中断、DMA发送中断、空闲中断的优先级是有影响。按照以下设置faxi发现
[单片机]
【stm32f407】NVIC
NVIC称之为“嵌套向量中断控制器:Nested Vectored Interrupt Controller (NVIC)“。 CM4内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。但STM32F4并没有使用CM4内核的全部东西,而是只用了它的一部分 STM32F40xx/STM32F41xx总共有92个中断,STM32F42xx/STM32F43xx则总共有96个中断,以下仅以STM32F40xx/41xx为例讲解。 STM32F40xx/STM32F41xx的92个中断里面,包括10个内核中断和82个可屏蔽中断,具有16级可编程的中断优先级,而我们常用的就是这82
[单片机]
飞思卡尔16位单片机(五)——ADC模数转换模块测试
一、介绍 ADC模块的作用是将模拟的电压信号转换为CPU可以处理的数字信号。一些低端的单片机上没有ADC模块,必须使用片外的ADC芯片,才能实现模数转换的功能。而飞思卡尔的单片机一般是集成了ADC模块的,这样使用起来就很方便了。虽然片内的ADC模块采集的精度不高,但是对于一般的用途已经足够用了。 XEP100的ADC模块由模拟量前端、模拟量转换、控制部分和结果存储四部分组成。ADC工作时由CPU发出启动命令,然后经过采样、模数转换,最后将结果保存到相应的寄存器。XEP100单片机ADC模块具有如下特性: ● 8位、10位和12位三种转换模式。 ● 采样缓冲器放大功能。 ● 可编程的采样时间。 ● 左/右对齐
[单片机]
STM32F407 周期唤醒功能
1.下图是STM32F407的中文参考手册中,RTC介绍部分。因为我想实现单片机每秒自动唤醒自己一次,开始打算用闹钟中断,但是每次唤醒以后都要自己设置下次唤醒的时间,简单的方法是秒+1,但是要考虑是不是59秒的情况,比较麻烦。所以就选择唤醒中断的方式。 2.时钟图分析: (1)通过寄存器RTC_CR WUCKSESEL 设置唤醒时钟,为了方式我选择的是10X(1HZ)。 标准库代码:RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits); (2)通过RTC_WUTR寄存器设置周期唤醒的时间 标准库代码:RTC_SetWakeUpCounter(X-1);/
[单片机]
2.STM32F4/7点灯
思路:1.时钟使能(开启GPIOA端口时钟使能) 2.GPIO配置(推挽输出模式,频率,速度等) 3.GPIO输出高电平(输出置位) STM32F4: 推挽输出,输出低电平灯亮,输出高电平灯灭. #include stm32f4xx.h void Delay(__IO uint32_t nCount){ while(nCount--); } void GPIO_Con(){ GPIO_InitTypeDef GPIO_Struct; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE); GPIO_Struct.GPIO_Pin=GPIO_Pin_9;
[单片机]
STM32F4 独立看门狗IWDG
为了提搞系统的可靠性,STM32F4系列MCU有一个独立看门狗(IWDG)和一个窗口看门狗(WWDG)。今天做的实验是关于独立看门狗的。 独立看门狗使用的时钟源是内部低速振荡器LSI。因为LSE可能没接,HSE可能坏点,HSE耗着的时候HSI却观点了。。。诸多原因,LSI是最好的独立看门狗时钟。 【IWDG主要特性】 1、独立的向下计数器 2、内部RC振荡器作为时钟源 3、当计数器值减到0时,复位MCU 【IWDG配置步骤】 1、设置KR寄存器,为向PR和RLR写入数据做准备。向KR写入0x5555使能写入PR和RLR 2、写入预分频值和重装载值。预分频是对LSI进行分频,重装载值是每次重新计数的开始值。 3、向KR写入0xAAA
[单片机]
MSP430 ADC12模块应用
//****************************************************************************** //MSP430F149 ADC12模块+串行通讯的实验程序 //使用ADC12采集实验,将采集到数据送向PC.(单路单次采集) //P3.4为发送,P3.5为接收 晶体使32768HZ/8MHZ. 串行波特率B/S //使用SMCLK作为波特率发器时,不能使用LPM2,LPM3! //以下程序已验证通过,初学者可直接使用.由时间仓促和水平有限,请读者批评指正. //编写:www.Microcontrol.cn/DC //**************************
[单片机]