嵌入式作业(7)

验证flash:
代码:

#define GLOBLE_VAR
#include "includes.h"      //包含总头文件
int main(void)
{
	flash_erase(62);
	uint32_t mMainLoopCount;  //主循环次数变量
	uint8_t pool[64];	//按照逻辑读方式从指定flash区域中读取的数据
	DISABLE_INTERRUPTS;
    mMainLoopCount=0;    //主循环次数变量
	gpio_init(LIGHT_BLUE,GPIO_OUTPUT,LIGHT_ON);
	ENABLE_INTERRUPTS;    
    flash_write(62,0,64,(uint8_t *) "xiaoouxiaoou");
	flash_read_logic(pool,62,0,64); 
	printf("读取62扇区的64字节的内容:  %s\n",pool);
	memset(pool, 0, sizeof(pool));	//内容清零
}  
其中将flash_write函数里的flash_erase调用注释掉了。

在做之前,已经猜到是不可以的,因为我之前也学过硬件编程,部分芯片有一种保护机制,即如果该处的内容,未擦拭就开始写入,是不允许的,接下来来实践验证一下。

首先,要分步骤进行,首先是,不擦拭就写入,观察读写到的写入内容有无更改到,

观察到,

这个函数是flash_write函数,可以看到,116行有一句falsh_erase函数,说明我们直接调用flash_write其实是分了两步,即擦拭,并读写。我们要测试不擦拭是否会正确写入,所以暂时注释这一行。

即main函数这样时:

#define GLOBLE_VAR

#include "includes.h"      //包含总头文件

int main(void)

{

uint32_t mMainLoopCount;  //主循环次数变量

uint8_t pool[64]; //按照逻辑读方式从指定flash区域中读取的数据

DISABLE_INTERRUPTS;

    mMainLoopCount=0;    //主循环次数变量

gpio_init(LIGHT_BLUE,GPIO_OUTPUT,LIGHT_ON);

ENABLE_INTERRUPTS;    

    flash_write(62,0,64,(uint8_t *) "32106100062 马志龙 666666666");

flash_read_logic(pool,62,0,64);

printf("读取62扇区的64字节的内容:  %s\n",pool);

memset(pool, 0, sizeof(pool)); //内容清零

}   //main函数(结尾)

结果:

读写成功了。

这因为我第一次写入,这下换个内容看看,写入xiaoouxiaoou。

确实,没更改了,因为我没擦拭,接下来试试擦拭再写入xiaoouxiaoou。

如意料之中:

 

 

ADC模块实验:

#define GLOBLE_VAR
#include "includes.h"      //包含总头文件

void Delay_ms(uint16_t u16ms);
float Regression_Ext_Temp(uint16_t tmpAD);      //环境温度AD值转为实际温度
float Regression_MCU_Temp(uint16_t mcu_temp_AD); //MCU温度AD值转为实际温度

int main()

{
       float a15=0,a17=0;
       uint16_t d15=0,d17=0;
       adc_init(15,AD_SINGLE);
       adc_init(17,AD_SINGLE);
       printf("马志龙的ADC实验\n");
       while(1)

       {
              Delay_ms(2000);
              d15=adc_read(15);
              Delay_ms(100);
              d17=adc_read(17);
              a15=tempRegression(d15);
              a17=adc_mcu_temp(d17);
              printf("温度AD: %d  ",d15);
              printf("温度: %6.2f  ",a15);
              printf("芯片温度AD: %d  ",d17);
              printf("芯片温度: %6.2f  ",a17);
              printf("\n");
       }
}
void Delay_ms(uint16_t u16ms)
{
    uint32_t u32ctr;
    for(u32ctr = 0; u32ctr < 8000*u16ms; u32ctr++)
    {
        __ASM("NOP");
    }
}
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; 
}

float Regression_MCU_Temp(uint16_t mcu_temp_AD)
{
	float mcu_temp_result;
	mcu_temp_result=(float)(55+(100*((float)(mcu_temp_AD) - AD_CAL1))/(AD_CAL2 - AD_CAL1));
	return mcu_temp_result;
}

分析:可能我在宿舍 有空调,这和我在实验室温度不一样,这里比较低。

当我用手捂热后:

思考:

又来了,每次做实验,总是出现各种那种,连接不上的bug,emm希望苏大开个社区,专门讨论这些问题吧。

就是最近做的课设,导致那个设备占用了过多端口,导致我出现如下图的情况,我本机也是这种情况。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值