嵌入式第八、十章作业

作业内容:

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

}

未注释掉擦除函数:

        可以看到能成功写入新数据并读出来

注释掉擦除函数后:

可以看到对于有数据的扇区,如果没有擦除扇区数据,是无法写入新数据的

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值