打印
[STM32F4]

STM32F429使用ADC+DMA高速采样(2.4Msps)

[复制链接]
2124|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
联通移不动|  楼主 | 2016-9-2 00:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式





硬件平台: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[15];
         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);
        






沙发
联通移不动|  楼主 | 2016-9-2 00:26 | 只看该作者



ADC3 DMA高速采样(2.4Msps).z01-删掉之后的.zip (2 MB)
ADC3 DMA高速采样(2.4Msps).zip (164.97 KB)

使用特权

评论回复
板凳
mmuuss586| | 2016-9-2 08:58 | 只看该作者
谢谢分享;

使用特权

评论回复
地板
lf123456| | 2016-9-2 10:15 | 只看该作者
楼主为什么下载以后解压提醒文件有损坏啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

67

主题

127

帖子

0

粉丝