ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //模数转换工作在连续转换模式 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //外部触发转换关闭 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据右对齐 ADC_InitStructure.ADC_NbrOfChannel = M; //顺序进行规则转换的A...
以TIM3做为触发源为例,如下: DMA这里要开启循环模式: TIM3的配置如下,这里实现了一个1ms的定时,也就是说每隔1ms自动触发一次AD转换: 主函数里代码如下: 然后中断里做一下处理即可: 好了,对ADC的使用方法做了一下简单的整理,当然肯定不止这些,必然还有别的玩法。这篇文章以思路为主,没提供代码(有需要的话我...
1、校准ADC,开启DMA接收,在main函数初始化部分调用 #defineADC_MAX_NUM 5#defineBTN_BUFF_LEN 100staticuint16_t dma_adc_data[BTN_BUFF_LEN * ADC_MAX_NUM]; 1/**2* @brief 校准adc,开启DMA接收3*4*/5voidAdc_Init(void)6{7//校准8HAL_ADCEx_Calibration_Start(&hadc1);9HAL_ADC_Start_DMA(&...
使用cubemx打开串口中断的工程,然后另存为ADC工程,增加如下设置,启用ADC及其中断: 可以看到选择ADC1,勾选IN0后,右侧PA0引脚自动配置成了ADC输入;在NVIC选项卡下勾选ADC中断使能,这样我们可以在这个工程里演示轮询和中断模式。 到时钟设置选项卡下,更改ADC时钟,因为我们使用的主时钟是72M,ADC的时钟不能太高,所以要...
ADC_DMACmd(ADC1,ENABLE);//开启DMA ADC_Cmd(ADC1,ENABLE);//开启ADC转换器 最后是启动ADC,本次之所以在初始化函数中进行启动,是因为此次ADC工作模式是启动后自动连续循环扫描,因此只需要开启一次就足够了。 ADC_SoftwareStartConv(ADC1);//启动ADC转换器 ...
DMA这里要开启循环模式: TIM3的配置如下,这里实现了一个1ms的定时,也就是说每隔1ms自动触发一次AD转换: 主函数里代码如下: 然后中断里做一下处理即可: 好了,对ADC的使用方法做了一下简单的整理,当然肯定不止这些,必然还有别的玩法。这篇文章以思路为主,没提供代码(有需要的话我稍后把链接发上来)感兴趣的可以...
把ADC 设置成连续转换模式,同时对应的 DMA 通道开启循环模式,这样 ADC 就一直在进行数据采集然后通过 DMA 把数据搬运至内存。这样进行处理的话,需要加一个定时中断,用来读取内存中的数据。 使用ADC 的定时器触发 ADC 转换的功能,然后使用 DMA 进行数据的搬运。这样就只要设置好定时器的触发间隔,就能实现 ADC 定时采...
1)由于要使用ADC功能,必须使用到库文件stm32f10x_.c,所以将是stm32f10x_adc.c文件添加到F10x_StdPeriod_Driver工程组中。 2)这次需要使用DMA功能,所以还要讲stm32f10x_dma.c文件添加到STM32F10x_StdPeriod_Driver工程组中. 3)打开stm32f10x_conf.h文件,将原先屏蔽的:#include "stm32f10x_adc.h" 与“...
使用定时器中断,每隔一段时间进行 ADC 转换,但是这样每次都必须读 ADC 的数据寄存器,非常浪费时间。 把ADC 设置成连续转换模式,同时对应的 DMA 通道开启循环模式,这样 ADC 就一直在进行数据采集然后通过 DMA 把数据搬运至内存。这样进行处理的话,需要加一个定时中断,用来读取内存中的数据。
由于外设的地址都是ADC数据寄存器,没有改变,所以不需要增长地址; 6.内存地址增长:DMA_MemoryInc = DMA_MemoryInc_Enable; 由于我们定义了一个数字,里面需要保存3个数值,所以需要增长; 【根据传输长度和循环模式,可以循环传输数据】 7.外设数据长度:DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; ...