作业要求
1、2个或以上同学相互连接,利用CAN通信,向对方发送带有本人姓名的信息。连线方式:按基本原理性电路(不带收发器芯片)连接,参考教材图10-1。
2、在ADC实验中,结合热敏电阻,分别通过触摸芯片表面和热敏电阻,引起A/D值变化,显示芯片内部温度和当前温度。
3、用实验验证,对于有数据的某扇区,如果没有擦除(Flash_erase),可否写入新数据?
作业实现
1、2个或以上同学相互连接,利用CAN通信,向对方发送带有本人姓名的信息。连线方式:按基本原理性电路(不带收发器芯片)连接,参考教材图10-1。
线路连接:
实验代码:
设置ID,自身的ID为0x0AU,对方的ID为0x0BU
//(1.3)给主函数使用的局部变量赋初值
mMainLoopCount=0; //主循环次数变量
mFlag='A'; //灯的状态标志
mLightCount=0; //灯的闪烁次数
localMsgID = 0x0AU;
txMsgID = 0x0BU;
BitRate = 36;
if (mFlag=='L') //判断灯的状态标志
{
mLightCount++;
mFlag='A'; //灯的状态标志
gpio_set(LIGHT_RED,LIGHT_ON); //灯“亮”
//【***CAN模块发送一帧数据***】
if(can_send(CAN_1, txMsgID, 8, (uint8_t*)"I am LJW") != 0) printf("failed\r\n");
运行结果:
己方PC收到:
对方PC收到:
2、在ADC实验中,结合热敏电阻,分别通过触摸芯片表面和热敏电阻,引起A/D值变化,显示芯片内部温度和当前温度。
实验代码:
for(;;) //for(;;)(开头)
{
//(2.1)主循环次数变量+1
mMainLoopCount++;
//(2.2)未达到主循环次数设定值,继续循环
//延时1秒
if (mMainLoopCount<=3000000) continue;
//(2.3)达到主循环次数设定值,执行下列语句,进行灯的亮暗处理
//(2.3.1)清除循环次数变量
mMainLoopCount=0;
//(2.3.2)如灯状态标志mFlag为'L',灯的闪烁次数+1并显示,改变灯状态及标志
if (mFlag=='L') //判断灯的状态标志
{
mLightCount++;
mFlag='A'; //灯的状态标志
gpio_set(LIGHT_BLUE,LIGHT_ON); //灯“亮”
Delay_ms(1000);
}
//(2.3.3)如灯状态标志mFlag为'A',改变灯状态及标志
else
{
mFlag='L'; //灯的状态标志
gpio_set(LIGHT_BLUE,LIGHT_OFF); //灯“暗”
Delay_ms(1000);
}
num_AD1 = adc_ave(ADC_CHANNEL_1,8);
num_AD2 = adc_ave(ADC_CHANNEL_15,8);
num_AD3 = adc_ave(ADC_CHANNEL_TEMPSENSOR,8);
printf("通道1(GEC47、46)的A/D值: %d\r\n",num_AD1);
printf("通道15(GEC12、11)的A/D值:%d\r\n",num_AD2);
printf("内部温度传感器的A/D值:%d\r\n\n",num_AD3);
mCount++;
} //for(;;)结尾
运行结果:
3、用实验验证,对于有数据的某扇区,如果没有擦除(Flash_erase),可否写入新数据?
在第二次写入时,不要擦除第一次写入的内容
实验代码:
//擦除第50扇区
flash_erase(50);
//向50扇区第0偏移地址开始写32个字节数据
flash_write(50,0,32,(uint8_t *) "My name is LJW");
flash_read_logic(mK1,50,0,32); //从50扇区读取32个字节到mK1中
printf("逻辑读方式读取50扇区的32字节的内容: %s\n",mK1);
flash_write(50,0,32,(uint8_t *) "My name is LLL");
flash_read_logic(mK2,50,0,32); //从50扇区读取32个字节到mK2中
printf("逻辑读方式读取50扇区的32字节的内容: %s\n",mK2);
运行结果:
没有擦除,也可以写入新数据。