OpenEdv-开源电子网

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

原子战舰stm32开发板--内部温度传感器实验--几点疑惑

[复制链接]

3

主题

7

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-3-13
在线时间
0 小时
发表于 2015-8-23 10:36:17 | 显示全部楼层 |阅读模式
5金钱
本人在学习原子战舰stm32开发板实验--内部温度传感器实验时,有以下疑惑,还望各位可以给予帮助,谢谢。
(1)ADC初始化部分代码
[mw_shl_code=c,true]//初始化ADC //这里我们仅以规则通道为例 //我们默认将开启通道0~3 void T_Adc_Init(void) //ADC通道初始化 { //变量定义 ADC_InitTypeDef ADC_InitStructure; //用于ADC初始化 //使能GPIOA时钟和ADC1时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1,ENABLE ); //使能GPIOA,ADC1通道时钟 //复位ADC1 同时设置ADC1分频因子 设置分频因子为6 72MHz/6=12MHZ ADC_DeInit(ADC1); //复位 RCC_ADCCLKConfig(RCC_PCLK2_Div6); //ADC最大时间不能超过14MHZ,否则会转换不准确 //初始化ADC1参数 设置ADC1的工作模式以及规则序列的相关信息 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC1(和ADC2)工作在独立模式 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通道1 顺序进行规则转换的ADC通道数目是通道1 ADC_Init(ADC1,&ADC_InitStructure); //根据ADC_InitStrcuture中指定的参数初始化外设ADCx的寄存器 //开启内部温度传感器 ADC_TempSensorVrefintCmd(ENABLE); //使能ADC 并校准 ADC_Cmd(ADC1,ENABLE); //使能 ADC_ResetCalibration(ADC1); //复位校准 while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束 ADC_StartCalibration(ADC1); // ADC转换校准 while(ADC_GetCalibrationStatus(ADC1)); //等待AD校准结束 }[/mw_shl_code]
(2)疑惑
    a. 内部温度传感器连接的是ADCx_IN16,即和通道16相连,那么在ADC初始化函数中
[mw_shl_code=c,true]ADC_InitStructure.ADC_NbrOfChannel = 1; //选择通道 ADC通道1 顺序进行规则转换的ADC通道数目是通道1[/mw_shl_code]
这句话就应该配置为16,而不是1啊。原例程是不是错了?
    b. 内部温度传感器并没有占用GPIOA啊,为什么依旧要开启GPIOA的时钟?
[mw_shl_code=c,true]//使能GPIOA时钟和ADC1时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1,ENABLE ); //使能GPIOA,ADC1通道时钟[/mw_shl_code]
   c. 查阅一些别的资料,有的说要选中ADC1的通道16作为输入,设置采样时间17.1us ( Ncycle × tADC = 17.1靤 )。而原例程中没有这句话,是否是漏掉了?
[mw_shl_code=c,true]// ADC1 regular channel16 Temp Sensor configuration ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_55Cycles5);[/mw_shl_code]

感谢各位给予解答,谢谢!

最佳答案

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

b问题还不是很清楚。 对于a: ADC_NbrofChannel 不是用来选择通道的,而是用来告诉芯片在ADC1里面你使用了几个通道,这里你只是用了一个,因而值为1. 对于c:你在c问题下面贴的那个图里面 ADC_SampleTime_55Cycle5 就是采样时间,为55.5个采样周期;而 ADC_Channel_16 就是你选择了通道16,你可以看一下库函数里面的代码的。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-8-11
在线时间
0 小时
发表于 2015-8-23 10:36:18 | 显示全部楼层
b问题还不是很清楚。
对于a: ADC_NbrofChannel 不是用来选择通道的,而是用来告诉芯片在ADC1里面你使用了几个通道,这里你只是用了一个,因而值为1.
对于c:你在c问题下面贴的那个图里面 ADC_SampleTime_55Cycle5 就是采样时间,为55.5个采样周期;而 ADC_Channel_16 就是你选择了通道16,你可以看一下库函数里面的代码的。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-23 13:59:17 | 显示全部楼层
b,不开启也可以的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

7

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-3-13
在线时间
0 小时
 楼主| 发表于 2015-8-28 08:19:51 | 显示全部楼层
回复【2楼】Boooooosh:
---------------------------------
谢谢啦
回复

使用道具 举报

3

主题

7

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-3-13
在线时间
0 小时
 楼主| 发表于 2015-8-28 08:20:09 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
谢谢原子哥
回复

使用道具 举报

33

主题

218

帖子

0

精华

高级会员

Rank: 4

积分
568
金钱
568
注册时间
2015-1-12
在线时间
75 小时
发表于 2020-6-5 09:31:03 | 显示全部楼层
正点原子 发表于 2015-8-23 13:59
b,不开启也可以的。

内部的ADCx_IN17,内部电源模块也没用上啊,为什么教程强调必须开启这个通道呢?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-28 23:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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