作业内容:
1、2个或以上同学相互连接,利用CAN通信,向对方发送带有本人姓名的信息。连线方式:按基本原理性电路(不带收发器芯片)连接,参考教材图10-1。
程序源码只需要修改发送的信息即可,接下来看发送结果
可以看到双方都接收到了对方发送的姓名信息。
2、在ADC实验中,结合热敏电阻,分别通过触摸芯片表面和热敏电阻,引起A/D值变化,显示芯片内部温度和当前温度。
1)单端:触摸芯片表面温度
可以看到触摸芯片表面后,内部传感器的温度上升了,表现为内部温度传感器A/D值上升,从891上升到903.
2)差分:将引脚47接地、46接3.3V,观察通道1情况
可以看到通道1的A/D值为0,因为正负接反了。
3)差分:将引脚46接地、47接3.3V,观察通道1情况
可以看到此时电压为正,且接近最大值
4)类似方法,观察通道15
可以看到和通道1是一样的情况
3、用实验验证,对于有数据的某扇区,如果没有擦除(Flash_erase),可否写入新数据?注:扇区号为学号 后2位,数据文本中要有姓名。
查看源程序flash.c 的flash_write函数可知,每次写入前都会擦除扇区,所以我们注释掉该行代码。
源代码:main.c
#define GLOBLE_VAR
#include "includes.h"
int main(void)
{
uint8_t mK1[32]; //按照逻辑读方式从指定flash区域中读取的数据
uint8_t mK2[32]; //按照物理读方式从指定flash区域中读取的数据
uint8_t flash_test1[32]={'W','a','n','g','L','u','o','2','1',
'1',' ','G','u','a','n','X','i','n','y',
'i',' ','D','i','Y','i','C','i','X','i','e'};
uint8_t flash_test2[32]={'W','a','n','g','L','u','o','2','1',
'1',' ','G','u','a','n','X','i','n','y',
'i',' ','D','i','E','r','C','i','X','i','e'};
uint8_t result; //判断扇区是否为空标识
//(1.2)【不变】关总中断
DISABLE_INTERRUPTS;
//(1.5)用户外设模块初始化
gpio_init(LIGHT_BLUE,GPIO_OUTPUT,LIGHT_ON); //初始化蓝灯
//(1.7)【不变】开总中断
ENABLE_INTERRUPTS;
printf("------------------------------------------------------\n");
printf(" 广州大学 网络211 GXY\n");
printf(" 用实验验证: \n");
printf(" 对于有数据的某扇区,如果没有擦除(Flash_erase)\n");
printf(" 可否写入新数据?\n");
printf("------------------------------------------------------\n");
//擦除第50扇区
flash_erase(50);
//向50扇区第0偏移地址开始写32个字节数据
flash_write(50,0,32,(uint8_t *) "网络211 官欣奕 第一次写");
flash_read_logic(mK1,50,0,32); //从50扇区读取32个字节到mK1中
printf("逻辑读方式读取50扇区的32字节的内容: %s\n",mK1);
flash_erase(50);
result = flash_isempty(50,MCU_SECTORSIZE); // 判断第50扇区是否为空
printf("第50扇区是否为空,1表示空,0表示不空:%d\n",result);
//第二次写入数据
flash_write(50,0,32,(uint8_t *) "网络211 官欣奕 第二次写");
flash_read_logic(mK1,50,0,32); //从50扇区读取32个字节到mK1中
printf("逻辑读方式读取50扇区的32字节的内容: %s\n",mK1);
result = flash_isempty(50,MCU_SECTORSIZE); // 判断第50扇区是否为空
printf("第50扇区是否为空,1表示空,0表示不空:%d\n",result);
//擦除第50扇区
flash_erase(50);
//向50扇区写32个字节数据
flash_write_physical(0x8019000,32,flash_test1);
flash_read_physical(mK2,0x8019000,32); //从50扇区读取32个字节到mK2中
printf("物理读方式读取50扇区的32字节的内容: %s\n",mK2);
flash_erase(50);
result = flash_isempty(50,MCU_SECTORSIZE); // 判断第50扇区是否为空
printf("第50扇区是否为空,1表示空,0表示不空:%d\n",result);
//第二次写入数据
flash_write_physical(0x8019000,32,flash_test2);
flash_read_physical(mK2,0x8019000,32);
printf("物理读方式读取50扇区的32字节的内容: %s\n",mK2);
result = flash_isempty(50,MCU_SECTORSIZE); // 判断第50扇区是否为空
printf("第50扇区是否为空,1表示空,0表示不空:%d\n",result);
}
未注释掉擦除函数:
可以看到能成功写入新数据并读出来
注释掉擦除函数后:
可以看到对于有数据的扇区,如果没有擦除扇区数据,是无法写入新数据的