乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      STM32學(xué)習(xí)筆記之ADC

       jianke 2010-01-29

      STM32是12位ADC,測量結(jié)果基本還可以!程序用了DMA來傳輸ADC轉(zhuǎn)換值,調(diào)高了讀取速度。串口部分用是上一篇串口調(diào)試筆記里的代碼。

      /************************************************************************
      Copyright (c) 2008 wormchen
      All rights reserved
      文 件 名: main.c
      說 明: 將ADC轉(zhuǎn)換值通過串口發(fā)送到PC端
      主要硬件: EMSTM32V1+miniSTMV100(外部8MRC)
      編譯環(huán)境: MDK3.10
      當(dāng)前版本: 1.0
      作 者: 陳崇
      完成日期: 2008年3月24日9:08:41
      取代版本: 1.0
      原作 者: 陳崇
      完成日期: 2008年3月24日9:08:46
      ************************************************************************/
      #include
      #include

      #define ADC1_DR_Address ((u32)0x4001244C)

      #ifdef __GNUC__
      /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
      set to 'Yes') calls __io_putchar() */
      #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
      #else
      #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
      #endif /* __GNUC__ */

      vu16 ADC_ConvertedValue;

      void RCC_Config(void);
      void GPIO_Config(void);
      void USART_Config(void);
      void DMA_Config(void);
      void ADC_Config(void);
      void Put_String(u8 *p);
      void Delay(vu32 nCount);
      int main(void)
      {
      RCC_Config();
      GPIO_Config();
      USART_Config();
      DMA_Config();
      ADC_Config();


      while(1)
      {

      Delay(0x8FFFF);
      printf("ADC = %X Volt = %d mv\r\n", ADC_ConvertedValue, ADC_ConvertedValue*3300/4096);

      }
      }
      /*************************************************
      函數(shù): void RCC_Config(void)
      功能: 配置系統(tǒng)時鐘
      參數(shù): 無
      返回: 無
      **************************************************/
      void RCC_Config(void)
      {
      ErrorStatus HSEStartUpStatus;//定義外部高速晶體啟動狀態(tài)枚舉變量
      RCC_DeInit();//復(fù)位RCC外部設(shè)備寄存器到默認(rèn)值
      RCC_HSEConfig(RCC_HSE_ON); //打開外部高速晶振
      HSEStartUpStatus = RCC_WaitForHSEStartUp();//等待外部高速時鐘準(zhǔn)備好
      if(HSEStartUpStatus == SUCCESS)//外部高速時鐘已經(jīng)準(zhǔn)別好
      {

      RCC_HCLKConfig(RCC_SYSCLK_Div1);//配置AHB(HCLK)時鐘=SYSCLK
      RCC_PCLK2Config(RCC_HCLK_Div1); //配置APB2(PCLK2)鐘=AHB時鐘
      RCC_PCLK1Config(RCC_HCLK_Div2);//配置APB1(PCLK1)鐘=AHB 1/2時鐘
      RCC_ADCCLKConfig(RCC_PCLK2_Div4);//配置ADC時鐘=PCLK2 1/4

      RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
      //配置PLL時鐘 == 外部高速晶體時鐘*9
      RCC_ADCCLKConfig(RCC_PCLK2_Div4);//配置ADC時鐘= PCLK2/4

      RCC_PLLCmd(ENABLE);//使能PLL時鐘
      while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) //等待PLL時鐘就緒
      {
      }
      RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//配置系統(tǒng)時鐘 = PLL時鐘

      while(RCC_GetSYSCLKSource() != 0x08) //檢查PLL時鐘是否作為系統(tǒng)時鐘
      {
      }
      }
      RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA, ENABLE);//使能DMA時鐘
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC, ENABLE);
      //使能ADC1,GPIOC時鐘
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE);
      //打開GPIOD和AFIO時鐘

      RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);//使能串口2時鐘
      }
      /*************************************************
      函數(shù): void GPIO_Config(void)
      功能: GPIO配置
      參數(shù): 無
      返回: 無
      **************************************************/
      void GPIO_Config(void)
      {
      //設(shè)置RTS(PD.04),Tx(PD.05)為推拉輸出模式
      GPIO_InitTypeDef GPIO_InitStructure; //定義GPIO初始化結(jié)構(gòu)體
      GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);//使能GPIO端口映射USART2
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;//選擇PIN4 PIN5
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //引腳頻率50M
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//引腳設(shè)置推拉輸出
      GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化GPIOD
      //配置CTS (PD.03),USART2 Rx (PD.06)為浮點輸入模式
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_6;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
      GPIO_Init(GPIOD, &GPIO_InitStructure);
      //配置PC4為模擬輸入
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
      GPIO_Init(GPIOC, &GPIO_InitStructure);

      }
      /*************************************************
      函數(shù): void DMA_Config(void)
      功能: DMA配置
      參數(shù): 無
      返回: 無
      **************************************************/
      void DMA_Config(void)
      {
      DMA_InitTypeDef DMA_InitStructure;//定義DMA初始化結(jié)構(gòu)體
      DMA_DeInit(DMA_Channel1);//復(fù)位DMA通道1
      DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; //定義 DMA通道外設(shè)基地址=ADC1_DR_Address
      DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue; //定義DMA通道存儲器地址
      DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//指定外設(shè)為源地址
      DMA_InitStructure.DMA_BufferSize = 1;//定義DMA緩沖區(qū)大小1
      DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//當(dāng)前外設(shè)寄存器地址不變
      DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;//當(dāng)前存儲器地址不變
      DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//定義外設(shè)數(shù)據(jù)寬度16位
      DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //定義存儲器數(shù)據(jù)寬度16位
      DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;//DMA通道操作模式位環(huán)形緩沖模式
      DMA_InitStructure.DMA_Priority = DMA_Priority_High;//DMA通道優(yōu)先級高
      DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;//禁止DMA通道存儲器到存儲器傳輸
      DMA_Init(DMA_Channel1, &DMA_InitStructure);//初始化DMA通道1
      DMA_Cmd(DMA_Channel1, ENABLE); //使能DMA通道1
      }
      /*************************************************
      函數(shù): void ADC_Config(void)
      功能: ADC配置
      參數(shù): 無
      返回: 無
      **************************************************/
      void ADC_Config(void)
      {
      ADC_InitTypeDef ADC_InitStructure;//定義ADC初始化結(jié)構(gòu)體變量
      ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC1和ADC2工作在獨立模式
      ADC_InitStructure.ADC_ScanConvMode = ENABLE; //使能掃描
      ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//ADC轉(zhuǎn)換工作在連續(xù)模式
      ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//有軟件控制轉(zhuǎn)換
      ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//轉(zhuǎn)換數(shù)據(jù)右對齊
      ADC_InitStructure.ADC_NbrOfChannel = 1;//轉(zhuǎn)換通道為通道1
      ADC_Init(ADC1, &ADC_InitStructure); //初始化ADC
      ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_28Cycles5);
      //ADC1選擇信道14,音序器等級1,采樣時間239.5個周期
      ADC_DMACmd(ADC1, ENABLE);//使能ADC1模塊DMA
      ADC_Cmd(ADC1, ENABLE);//使能ADC1
      ADC_ResetCalibration(ADC1); //重置ADC1校準(zhǔn)寄存器
      while(ADC_GetResetCalibrationStatus(ADC1));//等待ADC1校準(zhǔn)重置完成
      ADC_StartCalibration(ADC1);//開始ADC1校準(zhǔn)
      while(ADC_GetCalibrationStatus(ADC1));//等待ADC1校準(zhǔn)完成
      ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能ADC1軟件開始轉(zhuǎn)換
      }
      /*************************************************
      函數(shù): void USART_Config(void)
      功能: USART配置
      參數(shù): 無
      返回: 無
      **************************************************/
      void USART_Config(void)
      {
      USART_InitTypeDef USART_InitStructure; //定義串口初始化結(jié)構(gòu)體
      USART_InitStructure.USART_BaudRate = 115200;//波特率9600
      USART_InitStructure.USART_WordLength = USART_WordLength_8b;//8位數(shù)據(jù)
      USART_InitStructure.USART_StopBits = USART_StopBits_1;//1個停止位
      USART_InitStructure.USART_Parity = USART_Parity_No ; //無校驗位
      USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
      //禁用RTSCTS硬件流控制
      USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//使能發(fā)送接收
      USART_InitStructure.USART_Clock = USART_Clock_Disable; //串口時鐘禁止
      USART_InitStructure.USART_CPOL = USART_CPOL_Low; //時鐘下降沿有效
      USART_InitStructure.USART_CPHA = USART_CPHA_2Edge;//數(shù)據(jù)在第二個時鐘沿捕捉
      USART_InitStructure.USART_LastBit = USART_LastBit_Disable;
      //最后數(shù)據(jù)位的時鐘脈沖不輸出到SCLK引腳
      USART_Init(USART2, &USART_InitStructure);//初始化串口2
      USART_Cmd(USART2, ENABLE);//串口2使能
      }
      /*************************************************
      函數(shù): void Put_String(void)
      功能: 向串口輸出字符串
      參數(shù): 無
      返回: 無
      **************************************************/
      void Put_String(u8 *p)
      {
      while(*p)
      {
      USART_SendData(USART2, *p++);
      while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET)
      {

      }
      }
      }
      /*****************************************************
      函數(shù): void Delay(vu32 nCount)
      功能: 延時指定時間
      參數(shù): vu32 nCount 延時指定時間
      返回: 無
      ******************************************************/
      void Delay(vu32 nCount)
      {
      for(; nCount != 0; nCount--);
      }
      /*****************************************************
      函數(shù):PUTCHAR_PROTOTYPE
      功能: 重定向C庫printf函數(shù)
      參數(shù): 無
      返回: 無
      *****************************************************/
      PUTCHAR_PROTOTYPE
      {
      USART_SendData(USART2, (u8) ch);//發(fā)送一字節(jié)數(shù)據(jù)
      while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET)
      {
      }//等待發(fā)送完成
      return ch;
      }

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多