打印
[STM32F1]

STM32F103 ADC 单片机3V供电

[复制链接]
1162|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ousj|  楼主 | 2019-2-21 19:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
代码:
#define ADC0_DR_Address    ((u32)0x4001244C)

__IO u16 ADC_ConvertedValue;  

/*????2é?ùí¨μà???ú ê1?üGPIOê±?ó          éè??ADC2é?ùPA0???úD?o?*/
void ADC0_GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;   
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);         
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;                    //GPIOéè???a?£?aê?è?
  GPIO_Init(GPIOA, &GPIO_InitStructure);   
}


/*????ADC0μ?1¤×÷?£ê??aMDA?£ê?  */
void ADC0_Mode_Config(void)
{
  DMA_InitTypeDef DMA_InitStructure;
  ADC_InitTypeDef ADC_InitStructure;        
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //ê1?üMDA1ê±?ó
        /* DMA channel1 configuration */
  DMA_DeInit(DMA1_Channel1);  //???¨DMAí¨μà
  DMA_InitStructure.DMA_PeripheralBaseAddr = ADC0_DR_Address;//éè??DMAíaéèμ??·
  DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;        //éè??DMA?ú′?μ??·£?ADC×a???á1??±?ó·?è???μ??·
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //íaéè?aéè???aêy?Y′?ê?μ?à′?′
  DMA_InitStructure.DMA_BufferSize = 1;        //DMA?o3???éè???a1£?
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  DMA_Init(DMA1_Channel1, &DMA_InitStructure);

  /* Enable DMA channel1 */
  DMA_Cmd(DMA1_Channel1, ENABLE);  //ê1?üDMAí¨μà

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);        //ê1?üADC1ê±?ó

  /* ADC1 configuration */
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ê1ó??àá¢?£ê?£?é¨?è?£ê?
  ADC_InitStructure.ADC_ScanConvMode = ENABLE;
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //?TDèía?ó′¥·¢?÷
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //ê1ó?êy?Yóò????
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_NbrOfChannel = 1;  // ??óD1??×a??í¨μà
  ADC_Init(ADC1, &ADC_InitStructure);

  /* ADC1 regular channel11 configuration */
  ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5); //í¨μà12é?ù?ü?ú55.5??ê±?ó?ü?ú

  /* Enable ADC1 DMA */
  ADC_DMACmd(ADC1, ENABLE);         //ê1?üADCμ?DMA

  /* Enable ADC1 */
  ADC_Cmd(ADC1, ENABLE); //ê1?üADC1

  /* Enable ADC1 reset calibaration register */   
  ADC_ResetCalibration(ADC1);
  /* Check the end of ADC1 reset calibration register */
  while(ADC_GetResetCalibrationStatus(ADC1));

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

  /* Start ADC1 Software Conversion */
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);  //?aê?×a??
}

/*3?ê??ˉADC1 */
void ADC0_Init(void)
{
        ADC0_GPIO_Config();
        ADC0_Mode_Config();
}


AD_value  = 3300000/4096*ADC_ConvertedValue/1000;

目前我用了3V LDO给STM32F103供电,如果外部接入3.3V电压给单片机,AD采集可以正常执行,采集的结果也正确,但用3V供电AD也工作,但采集的数据不对了。
沙发
renyaq| | 2019-2-21 19:27 | 只看该作者
换成3V供电,最后面的AD_value转换公式改成按3V计算了吗?

使用特权

评论回复
板凳
xxrs| | 2019-2-21 19:31 | 只看该作者
AD数据是怎么个不对,有没有什么规律?

使用特权

评论回复
地板
houcs| | 2019-2-21 19:35 | 只看该作者
不会呀,正常一样的;

使用特权

评论回复
5
dingy| | 2019-2-21 19:38 | 只看该作者
那数据有什么规律呢?

使用特权

评论回复
6
morrisk| | 2019-2-21 19:43 | 只看该作者
你ADC接GND看看是多少,然后再接VCC看是多少。

使用特权

评论回复
7
liuzaiy| | 2019-2-21 19:46 | 只看该作者

你选择的参考电压是3V吗

使用特权

评论回复
8
pangb| | 2019-2-21 19:49 | 只看该作者
数据不对, 是不是这个公式要改一下呢
AD_value  = 3300000/4096*ADC_ConvertedValue/1000;

因为不是 3.3V 了

使用特权

评论回复
9
ousj|  楼主 | 2019-2-21 20:01 | 只看该作者

好的,我明天去单位试一下,多谢各位大侠了哈,结贴了先        

使用特权

评论回复
10
小灵通2018| | 2019-2-21 20:57 | 只看该作者
楼上说的对。

使用特权

评论回复
11
小灵通2018| | 2019-2-21 20:57 | 只看该作者
程序里的转换,你要跟着外部的实际情况走。

使用特权

评论回复
12
观海| | 2019-3-7 10:00 | 只看该作者
如果用内部参考电压就没事

使用特权

评论回复
13
guanjiaer| | 2019-3-7 10:11 | 只看该作者
如果你的电压基准和供电引脚相连 那么就会改变了

使用特权

评论回复
14
heimaojingzhang| | 2019-3-7 10:16 | 只看该作者
那要看楼主的电压基准是什么

使用特权

评论回复
15
keaibukelian| | 2019-3-7 10:25 | 只看该作者
这个 挺好明白的

使用特权

评论回复
16
598330983| | 2019-3-7 12:48 | 只看该作者
你测原始数据对不对

使用特权

评论回复
17
598330983| | 2019-3-7 12:48 | 只看该作者
你别通过计算,你可能忘了修改内容了。这个只要原始数据是对的,那就是对的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

712

主题

7557

帖子

1

粉丝