08 第8章作业 | 嵌入式

219 阅读2分钟

1. 用实验验证,对于有数据的某扇区,如果没有擦除(Flash_erase),可否写入新数据?注:扇区号为学号 后2位,数据文本中要有姓名。

针对扇区中同一偏移位置上的数据进行测试

初次写入值:

Hello! My name is LiuTing_Perilt

未擦除后往同一位置写入:

Test NO Flash_earse

测试结果显示:

针对扇区中同一位置的数据,没有擦除再次写入,则会覆盖掉原来的数据

image.png  

针对扇区中不同位置上的数据进行测试

t.png

[0-32]已写入: 

Hello! My name is LiuTing_Perilt

未擦除扇区后往[33,65] 写入:

Test NO Flash_earse

测试结果显示: 扇区也可正常写入数据,并读取显示

rr.png

核心代码

image.png

运行结果:

image.png

2. 在ADC模块中,显示当前温度和芯片内部温度,感受温度变化(分别用冷、热触碰)。

STM32L431芯片的ADC引脚表

image.png 在64引脚封装的STM32L431芯片中, 只有ADC只有一个模块,即ADC1

  • 该模块有19个单端通道,其中有三个特殊通道:
    • 通道0:对应芯片参考电压引脚VREF
    • 通道17:对应内部温度传感器
    • 通道18:对应备用电池电源引脚VBAT

实验中需要测试当前温度与芯片内部温度,则对应选择通道15-16,17-18,编程对应使用通道15和17

主要编程过程

  1. ADC初始化:

    adc_init(ADC_CHANNEL_15,AD_DIFF);//初始化ADC通道15
    adc_init(ADC_CHANNEL_TEMPSENSOR,AD_SINGLE);//初始化ADC通道:内部温度
    
  2. 读取A/D转化值

    //对应通道15(GEC12、11)则为热敏电阻
    num_AD2 = adc_read(ADC_CHANNEL_15);
    num_AD3 = adc_read(ADC_CHANNEL_TEMPSENSOR);
    
  3. 将A/D值转为实际温度值

    //物理量回归,将对应A/D值转换为实际温度值
    curTemp = Regression_Ext_Temp(num_AD2);
    mcuTemp = Regression_MCU_Temp(num_AD3);
    

    调用对应函数

    image.png

    image.png

  4. 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);
    

结果展示

触摸芯片表面

acbe5cc4f24649644ebb5744c124922.jpg ed29acb3d03bbf0b8d4002346a5ff43.jpg

可观察到芯片内部温度的变化,但由于导热传热较慢,温度变化也就较小

触摸热敏电阻

a758c871a15c8d4ed246e5db185e047.jpg e7ad0c5e525875126fa4359427e5c48.jpg

很明显能观察到当前温度从15飙升到32再到42度

071028608d49b378d8e59ce22974d1c.jpg

松手后温度又回到16 , 说明导热快,温度变化较大