OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3124|回复: 6

内部温度传感器的问题

[复制链接]

10

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2015-8-1
在线时间
11 小时
发表于 2015-8-17 16:24:04 | 显示全部楼层 |阅读模式
5金钱
adc采样如果用十通道,定义PC0作为输入
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
GPIO_Init(GPIOC,&GPIO_InitStructure);
那么如果是采温度(十六通道)是定义空的引脚作为输入,还是不用定义只需加一句
ADC_TempSensorVrefintCmd(ENABLE);
因为看有的只采温度也定义了PC0
脑子有点乱,希望给解答解答

最佳答案

查看完整内容[请看2#楼]

你就直接转换16通道就可以了,为什么还要弄个空引脚作为输入呢?你输入什么?
每个人都说我蠢い
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

611

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1929
金钱
1929
注册时间
2014-10-6
在线时间
625 小时
发表于 2015-8-17 16:24:05 | 显示全部楼层
你就直接转换16通道就可以了,为什么还要弄个空引脚作为输入呢?你输入什么?
回复

使用道具 举报

13

主题

611

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1929
金钱
1929
注册时间
2014-10-6
在线时间
625 小时
发表于 2015-8-17 16:32:12 | 显示全部楼层
ADC的每个通道都是和某个IO对应的,不是你定义出来的!
回复

使用道具 举报

10

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2015-8-1
在线时间
11 小时
 楼主| 发表于 2015-8-17 16:43:53 | 显示全部楼层
回复【2楼】烟酒不沾:
---------------------------------
恩呢!十通道对应PC0,就把PC0作为采集输入,那十六通道怎么办啊,温度应该不用输入了吧,直接开启内部温度传感器,还是要弄一个空引脚作为输入
每个人都说我蠢い
回复

使用道具 举报

10

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2015-8-1
在线时间
11 小时
 楼主| 发表于 2015-8-17 17:16:04 | 显示全部楼层
回复【4楼】烟酒不沾:
---------------------------------
#include "pbdata.h"

void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void USART_Configuration(void);
void ADC_Configuration(void);

int fputc(int ch,FILE *f)
{
USART_SendData(USART1,(u8)ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
return ch;
}

int main(void)
{
   u32 ad=0;
   u8 i=0;

   RCC_Configuration();
   GPIO_Configuration();
   USART_Configuration();
   NVIC_Configuration();
   ADC_Configuration();
   
   while(1)
   {
     ad=0;
 for(i=0;i<50;i++)
 {
  ADC_SoftwareStartConvCmd(ADC1,ENABLE);
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
ad=ad+ADC_GetConversionValue(ADC1);
 } 
  
  ad=ad/50;
  
  //printf("ad =%f\r\n",3.3/4095*ad);

  printf("temp =%f\r\n",(1.43-3.3/4095*ad)/0.0043+25);

  delay_ms(1000);
  delay_ms(1000);
  delay_ms(1000);
   }
}

void RCC_Configuration(void)
{
    SystemInit();//72m
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div6);//12M  ×??ó14M

}

void GPIO_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
//LED
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//AD
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
GPIO_Init(GPIOC,&GPIO_InitStructure);
}

void NVIC_Configuration(void)
{
    NVIC_InitTypeDef NVIC_InitStructure; 

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); 

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; 
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; 
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; 
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
NVIC_Init(&NVIC_InitStructure);
}

void USART_Configuration(void)
{
    USART_InitTypeDef  USART_InitStructure;

USART_InitStructure.USART_BaudRate=9600;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;

USART_Init(USART1,&USART_InitStructure);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
USART_Cmd(USART1,ENABLE);
USART_ClearFlag(USART1,USART_FLAG_TC);
}

void ADC_Configuration(void)
{
ADC_InitTypeDef ADC_InitStructure;

ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode=DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel=1;

ADC_Init(ADC1,&ADC_InitStructure);

//ADC_RegularChannelConfig(ADC1,ADC_Channel_10,1,ADC_SampleTime_239Cycles5);

ADC_RegularChannelConfig(ADC1,ADC_Channel_16,1,ADC_SampleTime_239Cycles5);
ADC_TempSensorVrefintCmd(ENABLE);

ADC_Cmd(ADC1,ENABLE);


ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));

ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));

ADC_SoftwareStartConvCmd(ADC1,ENABLE);

}

这是别人给我的
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//AD
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
GPIO_Init(GPIOC,&GPIO_InitStructure);
这几句应该没用啊,所以纠结啊
每个人都说我蠢い
回复

使用道具 举报

13

主题

611

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1929
金钱
1929
注册时间
2014-10-6
在线时间
625 小时
发表于 2015-8-17 17:28:48 | 显示全部楼层
这个测内部温度的,原子有原例程你看一下!
回复

使用道具 举报

10

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2015-8-1
在线时间
11 小时
 楼主| 发表于 2015-8-17 17:31:47 | 显示全部楼层
回复【6楼】烟酒不沾:
---------------------------------
他没加啊!但是我这个加了,⊙﹏⊙b汗那我去掉吧!谢谢解答!!
每个人都说我蠢い
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-16 07:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表