caizhiwei 发表于 2014-6-1 11:58:29

【STM32F429开发日志】4.ADC+DMA高速采样(2.4Msps)

 


硬件平台:STM32F429I-DISCORVERY
软件平台:KEIL MDK5.10
DMA知识点:直接内存访问(DMA)是用来以提供外设和内存、内存和内存之间的高速数据传输的。数据可以在没有任何CPU干预下通过的DMA进行传输。这使得CPU资源更倾重与其他操作。
       DMA控制器是一个复杂的总线矩阵架构,结合了功能强大的双AHB主总线架构与独立的FIFO,以优化系统带宽。两个DMA控制器共有16个数据流(stream),每个数据流可以编程与规定的通道中的一个搭配。
      在STM32F429I-DISCO board中,由于串口2被L3GD20和液晶数据线占用,所以串口1很方便,而且还留了2个孔外接。

    This example describes how to use the ADC3 and DMA to transfer continuously 
converted data from ADC3 to memory.
    The ADC3 is configured to convert continuously channel13.
    Each time an end of conversion occurs the DMA transfers, in circular mode, the
converted data from ADC3 DR register to the ADC3ConvertedValue variable.
    To get the maximum ADC performance (2.4 MSPS, at 2.4V to 3.6V supply range),  
the ADC clock must be set to 36MHz. As ADC clock is equal to APB2/2, then APB2 
value will be 72MHz which lead to maximum AHB (System clock) at 144MHz. 
Since the sampling time is set to 3 cycles and the conversion time to 12bit data
is 12 cycles, so the total conversion time is (12+3)/36= 0.41us(2.4Msps).


    The converted voltage is displayed on the STM32F429I-DISCO board LCD (when the define USE_LCD
is enabled in main.h). It can also be monitored by adding the variable "ADC3ConvertedValue" 
to the debugger watch window. 


*        说    明 : 实现printf和scanf函数重定向到串口1,即支持printf信息到USART1
*                                实现重定向,只需要添加2个函数:
*                                int fputc(int ch, FILE *f);
*                                int fgetc(FILE *f);
*                                对于KEIL MDK编译器,编译选项中需要在MicorLib前面打钩,否则不会有数据打印到USART1。
*/
 
Description:
This example is used as a template project that can be used as reference to build
any new firmware application for STM32F429xx devices using the STM32F4xx Standard
Peripherals Library. it can be easily tailored to any other supported device and development board.
 
int main(void)
{
   
   uint8_t aTextBuffer;
       uint32_t i,sum;
  SysTick_Init();
  STM_EVAL_LED_Config();
  STM_EVAL_PBInit(BUTTON_MODE_EXTI);
       
  /* Initialize the LCD */
  LCD_Init();
  LCD_LayerInit();
  LTDC_Cmd(ENABLE);
  LCD_SetLayer(LCD_FOREGROUND_LAYER);
  LCD_Clear(LCD_COLOR_BLUE);
        LCD_DisplayStringLine(LCD_LINE_4, "Hello,Casy!");
        LCD_DisplayStringLine(LCD_LINE_5, "(*^__^*)");
  USART1_GPIO_Config();
  printf("\n\rHello, Stm32f429-discovery Board ! \n\r");
                               
  ADC3_CH13_DMA_Config();
  
  ADC_SoftwareStartConv(ADC3); /* Start ADC3 Software Conversion */ 
       
  while (1)
  {
      /* convert the ADC value (from 0 to 0xFFF) to a voltage value (from 0V to 3.0V)*/
    uwADC3ConvertedVoltage = uhADC3ConvertedValue *3000/0xFFF;//(0xfff=4096=2^12)
                printf("\n\rThe adc sample voltage is : %d mV\n\r",uwADC3ConvertedVoltage); 
         for(i = 0;i

caizhiwei 发表于 2014-6-1 11:59:48

RE:【STM32F429开发日志】4.ADC+DMA高速采样(2.4Msps)

关于滤波还没有深入研究,只是做了一个简单的均值滤波。。。呵呵,以后有时间了再整:L:D:D:D

foxmail-364565 发表于 2014-6-5 11:54:04

回复:【STM32F429开发日志】4.ADC+DMA高速采样(2.4Msps)

学习下,我用串口DMA发送没问题,接收还没看懂,参考下你的程序

一纸荒凉~~~ 发表于 2014-6-11 16:26:26

回复:【STM32F429开发日志】4.ADC+DMA高速采样(2.4Msps)

:L学习学习

wolfram335 发表于 2014-6-14 15:57:47

回复:【STM32F429开发日志】4.ADC+DMA高速采样(2.4Msps)

串口DMA发送没问题,接收还没看懂,参考下你的程序

王建 发表于 2014-6-19 09:25:02

RE:【STM32F429开发日志】4.ADC+DMA高速采样(2.4Msps)

不错,来参考下。

kevin_me 发表于 2014-6-20 11:52:38

回复:【STM32F429开发日志】4.ADC+DMA高速采样(2.4Msps)

多谢,学习学习

Eagleson 发表于 2014-6-20 14:08:35

RE:【STM32F429开发日志】4.ADC+DMA高速采样(2.4Msps)

:D

文大大 发表于 2014-6-20 23:38:14

回复:【STM32F429开发日志】4.ADC+DMA高速采样(2.4Msps)

 多谢分享
 

友情牵绊-2046836 发表于 2014-6-24 18:03:01

回复:【STM32F429开发日志】4.ADC+DMA高速采样(2.4Msps)

 参考参考!!!
页: [1] 2 3 4 5
查看完整版本: 【STM32F429开发日志】4.ADC+DMA高速采样(2.4Msps)