• stm32ADC+DMA串口发送实验


    /*********************************************************************************************************
    *
    * File                : main.c
    * Hardware Environment: 
    * Build Environment   : RealView MDK-ARM  Version: 4.20
    * Version             : V1.0
    * By                  : 
    *
    *                                  (c) Copyright 2005-2011, WaveShare
    *                                       http://www.waveshare.net
    *                                          All Rights Reserved
    *
    *********************************************************************************************************/
    
    /* Includes ------------------------------------------------------------------*/
    #include "stm32f10x.h"
    #include "systick.h"
    #include <stdio.h>
    #include "usart.h"
    
    /* Private define ------------------------------------------------------------*/
    #define ADC1_DR_Address    ((u32)0x4001244C)
    
    /* Private function prototypes -----------------------------------------------*/
    void USART_Configuration(void);
    void ADC_Configuration(void);
    
    /* Private variables ---------------------------------------------------------*/
    float AD_value;
    vu16 ADC_ConvertedValue;
    
    /*******************************************************************************
    * Function Name  : main
    * Description    : Main program
    * Input          : None
    * Output         : None
    * Return         : None
    * Attention         : None
    *******************************************************************************/
    int main(void)
    {
        Delay_Init();
        usart_Configuration();
        ADC_Configuration();
    
      printf("
    ****************************************************************
    ");
      /* Infinite loop */
      while (1)
      {
        /* Printf message with AD value to serial port every 1 second */
          AD_value = ADC_ConvertedValue;
          AD_value = (AD_value/4096)*3.3;
        printf("The current AD value = %4.4fV 
    ", AD_value);
          Delay(1000);   /* delay 1000ms */
        }
    }
    
    /*******************************************************************************
    * Function Name  : ADC_Configuration
    * Description    : Configure the ADC.
    * Input          : None
    * Output         : None
    * Return         : None
    * Attention         : None
    *******************************************************************************/
    void ADC_Configuration(void)
    {
      ADC_InitTypeDef ADC_InitStructure;
      DMA_InitTypeDef DMA_InitStructure;
      GPIO_InitTypeDef GPIO_InitStructure;
    
      RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
    
      /* Configure PA.06 (ADC Channel6), PA.07 (ADC Channel7) as analog input -------------------------*/
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
      GPIO_Init(GPIOA, &GPIO_InitStructure);   
       
      /* DMA channel1 configuration ----------------------------------------------*/
      DMA_DeInit(DMA1_Channel1);
      DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
      DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;
      DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
      DMA_InitStructure.DMA_BufferSize = 1;
      DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
      DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
      DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
      DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
      DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
      DMA_InitStructure.DMA_Priority = DMA_Priority_High;
      DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
      DMA_Init(DMA1_Channel1, &DMA_InitStructure);
      
      /* Enable DMA1 channel1 */
      DMA_Cmd(DMA1_Channel1, ENABLE);
        
      /* ADC1 configuration ------------------------------------------------------*/
      ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
      ADC_InitStructure.ADC_ScanConvMode = ENABLE;
      ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
      ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
      ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
      ADC_InitStructure.ADC_NbrOfChannel = 1;
      ADC_Init(ADC1, &ADC_InitStructure);
    
      /* ADC1 regular channel6 configuration */ 
      ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 1, ADC_SampleTime_239Cycles5);
    
      /* Enable ADC1 DMA */
      ADC_DMACmd(ADC1, ENABLE);
      
      /* Enable ADC1 */
      ADC_Cmd(ADC1, ENABLE);
    
      /* Enable ADC1 reset calibaration register */   
      ADC_ResetCalibration(ADC1);
      /* Check the end of ADC1 reset calibration register */
      while(ADC_GetResetCalibrationStatus(ADC1));
    
      /* Start ADC1 calibaration */
      ADC_StartCalibration(ADC1);
      /* Check the end of ADC1 calibration */
      while(ADC_GetCalibrationStatus(ADC1));
         
      /* Start ADC1 Software Conversion */ 
      ADC_SoftwareStartConvCmd(ADC1, ENABLE);
    }
    
    #ifdef  USE_FULL_ASSERT
    
    /**
      * @brief  Reports the name of the source file and the source line number
      *   where the assert_param error has occurred.
      * @param  file: pointer to the source file name
      * @param  line: assert_param error line source number
      * @retval None
      */
    void assert_failed(uint8_t* file, uint32_t line)
    { 
      /* User can add his own implementation to report the file name and line number,
         ex: printf("Wrong parameters value: file %s on line %d
    ", file, line) */
    
      /* Infinite loop */
      while (1)
      {
      }
    }
    #endif
    
    /*********************************************************************************************************
          END FILE
    *********************************************************************************************************/
  • 相关阅读:
    模块模式——属性
    防止变量被覆盖
    自执行匿名函数语法和普通函数语法对比
    JavaScript更改原型
    JavaScript覆盖原型以及更改原型
    JavaScript原型链
    作用域链和原型链描述javaScript访问变量和属性的顺序
    javascript高级变量提升和执行环境对象
    构建第一个单页应用
    error: expected identifier before numeric constant 问题
  • 原文地址:https://www.cnblogs.com/ljs-666/p/8094856.html
Copyright © 2020-2023  润新知