<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          STM32 之 ADC_DMA

          作者: 時(shí)間:2016-12-03 來源:網(wǎng)絡(luò) 收藏
          這里僅僅是一個(gè)測(cè)量趨勢(shì),并不是很精確的測(cè)量。

          再次重申STM32ADC不同的通道對(duì)應(yīng)著不同的管腳,本代碼中PA1對(duì)應(yīng)著通道1。

          本文引用地址:http://www.ex-cimer.com/article/201612/325138.htm

          包含文件:

          由于百度字?jǐn)?shù)限制這里只貼出關(guān)鍵代碼:

          (1)Main

          C語言:Codee#14684
          /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
          + 實(shí)驗(yàn)平臺(tái) : ST 官方三合一套件
          + 硬件 : STM32F103C8T6
          + 開發(fā)平臺(tái) : IAR For ARM 5.40
          + 仿真器 : J-Link
          + 日期 : 2010-10-28
          + 頻率 :HSE = 8MHz ,主頻 = 72MHz
          ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

          #include "includes.h"
          #include "stdio.h"
          /*******************************************************************************
          == 變量聲明 ==
          *******************************************************************************/
          floatADC_Value,Tem;
          unsignedchara=0;
          unsignedcharb=0;
          unsignedcharc=0;
          unsignedchard=0;

          /*******************************************************************************
          == Main 函數(shù) ==
          *******************************************************************************/
          voidmain(void)
          {
          //---- 初始化 ------------------------------------------------------
          RCC_Configuration();//配置系統(tǒng)時(shí)鐘
          NVIC_Configuration();//配置 NVIC 和 Vector Table
          SysTick_Config();//配置SysTick的精確延時(shí)

          GPIO_Configuration();
          UART1_Configuration();
          AD_Configration();
          DMA_Configration();


          //---- 任務(wù)開始 ----------------------------------------------------
          LED1_HIGH;LED2_HIGH;LED3_HIGH;LED4_HIGH;// 初始化讓燈全滅

          Uart1_PutString("===== 豆子 STM32例程之ADC_DMA =====rn",39);

          while(1)
          {
          ADC_Value=(float)(sys_analog[5])*330/409600;// 計(jì)算公式datasheet上可以找到,但是我沒找到。
          // Tem = (1.42 - ADC_Value)*1000/4.35 + 25;

          ADC_Value=ADC_Value*1000;// ADC是12位的,這里數(shù)據(jù)類型轉(zhuǎn)換有問題
          a=ADC_Value/1000;
          b=(ADC_Value-a*1000)/100;
          c=(ADC_Value-a*1000-b*100)/10;
          d=ADC_Value-a*1000-b*100-c*10;

          Uart1_PutChar(a+0);
          Uart1_PutString(".",1);
          Uart1_PutChar(b+0);
          Uart1_PutChar(c+0);
          Uart1_PutChar(d+0);
          Uart1_PutString(" Vn",3);

          Delay_Ms(1000);
          }
          }

          (2)ADC初始化

          C語言:Codee#14685
          /*******************************************************************************
          * Function Name : AD_Configration
          * Description : Configures the ADC1
          * Input : None
          * Output : None
          * Return : None
          *******************************************************************************/
          voidAD_Configration(void)
          {
          ADC_InitTypeDefADC_InitStructure_ADC1;

          /* Resets ADC1 */
          ADC_DeInit(ADC1);

          ADC_InitStructure_ADC1.ADC_Mode=ADC_Mode_Independent;// 配置ADC1 工作在獨(dú)立模式
          ADC_InitStructure_ADC1.ADC_ScanConvMode=ENABLE;// 配置ADC1 模數(shù)轉(zhuǎn)換工作在掃描模式(多通道模式)
          ADC_InitStructure_ADC1.ADC_ContinuousConvMode=ENABLE;// 配置ADC1 模數(shù)轉(zhuǎn)換工作在連續(xù)模式
          ADC_InitStructure_ADC1.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;// 配置ADC1 模數(shù)轉(zhuǎn)換有軟件方式啟動(dòng)而非中斷方式
          ADC_InitStructure_ADC1.ADC_DataAlign=ADC_DataAlign_Right;// 配置ADC1 模數(shù)轉(zhuǎn)換數(shù)據(jù)對(duì)齊方式為右對(duì)齊
          ADC_InitStructure_ADC1.ADC_NbrOfChannel=1;// 配置ADC1 模數(shù)轉(zhuǎn)換的通道數(shù)目 為 1個(gè)通道
          ADC_Init(ADC1,&ADC_InitStructure_ADC1);// 配置ADC1 初始化
          //常規(guī)轉(zhuǎn)換序列1:通道10
          ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_239Cycles5);// 配置為 ADC1,通道1,1個(gè)通道,采樣時(shí)間為239.5個(gè)周期,周期越長采集的信號(hào)越準(zhǔn)越穩(wěn)
          // 對(duì)應(yīng)的管教所對(duì)應(yīng)的ADC通道時(shí)對(duì)應(yīng)的,一定不要搞錯(cuò)!
          /* Enable the temperature sensor and vref internal channel */
          //ADC_TempSensorVrefintCmd(ENABLE); // 使能溫度傳感器內(nèi)部參考電壓通道

          ADC_DMACmd(ADC1,ENABLE);// 使能ADC1的DMA請(qǐng)求

          ADC_Cmd(ADC1,ENABLE);// 使能ADC1

          /* Enable ADC1 reset calibaration register */
          ADC_ResetCalibration(ADC1);// 重置ADC1的校準(zhǔn)寄存器
          /* Check the end of ADC1 reset calibration register */
          while(ADC_GetResetCalibrationStatus(ADC1));// 檢測(cè)是否重置完畢

          /* Start ADC1 calibaration */
          ADC_StartCalibration(ADC1);// 開始校準(zhǔn) ADC1
          /* Check the end of ADC1 calibration */
          while(ADC_GetCalibrationStatus(ADC1));// 檢測(cè)是否校準(zhǔn)完畢

          /* Start ADC1 Software Conversion */
          ADC_SoftwareStartConvCmd(ADC1,ENABLE);// 軟件使能ADC1的轉(zhuǎn)換
          }

          (3)DMA初始化

          C語言:Codee#14686

          /*******************************************************************************
          * Function Name : DMA_Config
          * Description : Configures SysTick
          * Input : None
          * Output : None
          * Return : None
          *******************************************************************************/
          voidDMA_Configration(void)
          {
          DMA_InitTypeDefDMA_InitStructure_DMA1;

          DMA_DeInit(DMA1_Channel1);// 配置DMA1 的通道1寄存器為缺省值

          DMA_InitStructure_DMA1.DMA_PeripheralBaseAddr=0x4001244C;// 配置DMA1 外設(shè)基地址為 0x4001244C , 在datasheet上可以查到
          DMA_InitStructure_DMA1.DMA_MemoryBaseAddr=(unsignedint)(&sys_analog);// 配置DMA1 內(nèi)存基地址
          DMA_InitStructure_DMA1.DMA_DIR=DMA_DIR_PeripheralSRC;// 配置DMA1 外設(shè)作為數(shù)據(jù)傳輸?shù)膩碓?,就是外設(shè)向內(nèi)存中搬運(yùn)數(shù)據(jù)
          DMA_InitStructure_DMA1.DMA_BufferSize=10;// 配置DMA1 數(shù)據(jù)緩存大小為 10個(gè)數(shù)據(jù)單位
          DMA_InitStructure_DMA1.DMA_PeripheralInc=DMA_PeripheralInc_Disable;// 配置DMA1 外設(shè)地址寄存器不變
          DMA_InitStructure_DMA1.DMA_MemoryInc=DMA_MemoryInc_Enable;// 配置DMA1 內(nèi)存地址寄存器遞增
          DMA_InitStructure_DMA1.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;// 配置DMA1 外設(shè)數(shù)據(jù)寬度為 16位 ,這里注意ADC是12位的
          DMA_InitStructure_DMA1.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;// 配置DMA1 內(nèi)存數(shù)據(jù)寬度為 16位
          DMA_InitStructure_DMA1.DMA_Mode=DMA_Mode_Circular;// 配置DMA1 工作在循環(huán)緩存模式
          DMA_InitStructure_DMA1.DMA_Priority=DMA_Priority_Medium;// 配置DMA1 的相應(yīng)通道(channel x)的優(yōu)先級(jí)為 中優(yōu)先級(jí)
          DMA_InitStructure_DMA1.DMA_M2M=DMA_M2M_Disable;// 配置DMA1 的相應(yīng)通道(channel x)內(nèi)存到內(nèi)存?zhèn)鬏敒?使能狀態(tài)

          DMA_Init(DMA1_Channel1,&DMA_InitStructure_DMA1);// 初始化 DMA1_Channel1 的相關(guān)寄存器

          DMA_Cmd(DMA1_Channel1,ENABLE);// 使能 DMA1_Channel1

          }



          關(guān)鍵詞: STM32ADCDM

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();