新手入门
- 积分
- 26
- 金钱
- 26
- 注册时间
- 2014-12-9
- 在线时间
- 0 小时
|

楼主 |
发表于 2014-12-9 21:47:29
|
显示全部楼层
回复【2楼】小温:
---------------------------------
这个函数没有问题,我试过了,你可以看一下我的源码:
请您帮忙看一下,谢谢,希望能尽快回复:
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "key.h"
#include "lcd.h"
#include "stmflash.h"
#include "tsensor.h"
//ALIENTEK Mini STM32开发板范例代码26
//FLASH模拟EEPROM实验
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司
//要写入到STM32 FLASH的字符串数组
//const u8 TEXT_Buffer[]={"STM32 FLASH TEST"};
u8 TEXT_Buffer[10000];
u8 flag1=0;
u8 flag2=0;
float temperate;
#define SIZE sizeof(TEXT_Buffer) //数组长度
#define FLASH_SAVE_ADDR 0X08020000 //设置FLASH 保存地址(必须为偶数,且其值要大于本代码所占用FLASH的大小+0X08000000)
//获取内部温度传感器的值
void GetTemper()
{
u16 adcx;
float temp;
adcx=T_Get_Adc_Average((uint8_t)0x10,10);
// LCD_ShowxNum(132,250,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
temperate=temp;//保存温度传感器的电压值
adcx=temp;
// LCD_ShowxNum(132,270,adcx,1,16,0); //显示电压值整数部分
temp-=(u8)temp; //减掉整数部分
// LCD_ShowxNum(148,270,temp*1000,3,16,0X80); //显示电压小数部分
temperate=(1.43-temperate)/0.0043+25; //计算出当前温度值
LCD_ShowxNum(140,290,(u8)temperate,2,16,0); //显示温度整数部分
temperate-=(u8)temperate;
LCD_ShowxNum(164,290,temperate*100,2,16,0X80);//显示温度小数部分
}
void ShowString_Init()
{
//显示提示信息
POINT_COLOR=BLUE;//设置字体为蓝色
// LCD_ShowString(60,250,200,16,16,"TEMP_VAL:");
// LCD_ShowString(60,270,200,16,16,"TEMP_VOL: . V");
LCD_ShowString(60,290,200,16,16,"TEMPERATE: . C");
}
int main(void)
{
u8 key;
u16 adcx;
float temp;
//u8 TEXT_Buffer[100];
u8 datatemp[SIZE];
NVIC_Configuration();//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为9600
LED_Init(); //初始化与LED连接的硬件接口
LCD_Init(); //初始化LCD
KEY_Init(); //按键初始化
T_Adc_Init(); //ADC初始化
  OINT_COLOR=RED;//设置字体为红色
LCD_ShowString(60,50,200,16,16,"Mini STM32");
LCD_ShowString(60,70,200,16,16,"FLASH EEPROM TEST");
LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(60,110,200,16,16,"2014/3/12");
LCD_ShowString(60,130,200,16,16,"WK_UP:Read KEY0:Write");
POINT_COLOR=BLUE;
//显示提示信息
POINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(60,150,200,16,16,"TEMP_VAL:");
LCD_ShowString(60,170,200,16,16,"TEMP_VOL:0.000V");
LCD_ShowString(60,190,200,16,16,"TEMPERATE:00.00C");
while(1)
{
if(flag1==0)
{
u16 adcx;
float temp;
adcx=T_Get_Adc_Average((uint8_t)0x10,10);
LCD_ShowxNum(132,150,adcx,4,16,0);//显示ADC的值
temp=(float)adcx*(3.3/4096);
temperate=temp;//保存温度传感器的电压值
adcx=temp;
LCD_ShowxNum(132,170,adcx,1,16,0); //显示电压值整数部分
temp-=(u8)temp; //减掉整数部分
LCD_ShowxNum(148,170,temp*1000,3,16,0X80); //显示电压小数部分
temperate=(1.43-temperate)/0.0043+25; //计算出当前温度值
LCD_ShowxNum(140,190,(u8)temperate,2,16,0); //显示温度整数部分
temperate-=(u8)temperate;
LCD_ShowxNum(164,190,temperate*100,2,16,0X80);//显示温度小数部分
}
if(flag2=1){
TEXT_Buffer[0]=temperate;
STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)TEXT_Buffer,SIZE);
LCD_ShowString(60,230,200,16,16,"FLASH Write Finished!");//提示传送完成
}
key=KEY_Scan(0);
switch(key)
{
case KEY0_PRES:
LCD_Fill(0,230,239,319,WHITE);//清除半屏
LCD_ShowString(60,230,200,16,16,"Start Write FLASH....");
adcx=T_Get_Adc_Average((uint8_t)0x10,10);//电压值整数部分
temp=(float)adcx*(3.3/4096);
temperate=temp;//保存温度传感器的电压值
temperate=(1.43-temperate)/0.0043+25; //计算出当前温度值
flag1=1;
flag2=1;
break;
case WKUP_PRES:
ShowString_Init();
LCD_ShowString(60,230,200,16,16,"Start Read FLASH.... ");
flag1=0;
// adcx=T_Get_Adc_Average((uint8_t)0x10,10);
// temp=(float)adcx*(3.3/4096);
// temperate=temp;//保存温度传感器的电压值
// temperate=(1.43-temperate)/0.0043+25; //计算出当前温度值
// LCD_ShowxNum(140,290,(u8)temperate,2,16,0); //显示温度整数部分
// temperate-=(u8)temperate;
// LCD_ShowxNum(164,290,temperate*100,2,16,0X80);//显示温度小数部分
//
LCD_ShowString(60,270,200,16,16,"The Data Readed Is: ");//提示传送完成
STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)datatemp,SIZE);
LCD_ShowString(60,270,200,16,16,datatemp);//显示读到的字符串
break;
}
}
}
请尽快回复,谢谢! |
|