OpenEdv-开源电子网

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

打扰一下原子哥和大家,帮我看一下这个NTC采集程序对不对

[复制链接]

211

主题

774

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2018-3-26
在线时间
288 小时
发表于 昨天 14:55 | 显示全部楼层 |阅读模式
1金钱
  1. // NTC   PD0  PD2  PD4  PD6  
  2. void NTC_Init(void)
  3. {
  4.   
  5.     RCC->APB2ENR |= 1 << 5;    // ?? GPIOD ??
  6.     RCC->APB2ENR |= 1 << 9;    // ?? ADC1 ??

  7.     // PD0
  8.     GPIOD->CRL &= 0xFFFFFFF0;
  9.     GPIOD->CRL |= 0x00000008;

  10.     // PD2
  11.     GPIOD->CRL &= 0xFFFFF0FF;
  12.     GPIOD->CRL |= 0x00000800;

  13.     // PD4
  14.     GPIOD->CRL &= 0xFFF0FFFF;
  15.     GPIOD->CRL |= 0x00080000;

  16.     // PD6
  17.     GPIOD->CRL &= 0xF0FFFFFF;
  18.     GPIOD->CRL |= 0x08000000;

  19.     // ADC??
  20.     RCC->APB2RSTR |= 1 << 9;
  21.     RCC->APB2RSTR &= ~(1 << 9);

  22.     ADC1->CR1 = 0;
  23.     ADC1->CR2 = 0;

  24.     ADC1->CR2 |= 1 << 0;       // ??ADC??
  25.     delay_ms(10);

  26.     ADC1->CR2 |= 1 << 1;       // ????
  27.     while((ADC1->CR2 & 1<<1) != 0);

  28.     ADC1->CR2 |= 1 << 2;       // ????
  29.     while((ADC1->CR2 & 1<<2) != 0);
  30. }

  31. float NTC0_Get_Temp(void)
  32. {
  33.     u16 adc;
  34.     float vol, rntc, temp;

  35.     ADC1->SQR3 = 12;
  36.     ADC1->CR2 |= 1<<22;
  37.     while((ADC1->SR & 1<<1) == 0);
  38.     adc = ADC1->DR;

  39.     vol = adc * 3.3f / 4096;
  40.     rntc = vol * 10000 / (3.3f - vol);
  41.     temp = 1.0f/(1.0f/298.15f + log(rntc/10000)/3950.0f) - 273.15f;

  42.     return temp;
  43. }

  44. float NTC1_Get_Temp(void)
  45. {
  46.     u16 adc;
  47.     float vol, rntc, temp;

  48.     ADC1->SQR3 = 14;
  49.     ADC1->CR2 |= 1<<22;
  50.     while((ADC1->SR & 1<<1) == 0);
  51.     adc = ADC1->DR;

  52.     vol = adc * 3.3f / 4096;
  53.     rntc = vol * 10000 / (3.3f - vol);
  54.     temp = 1.0f/(1.0f/298.15f + log(rntc/10000)/3950.0f) - 273.15f;

  55.     return temp;
  56. }

  57. float NTC2_Get_Temp(void)
  58. {
  59.     u16 adc;
  60.     float vol, rntc, temp;

  61.     ADC1->SQR3 = 16;
  62.     ADC1->CR2 |= 1<<22;
  63.     while((ADC1->SR & 1<<1) == 0);
  64.     adc = ADC1->DR;

  65.     vol = adc * 3.3f / 4096;
  66.     rntc = vol * 10000 / (3.3f - vol);
  67.     temp = 1.0f/(1.0f/298.15f + log(rntc/10000)/3950.0f) - 273.15f;

  68.     return temp;
  69. }


  70. float NTC3_Get_Temp(void)
  71. {
  72.     u16 adc;
  73.     float vol, rntc, temp;

  74.     ADC1->SQR3 = 18;
  75.     ADC1->CR2 |= 1<<22;
  76.     while((ADC1->SR & 1<<1) == 0);
  77.     adc = ADC1->DR;

  78.     vol = adc * 3.3f / 4096;
  79.     rntc = vol * 10000 / (3.3f - vol);
  80.     temp = 1.0f/(1.0f/298.15f + log(rntc/10000)/3950.0f) - 273.15f;

  81.     return temp;
  82. }
复制代码
采集引脚是PD0、PD2、PD4、PD60

回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

如发现本坛存在违规或侵权内容, 请点击这里发送邮件举报 (或致电020-38271790)。请提供侵权说明和联系方式。我们将及时审核依法处理,感谢配合。

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

GMT+8, 2026-5-16 15:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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