stm32对flash模拟eprom完成读写操作库函数操作实现

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"	 
#include "stmflash.h"
 
 


//要写入到STM32 FLASH的字符串数组
int len;
int t;
int usartsize;
u8 TEXT_Buffer[]="STM32F103 FLASH TEST";
//写入的数字
int numforflash=1;

#define SIZE sizeof(TEXT_Buffer)		//数组长度
#define FLASH_SAVE_ADDR  0X08070000		//设置FLASH 保存地址(必须为偶数,且其值要大于本代码所占用FLASH的大小+0X08000000)

 int main(void)
 {	 
	u8 key;
	u16 i=0;
	 u16 times=0;
	u8 datatemp[SIZE];

	delay_init();	    	 //延时函数初始化	  
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
	uart_init(115200);	 	//串口初始化为115200
 	LED_Init();		  			//初始化与LED连接的硬件接口
	KEY_Init();					//初始化按键
	LCD_Init();			   		//初始化LCD  
 	POINT_COLOR=RED;			//设置字体为红色 

	while(1)
	{
		key=KEY_Scan(0);
		if(key==KEY1_PRES)	//KEY1按下,写入STM32 FLASH
		{

			STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)TEXT_Buffer,SIZE);
			printf("写入内容!\r\n length:%d,\r\n",SIZE);
			printf("infor:%s\r\n",TEXT_Buffer);

		}
		if(key==KEY0_PRES)	//KEY0按下,读取字符串并显示
		{

			STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)datatemp,SIZE);
			printf("读取内容!\r\n %s\r\n",datatemp);

		}
		i++;
		delay_ms(10);  
		if(i==20)
		{
			LED0=!LED0;//提示系统正在运行	
			i=0;
		}	


if(USART_RX_STA&0x8000)
		{					   
			len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
			printf("\r\n您发送的消息:\r\n\r\n");
			printf("长度:%d \r\n\r\n",len);
			printf("buf0:%d \r\n\r\n",USART_RX_BUF[0]);
			//把收到的内容写入buffer
			for(usartsize=0;usartsize<(len/SIZE)+1;usartsize++)
			{
				for(t=0;t<len;t++)
				{
				TEXT_Buffer[t]=USART_RX_BUF[t];
				}
				STMFLASH_Write(FLASH_SAVE_ADDR+usartsize*SIZE,(u16*)TEXT_Buffer,SIZE);
			}
			
			printf("%s",USART_RX_BUF);
			if (USART_RX_BUF[0] == 49)
    			{
       			 // 执行对应的操作
       			 // ...
						printf("\r\n您发送了1,红灯将打开\r\n\r\n");
				LED0=0;
  				}
				if (USART_RX_BUF[0] == 50)
    			{
        		// 执行对应的操作
        		// ...
						printf("\r\n您发送了2,红灯将熄灭\r\n\r\n");
				LED0=1;
			    }
				printf("\r\n您发送的全部内容为:\r\n\r\n");
			for(t=0;t<len;t++)
			{
				USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
				while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
				
			}
			printf("\r\n\r\n");//插入换行
			USART_RX_STA=0;
		}else
		{
			times++;
			if(times%5000==0)
			{
				printf("\r\n串口正在运行中!按键收消息,串口输入1,或者2控制字符串内容!\r\n");
			}
 
			delay_ms(10);   
		}

		
	} 
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值