验证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希望苏大开个社区,专门讨论这些问题吧。
就是最近做的课设,导致那个设备占用了过多端口,导致我出现如下图的情况,我本机也是这种情况。