• 大小: 3.86MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-14
  • 语言: 其他
  • 标签: STM32程序  

资源简介

STM32F103RCT6程序例——电压测量例

资源截图

代码片段和文件信息

#include “adc.h“

uint16_t adc_mem[QUEUE_LEN];  //ADC缓冲队列
int ADC_LEN = 8;               //对列长度
int ADC_NUM = 3;               //相当于除数


void ADC_Config(void)
{
  ADC_InitTypeDef     ADC_InitStructure;
GPIO_InitTypeDef    GPIO_InitStruct;
  

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ENABLE);   //开启adc1和GPIOA的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 ENABLE);    

  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;     
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;             //配置PA1,PA2位模拟输入模式
  GPIO_Init(GPIOA &GPIO_InitStruct);                      //注册到结构体

ADC_DeInit(ADC1);                                           //将adc配置为缺省值

  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent ;          //adc 为独立转换模式
  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 数据右对齐
  ADC_InitStructure.ADC_NbrOfChannel = 2 ; //adc通道数为2个
  ADC_Init(ADC1 &ADC_InitStructure) ;//注册到结构体 

  /* ADC1 regular channels configuration */ 
  ADC_RegularChannelConfig(ADC1 ADC_Channel_0 1 ADC_SampleTime_71Cycles5);
ADC_RegularChannelConfig(ADC1 ADC_Channel_1 2 ADC_SampleTime_71Cycles5);
 
ADC_DMACmd(ADC1ENABLE);
  /* Enable ADC1 */
  ADC_Cmd(ADC1 ENABLE);
  /* Enable ADC1 reset calibration register */   
ADC_ResetCalibration(ADC1);
  /* Check the end of ADC1 reset calibration register */
  while(ADC_GetResetCalibrationStatus(ADC1));

  /* Start ADC1 calibration */
  ADC_StartCalibration(ADC1);
  /* Check the end of ADC1 calibration */
  while(ADC_GetCalibrationStatus(ADC1));

ADC_SoftwareStartConvCmd(ADC1 ENABLE);

}

void DMA_Config(void){

DMA_InitTypeDef     DMA_InitStruct;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1  ENABLE);

DMA_DeInit(DMA1_Channel1);

  DMA_InitStruct.DMA_PeripheralbaseAddr = (uint32_t)&ADC1->DR;   //dma外设地址为adc的数据寄存器
  DMA_InitStruct.DMA_MemorybaseAddr = (uint32_t)&adc_mem;
  DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralSRC;//内存作为数据目的地
  DMA_InitStruct.DMA_BufferSize = QUEUE_LEN ;//DMA深度为队列的总长度 这里是16
  DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设地址固定不变
  DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;//内存地址自动修改
  DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//外设半字长
  DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//内存半字长
  DMA_InitStruct.DMA_Mode = DMA_Mode_Circular;//dma循环方式,到达adc_mem末地址后自动返回到开始地址
  DMA_InitStruct.DMA_Priority = DMA_Priority_High;//dma为高优先级
  DMA_InitStruct.DMA_M2M = DMA_M2M_Disable;//禁止mem之间dma
  DMA_Init(DMA1_Channel1 &DMA_InitStruct);//注册到结构体
  
  DMA_Cmd(DMA1_Channel1 ENABLE);
}

/*
入口参数 channel  通道值
功能:在dma的缓冲队列中取出相应通道的ad值求和并且平均值滤波
返回值:滤波后的对应通道的ad值
*/
uint16_t read_adc(uint8_t channel)
{
uint32_t temp = 0;
uint16_t adc_val=0;
int

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-12-19 12:08  电压测量程序例\
     文件        3577  2016-11-19 00:52  电压测量程序例\core_cm3.crf
     目录           0  2016-12-19 12:08  电压测量程序例\drive\
     文件        3413  2016-11-22 22:09  电压测量程序例\drive\adc.c
     文件         201  2015-08-31 09:55  电压测量程序例\drive\adc.h
     文件        1501  2015-07-07 15:17  电压测量程序例\drive\key.c
     文件         176  2015-07-07 15:14  电压测量程序例\drive\key.h
     文件         897  2015-07-07 11:10  电压测量程序例\drive\Systick.c
     文件         404  2015-07-07 11:10  电压测量程序例\drive\Systick.h
     文件        1843  2015-09-01 20:28  电压测量程序例\drive\tim.c
     文件         266  2015-08-31 09:49  电压测量程序例\drive\tim.h
     文件        1938  2015-09-01 20:41  电压测量程序例\drive\uart.c
     文件         219  2015-08-31 09:29  电压测量程序例\drive\uart.h
     文件       82718  2016-11-22 22:09  电压测量程序例\JlinkLog.txt
     文件         671  2016-11-19 00:50  电压测量程序例\JlinkSettings.ini
     目录           0  2016-12-19 12:08  电压测量程序例\LCD12864\
     目录           0  2016-12-19 12:08  电压测量程序例\LCD1602\
     文件        2289  2015-09-01 20:35  电压测量程序例\LCD1602\lcd1602.c
     文件         511  2015-09-01 22:21  电压测量程序例\LCD1602\lcd1602.h
     目录           0  2016-12-19 12:08  电压测量程序例\lib\
     目录           0  2016-12-19 12:08  电压测量程序例\lib\inc\
     文件       43603  2015-07-08 22:15  电压测量程序例\lib\inc\font.h
     文件        8982  2014-11-09 16:24  电压测量程序例\lib\inc\misc.h
     文件         715  2015-07-07 12:47  电压测量程序例\lib\inc\spi.h
     文件       21690  2014-11-09 16:24  电压测量程序例\lib\inc\stm32f10x_adc.h
     文件        7555  2014-11-09 16:24  电压测量程序例\lib\inc\stm32f10x_bkp.h
     文件       27559  2014-11-09 16:24  电压测量程序例\lib\inc\stm32f10x_can.h
     文件        6573  2014-11-09 16:24  电压测量程序例\lib\inc\stm32f10x_cec.h
     文件        2162  2014-11-09 16:24  电压测量程序例\lib\inc\stm32f10x_crc.h
     文件       15233  2014-11-09 16:24  电压测量程序例\lib\inc\stm32f10x_dac.h
     文件        3818  2014-11-09 16:24  电压测量程序例\lib\inc\stm32f10x_dbgmcu.h
............此处省略165个文件信息

评论

共有 条评论