1. 用实验验证,对于有数据的某扇区,如果没有擦除(Flash_erase),可否写入新数据?注:扇区号为学号 后2位,数据文本中要有姓名。
针对扇区中同一偏移位置上的数据进行测试
初次写入值:
Hello! My name is LiuTing_Perilt
未擦除后往同一位置写入:
Test NO Flash_earse
测试结果显示:
针对扇区中同一位置的数据,没有擦除再次写入,则会覆盖掉原来的数据
针对扇区中不同位置上的数据进行测试
[0-32]已写入:
Hello! My name is LiuTing_Perilt
未擦除扇区后往[33,65] 写入:
Test NO Flash_earse
测试结果显示: 扇区也可正常写入数据,并读取显示
核心代码
运行结果:
2. 在ADC模块中,显示当前温度和芯片内部温度,感受温度变化(分别用冷、热触碰)。
STM32L431芯片的ADC引脚表
在64引脚封装的STM32L431芯片中, 只有ADC只有一个模块,即ADC1
- 该模块有19个单端通道,其中有三个特殊通道:
- 通道0:对应芯片参考电压引脚VREF
- 通道17:对应内部温度传感器
- 通道18:对应备用电池电源引脚VBAT
实验中需要测试当前温度与芯片内部温度,则对应选择通道15-16,17-18,编程对应使用通道15和17
主要编程过程
-
ADC初始化:
adc_init(ADC_CHANNEL_15,AD_DIFF);//初始化ADC通道15 adc_init(ADC_CHANNEL_TEMPSENSOR,AD_SINGLE);//初始化ADC通道:内部温度 -
读取A/D转化值
//对应通道15(GEC12、11)则为热敏电阻 num_AD2 = adc_read(ADC_CHANNEL_15); num_AD3 = adc_read(ADC_CHANNEL_TEMPSENSOR); -
将A/D值转为实际温度值
//物理量回归,将对应A/D值转换为实际温度值 curTemp = Regression_Ext_Temp(num_AD2); mcuTemp = Regression_MCU_Temp(num_AD3);调用对应函数
-
printf输出信息
printf("热敏电阻的A/D值:%d\r\n",num_AD2); printf("内部温度传感器的A/D值:%d\r\n",num_AD3); printf("当前温度值:%d\r\n",curTemp); printf("芯片内部温度:%d\r\n\n",mcuTemp);
结果展示
触摸芯片表面
可观察到芯片内部温度的变化,但由于导热传热较慢,温度变化也就较小
触摸热敏电阻
很明显能观察到当前温度从15飙升到32再到42度
松手后温度又回到16 , 说明导热快,温度变化较大