作业
1.2个或以上同学相互连接,利用CAN通信,向对方发送带有本人姓名的信息。连线方式:按基本原理性电路(不带收发器芯片)连接,参考教材图10-1。
连接方式如下图所示
现实连线方式
编程实现
首先要设置参数,设置本地ID为0X0B,设置发送过去的ID为0X0A,设置位速率为36
初始化CAN模块,使能CAN模块中断
发送数据
发送数据后会进入中断
编写中断处理程序
void CAN1_RX0_IRQHandler(void)
{
uint8_t buff[8];
uint8_t len = 0;
DISABLE_INTERRUPTS;
//【***CAN模块接收一帧数据***】
len = can_recv(CAN_1, buff);
if(len >= 0)
{
uart_sendN(UART_Debug, len, buff);
}
ENABLE_INTERRUPTS;
}
会接收一帧CAN数据并通过UART发送出去
运行结果
2.在ADC实验中,结合热敏电阻,分别通过触摸芯片表面和热敏电阻,引起A/D值变化,显示芯片内部温度和当前温度。
首先使用构件初始化ADC
然后使用
将得到的A/D值经过换算再进行输出
换算的两个函数如下
//============================================================================
//函数名称:Regression_Ext_Temp
//功能概要:将读到的环境温度AD值转换为实际温度
//参数说明:tmpAD:通过adc_read函数得到的AD值
//函数返回:实际温度值
//============================================================================
float Regression_Ext_Temp(uint16_t tmpAD)
{
float Vtemp,Rtemp,temp;
if(tmpAD<=72)
{
return -274;
}
Vtemp = (tmpAD*3300.0)/4096;
Rtemp = Vtemp/(3300.0 - Vtemp)*10000.0;
temp = (1/(log(Rtemp/10000.0)/3950.0 + (1/(273.15 + 25)))) - 273.15 + 0.5;
return temp;
}
//============================================================================
//函数名称:Regression_MCU_Temp
//功能概要:将读到的mcu温度AD值转换为实际温度
//参数说明:mcu_temp_AD:通过adc_read函数得到的AD值
//函数返回:实际温度值
//============================================================================
float Regression_MCU_Temp(uint16_t mcu_temp_AD)
{
float mcu_temp_result;
mcu_temp_result=(float)(6+55+(100*((float)(mcu_temp_AD) - AD_CAL1))/(AD_CAL2 - AD_CAL1));
return mcu_temp_result;
}
运行结果
将手放到热敏电阻上
3.用实验验证,对于有数据的某扇区,如果没有擦除Flash_erase,可否写入新数据?注:扇区号为学号 后2位,数据文本中要有姓名。
修改了一下示例文件的代码顺序
不擦除扇区就直接往里面写数据
结果如下
内容被改写了,看样子是可以的,但是经过提醒,想起来还要再检查一下
进入到flash.c文件,检查flash_write函数
在这里,设计者应该是为了保险起见,写的时候都先默认擦除了扇区。
将它注释掉再运行
可以看到这次的内容就是一样的,说明没有被写进去。
得出结论,不擦除扇区,是不能写数据进去的。