标题:
STM32F407定时器触发ADC采样并通过DMA传输的源程序
[打印本页]
作者:
腾讯
时间:
2019-7-22 17:30
标题:
STM32F407定时器触发ADC采样并通过DMA传输的源程序
这是我使用标准库写的,通过定时器触发ADC采样,然后通过DMA进行传输的例程。例程已在STM32F407上验证通过
单片机源程序如下:
/*需要按下复位键才能正常打印数据,原因不明
定时器1s触发一次ADC转换,然后通过DMA将ADC转换的数据搬运到内存中,然后在dma中断中判断搬运是否完成,在main
的循环中不断读取转换的值-----取采样数据的平均值的代码可以参考原子的
要注意的是,这里采用的是定时器1通道1上升沿触发,而数据有8个,若每1s触发一次,则需要每8s才能显示一次转换的数据,因此将定时器触发时间改为了1/8s*/
//#include "stm32f4xx.h"
#include "usart_printf.h"
#include "bsp_systick.h"
#include "bsp_led.h"
#include "ADC.h"
#include "DMA.h"
#include "Timer.h"
RCC_ClocksTypeDef get_rcc_clock;
__IO uint16_t ADC_RegularConvertedValueTab[8] = {0};
//这里可以使用两种定时器触发模式,一种是TIM2 CH2对应PA1,一种是TIM_CH1对应PA8
u8 flag=0;
/*软件复位*/
//void mcuRestart(void)
//{
//__set_FAULTMASK(1); //关闭所有中断
//NVIC_SystemReset(); //复位
//}
int main(void)
{
// mcuRestart();
usart_Init ();
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
TIM1_PWM_Init();
ADC_Configuration();
DMA2_Init();
printf("这是一个测试\r\n");
RCC_GetClocksFreq(&get_rcc_clock);
while (1)
{
if(flag)
{
flag=0;
for(int i=0;i<8;i++)
{
printf("%d ",ADC_RegularConvertedValueTab[i]);
}
}
}
}
复制代码
所有资料51hei提供下载:
TIM+ADC+DMA实验.7z
(592.7 KB, 下载次数: 330)
2019-7-23 03:53 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
abnsl
时间:
2019-7-23 15:29
没有资源下载!
作者:
544088712
时间:
2019-8-7 15:31
请问楼主,我把定时器触发AD改成1us触发一次为什么就传输不了数据了??
作者:
bndanshen
时间:
2019-12-13 12:08
AD采集精度如何呢
作者:
tianyu22
时间:
2020-1-19 12:52
下载来看看。。希望有用
作者:
yymj
时间:
2020-6-19 02:47
下载看看
作者:
gjs555
时间:
2020-8-17 18:36
STM32F407中的AD采样模块、DMA模块,我这几天都有在学,今天参考了这个程序代码,确实很有用。希望自己能坚持学习下去。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1