打印
[STM32F1]

STM32F103 ADC 单片机3V供电

[复制链接]
679|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ousj|  楼主 | 2021-1-11 21:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
代码:
#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| | 2021-1-11 21:59 | 只看该作者
换成3V供电,最后面的AD_value转换公式改成按3V计算了吗?

使用特权

评论回复
板凳
xxrs| | 2021-1-11 22:00 | 只看该作者
AD数据是怎么个不对,有没有什么规律?

使用特权

评论回复
地板
houcs| | 2021-1-11 22:04 | 只看该作者
不会呀,正常一样的;

使用特权

评论回复
5
dingy| | 2021-1-11 22:07 | 只看该作者
那数据有什么规律呢?

使用特权

评论回复
6
morrisk| | 2021-1-11 22:11 | 只看该作者
你ADC接GND看看是多少,然后再接VCC看是多少。

使用特权

评论回复
7
liuzaiy| | 2021-1-11 22:15 | 只看该作者
你选择的参考电压是3V吗

使用特权

评论回复
8
pangb| | 2021-1-11 22:35 | 只看该作者
数据不对, 是不是这个公式要改一下呢
AD_value  = 3300000/4096*ADC_ConvertedValue/1000;

因为不是 3.3V 了

使用特权

评论回复
9
dingy| | 2021-1-11 22:37 | 只看该作者
程序里的转换,你要跟着外部的实际情况走。

使用特权

评论回复
10
ousj|  楼主 | 2021-1-11 22:39 | 只看该作者
如果用内部参考电压就没事

使用特权

评论回复
11
houcs| | 2021-1-11 22:41 | 只看该作者
如果你的电压基准和供电引脚相连 那么就会改变了

使用特权

评论回复
12
liuzaiy| | 2021-1-11 22:44 | 只看该作者

那要看楼主的电压基准是什么

使用特权

评论回复
13
morrisk| | 2021-1-11 22:49 | 只看该作者
你测原始数据对不对

使用特权

评论回复
14
kangzj| | 2021-1-11 22:52 | 只看该作者
你别通过计算,你可能忘了修改内容了

使用特权

评论回复
15
hanwe| | 2021-1-11 22:54 | 只看该作者
这个只要原始数据是对的,那就是对的。

使用特权

评论回复
16
ousj|  楼主 | 2021-1-11 22:56 | 只看该作者

嗯,我再好好缕一缕吧,有了好消息及时通知大家

使用特权

评论回复
17
paotangsan| | 2021-2-3 23:19 | 只看该作者
应该可以采集的啊

使用特权

评论回复
18
renzheshengui| | 2021-2-3 23:23 | 只看该作者
但是采集的会不准确

使用特权

评论回复
19
wakayi| | 2021-2-3 23:26 | 只看该作者
要是外部电压基准的话就不行

使用特权

评论回复
20
wowu| | 2021-2-3 23:29 | 只看该作者
如果是内部电压基准的话  估计可以

使用特权

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

本版积分规则

712

主题

7557

帖子

1

粉丝