差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
stm32:adc [2025/01/13 19:42] laythystm32:adc [2025/01/26 12:47] (当前版本) laythy
行 1: 行 1:
-ADC.c 文件 (ADC.h文件就不写在这里) : +===Analog Digital Convert=== 
-<code>+ 
 +<code>// main.c 
 + 
 +#include "stm32f10x.h"                  // Device header 
 +#include "math.h" 
 +#include "Delay.h" 
 +#include "OLED.h" 
 +#include "ADC.h
 + 
 +int main() 
 +
 +    // rawvolt: 读取到的电压值. R_NTC: 用rawvolt和实际电路计算NTC电阻阻值. accTemp: 用公式通过阻值来计算实际温度. 
 +    // 公式: NTC热敏电阻的电阻-温度关系通常使用Steinhart-Hart方程或其简化形式(Beta公式)来表示. 
 +    uint16_t rawVolt = 0, R_NTC = 0, xiaoshu = 0; 
 +    double accTemp = 0; 
 +     
 +    OLED_Init(); 
 +    ADC_Init_PB1(); 
 +    OLED_ShowString(1, 1, "NTC TEMPRATURE!"); 
 +     
 +    while(1) 
 +    { 
 +        // 用函数读取ADC的电压值. 
 +        rawVolt = ADC_Get_PB1_Value(); 
 +        // 我才用的NTC25摄氏度标准电阻为10K, 将其串联到10K定值电阻上, 接到0-3.3V电源, 中点接出引线接到ADC in. 
 +        R_NTC = (rawVolt * 10000) / (4096 - rawVolt); 
 +        // 下用的是Beta公式用电阻值计算实际温度. 
 +        accTemp = 1.0 / (1.0 / 298.15 + 1.0 / 3950.0 * log(R_NTC / 10000.0)) - 273.15;; 
 +        // 由于我的OLED显示函数能显示小数, 这里取accTemp的小数部分, 精度小数点后2位. 
 +        xiaoshu = (int)(accTemp*100)%100; 
 +        OLED_ShowString(2, 1, "12ADC:"); 
 +        OLED_ShowNum(2, 10, rawVolt, 4); 
 +        OLED_ShowString(3, 1, "R_NTC:"); 
 +        OLED_ShowNum(3, 10, R_NTC, 6); 
 +        OLED_ShowString(4, 1, "accTemp:"); 
 +        OLED_ShowNum(4, 10, accTemp, 2); 
 +        OLED_ShowChar(4, 12, '.'); 
 +        OLED_ShowNum(4, 13, xiaoshu, 2); 
 +        OLED_ShowString(4, 15, "C"); 
 +        Delay_ms(1000); 
 +    } 
 +} 
 +</code> 
 +<code>// ADC.c 
 #include "stm32f10x.h"                  // Device header #include "stm32f10x.h"                  // Device header
 #include "stm32f10x_rcc.h" #include "stm32f10x_rcc.h"
行 54: 行 98:
     // 72/6 = 12Mhz, * 239.5T(采样周期)+12.5T(转换周期) = 252T = 5.6微秒.     // 72/6 = 12Mhz, * 239.5T(采样周期)+12.5T(转换周期) = 252T = 5.6微秒.
     return ADC_GetConversionValue(ADC2);     return ADC_GetConversionValue(ADC2);
-} 
-</code> 
-主程序 main.c : 
-<code> 
-#include "stm32f10x.h"                  // Device header 
-#include "math.h" 
-#include "Delay.h" 
-#include "OLED.h" 
-#include "ADC.h" 
- 
-int main() 
-{ 
-    // rawvolt: 读取到的电压值. R_NTC: 用rawvolt和实际电路计算NTC电阻阻值. accTemp: 用公式通过阻值来计算实际温度. 
-    // 公式: NTC热敏电阻的电阻-温度关系通常使用Steinhart-Hart方程或其简化形式(Beta公式)来表示. 
-    uint16_t rawVolt = 0, R_NTC = 0, xiaoshu = 0; 
-    double accTemp = 0; 
-     
-    OLED_Init(); 
-    ADC_Init_PB1(); 
-    OLED_ShowString(1, 1, "NTC TEMPRATURE!"); 
-     
-    while(1) 
-    { 
-        // 用函数读取ADC的电压值. 
-        rawVolt = ADC_Get_PB1_Value(); 
-        // 我才用的NTC25摄氏度标准电阻为10K, 将其串联到10K定值电阻上, 接到0-3.3V电源, 中点接出引线接到ADC in. 
-        R_NTC = (rawVolt * 10000) / (4096 - rawVolt); 
-        // 下用的就是Beta公式用电阻值计算实际温度. 
-        accTemp = 1.0 / (1.0 / 298.15 + 1.0 / 3950.0 * log(R_NTC / 10000.0)) - 273.15;; 
-        // 由于我的OLED显示函数不能显示小数, 这里取accTemp的小数部分, 精度小数点后2位. 
-        xiaoshu = (int)(accTemp*100)%100; 
-        OLED_ShowString(2, 1, "12ADC:"); 
-        OLED_ShowNum(2, 10, rawVolt, 4); 
-        OLED_ShowString(3, 1, "R_NTC:"); 
-        OLED_ShowNum(3, 10, R_NTC, 6); 
-        OLED_ShowString(4, 1, "accTemp:"); 
-        OLED_ShowNum(4, 10, accTemp, 2); 
-        OLED_ShowChar(4, 12, '.'); 
-        OLED_ShowNum(4, 13, xiaoshu, 2); 
-        OLED_ShowString(4, 15, "C"); 
-        Delay_ms(1000); 
-    } 
 } }
 </code> </code>