久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4455|回復: 0
打印 上一主題 下一主題
收起左側

STM32F103兩路AD同時檢測并通過串口顯示程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:361044 發表于 2019-2-20 15:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
經過測試,完全可用

單片機源程序如下:
  1. #include "adc.h"
  2. #include "SysTick.h"
  3. #define ADC1_DR_Address ((u32)0x40012400+0x4c)
  4. uint16_t ADC_ConvertedValue[3];
  5. /*******************************************************************************
  6. * 函 數 名         : ADCx_Init
  7. * 函數功能                     : ADC初始化       
  8. * 輸    入         : 無
  9. * 輸    出         : 無
  10. *******************************************************************************/
  11. void ADCx_Init(void)
  12. {
  13.         GPIO_InitTypeDef GPIO_InitStructure; //定義結構體變量       
  14.         ADC_InitTypeDef  ADC_InitStructure;
  15.         DMA_InitTypeDef DMA_InitStructure;
  16.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1|RCC_APB2Periph_AFIO,ENABLE);       
  17.         RCC_ADCCLKConfig(RCC_PCLK2_Div6);//設置ADC分頻因子6 72M/6=12,ADC最大時間不能超過14M
  18.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
  19.        
  20.         DMA_DeInit(DMA1_Channel1);
  21.         DMA_InitStructure.DMA_PeripheralBaseAddr =(u32)&ADC1->DR;
  22.         DMA_InitStructure.DMA_MemoryBaseAddr =(u32)&ADC_ConvertedValue;
  23.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
  24.         DMA_InitStructure.DMA_BufferSize = 2;                                       
  25.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  26.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;      
  27.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  28.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  29.         DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  30.         DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  31.         DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  32.         DMA_Init(DMA1_Channel1, &DMA_InitStructure);
  33.         DMA_Cmd(DMA1_Channel1, ENABLE);
  34.        
  35.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//ADC
  36.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;        //模擬輸入
  37.         //GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  38.         GPIO_Init(GPIOA,&GPIO_InitStructure);
  39.        
  40.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//ADC
  41.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;        //模擬輸入
  42.         //GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  43.         GPIO_Init(GPIOB,&GPIO_InitStructure);       

  44.         ADC_DeInit(ADC1);//?? ADC1,?? ADC1,
  45.         ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
  46.         ADC_InitStructure.ADC_ScanConvMode = ENABLE;//掃描模式       
  47.         ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//開啟連續轉換
  48.         ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//禁止觸發檢測,使用軟件觸發
  49.         ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右對齊       
  50.         ADC_InitStructure.ADC_NbrOfChannel = 2;//1個轉換在規則序列中 也就是只轉換規則序列1
  51.         ADC_Init(ADC1, &ADC_InitStructure);//ADC初始化
  52.        
  53.         ADC_DMACmd(ADC1, ENABLE);
  54.         ADC_Cmd(ADC1, ENABLE);//開啟AD轉換器
  55.        
  56.         ADC_ResetCalibration(ADC1);//重置指定的ADC的校準寄存器
  57.         while(ADC_GetResetCalibrationStatus(ADC1));//獲取ADC重置校準寄存器的狀態
  58.        
  59.         ADC_StartCalibration(ADC1);//開始指定ADC的校準狀態
  60.         while(ADC_GetCalibrationStatus(ADC1));//獲取指定ADC的校準程序

  61.         ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能或者失能指定的ADC的軟件轉換啟動功能
  62. }

  63. /*******************************************************************************
  64. * 函 數 名         : Get_ADC_Value
  65. * 函數功能                   : 獲取通道ch的轉換值,取times次,然后平均        
  66. * 輸    入         : ch:通道編號
  67.                                          times:獲取次數
  68. * 輸    出         : 通道ch的times次轉換結果平均值
  69. *******************************************************************************/
  70. u16 Get_ADC_Value(u8 ch,u8 times)
  71. {
  72.         u32 temp_val=0;
  73.         u8 t;
  74.         //設置指定ADC的規則組通道,一個序列,采樣時間
  75.         ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5);        //ADC1,ADC通道,239.5個周期,提高采樣時間可以提高精確度                            
  76.        
  77.         for(t=0;t<times;t++)
  78.         {
  79.                 //ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能指定的ADC1的軟件轉換啟動功能       
  80.                 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待轉換結束
  81.                 //temp_val+=ADC_GetConversionValue(ADC1);
  82.                 temp_val+=ADC_ConvertedValue[0];
  83.                 delay_ms(5);
  84.         }
  85.         return temp_val/times;
  86. }
  87. u16 Get_ADC1_Value(u8 ch,u8 times)
  88. {
  89.         u32 temp_val=0;
  90.         u8 t;
  91.         //設置指定ADC的規則組通道,一個序列,采樣時間
  92.         ADC_RegularChannelConfig(ADC1, ch, 2, ADC_SampleTime_239Cycles5);        //ADC1,ADC通道,239.5個周期,提高采樣時間可以提高精確度                            
  93.        
  94.         for(t=0;t<times;t++)
  95.         {
  96.                 //ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能指定的ADC1的軟件轉換啟動功能       
  97.                 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待轉換結束
  98.                 //temp_val+=ADC_GetConversionValue(ADC1);
  99.                 temp_val+=ADC_ConvertedValue[1];
  100.                 delay_ms(5);
  101.         }
  102.         return temp_val/times;
  103. }
復制代碼
  1. #include "system.h"
  2. #include "SysTick.h"
  3. #include "led.h"
  4. #include "usart.h"
  5. #include "adc.h"


  6. /*******************************************************************************
  7. * 函 數 名         : main
  8. * 函數功能                   : 主函數
  9. * 輸    入         : 無
  10. * 輸    出         : 無
  11. *******************************************************************************/
  12. int main()
  13. {
  14.         u8 i=0;
  15.         u16 value=0;
  16.         float vol;
  17.         u16 value1=0;
  18.         float vol1;
  19.         SysTick_Init(72);
  20.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中斷優先級分組 分2組
  21.         LED_Init();
  22.         USART1_Init(9600);
  23.         ADCx_Init();
  24.        
  25.         while(1)
  26.         {
  27.                 i++;
  28.                 if(i%20==0)
  29.                 {
  30.                         led1=!led1;
  31.                 }
  32.                
  33.                 if(i%50==0)
  34.                 {
  35.                         value1=Get_ADC1_Value(ADC_Channel_9,20);
  36.                         value=Get_ADC_Value(ADC_Channel_1,20);
  37.                         //printf("檢測AD值為:%d\r\n",value);
  38.                         vol=(float)value*(3.3/4096);
  39.                         vol1=(float)value1*(3.3/4096);
  40.                         printf("檢測電壓值為:%.2fV\r\n",vol1);
  41.                         printf("檢測電壓值為:%.2fV\r\n",vol);
  42.                 }
  43.                 delay_ms(10);       
  44.         }
  45. }
復制代碼


所有資料51hei提供下載:
兩路ADC帶DMA模數轉換.7z (185.71 KB, 下載次數: 75)





評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品视频一区二区三区四区国 | 亚洲精品成人 | 久久久久久久成人 | 日本涩涩视频 | 日韩 欧美 二区 | 毛片免费观看 | 2019精品手机国产品在线 | 日本久久久一区二区三区 | 草久久 | 五月天婷婷狠狠 | 国产精品大片 | 欧美三区在线观看 | 国产精品美女久久久久 | a级毛片免费高清视频 | 欧美国产日韩在线观看 | 亚洲精品电影网在线观看 | 五月婷婷婷 | 久久久久久久电影 | 日韩欧美在线视频 | 欧美激情精品久久久久 | 亚洲精品乱码久久久久久久久 | 国产在线一区二区三区 | 天天欧美| 天天天操| 精品国产三级 | 超碰成人在线观看 | 中文字幕色站 | 亚洲第一av网站 | 九七午夜剧场福利写真 | 久久久久久成人 | 成人免费小视频 | 亚洲天天| 午夜精品一区二区三区三上悠亚 | 久久亚洲天堂 | 999视频在线播放 | 一区二区三区四区电影视频在线观看 | 免费在线观看一区二区三区 | 欧美日韩久久久 | 国产精品一区在线观看 | 亚洲成av片人久久久 | 欧美一二三四成人免费视频 |