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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32學(xué)習(xí)筆記之ADC--DMA方式

          STM32學(xué)習(xí)筆記之ADC--DMA方式

          作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏
          程序功能是把ADC1模塊里通道14的輸入電壓轉(zhuǎn)換后通過(guò)USART2發(fā)送到PC,在PC機(jī)上用串口調(diào)試助手觀察接收數(shù)據(jù):

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

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


          #include
          #include

          #define ADC1_DR_Address((u32)0x4001244C)

          #ifdef __GNUC__

          #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
          #else
          #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
          #endif

          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 mvrn", ADC_ConvertedValue, ADC_ConvertedValue*3300/4096);

          }
          }

          void RCC_Config(void)
          {
          ErrorStatus HSEStartUpStatus;//定義外部高速晶體啟動(dòng)狀態(tài)枚舉變量
          RCC_DeInit();//復(fù)位RCC外部設(shè)備寄存器到默認(rèn)值
          RCC_HSEConfig(RCC_HSE_ON); //打開外部高速晶振
          HSEStartUpStatus = RCC_WaitForHSEStartUp();//等待外部高速時(shí)鐘準(zhǔn)備好
          if(HSEStartUpStatus == SUCCESS)//外部高速時(shí)鐘已經(jīng)準(zhǔn)別好
          {

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

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

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

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

          RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);//使能串口2時(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)為浮點(diǎn)輸入模式
          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);

          }


          上一頁(yè) 1 2 下一頁(yè)

          評(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); })();