|
- /**
- ******************************************************************************
- **说明:自主2.4G卡编程配置及写号软件
- **功能:协议配置、写IC卡号
- **作者:郑友鑫
- **日期:2017.08
- ******************************************************************************
- **/
-
- /* Includes ------------------------------------------------------------------*/
- #include "flash.h"
- #include "printf.h"
-
-
- // BYTE thenticated = FALSE;
- u16 StoreBuffer[STORE_DATA_NUM];
- u8 Save_Buffer[STORE_DATA_NUM*2];
- /*****************************************************************************************************
- ** 函数名称: Startwritedata()
- ** 函数描述: 开始向flash里写数据
- ** 接口参数: addr
- ** 全局变量: 无
- ** 宏 定 义:ADDR_BASE
- ** 作 者: 刘良勇
- ** 日 期: 2010.5.13
- ------------------------------------------------------------------------------------------------------
- ** 备注:每次写数据前得先擦除所要存储位置所在的整个页,这是和EEPROM的不同之处。Flash不具备修改功能,
- 只能先擦除再写,而擦除时,只支持页擦除。
- addr地址范围:ADDR_BASE ~ADDR_BASE+1022
- *****************************************************************************************************/
- void Startwritedata(DWORD addr)
- {
- FLASH_Unlock(); //每次擦除Flash中数据时得先解锁
- FLASH_ErasePage(addr); //擦除页
- }
-
- /*****************************************************************************************************
- ** 函数名称: Write_Complete()
- ** 函数描述: 上锁
- ** 接口参数:
- ** 全局变量: 无
- ** 宏 定 义:ADDR_BASE
- ** 作 者: 刘良勇
- ** 日 期: 2010.5.13
- ------------------------------------------------------------------------------------------------------
- ** 备注:每次写数据前得先擦除所要存储位置所在的整个页,这是和EEPROM的不同之处。Flash不具备修改功能,
- 只能先擦除再写,而擦除时,只支持页擦除。
- addr地址范围:ADDR_BASE ~ADDR_BASE+1022
- *****************************************************************************************************/
- void Write_Complete(void)
- {
-
- FLASH_Lock(); //上锁
-
- }
-
-
-
- /*****************************************************************************************************
- ** 函数名称: SavePara()
- ** 函数描述:保存一个参数 最大为16位
- ** 接口参数: addr,data
- ** 全局变量: 无
- ** 宏 定 义:ADDR_BASE
- ** 作 者: 刘良勇
- ** 日 期: 2010.5.13
- ------------------------------------------------------------------------------------------------------
- ** 备注:每次写数据前得先擦除所要存储位置所在的整个页,这是和EEPROM的不同之处。Flash不具备修改功能,
- 只能先擦除再写,而擦除时,只支持页擦除。
- addr地址范围:ADDR_BASE ~ADDR_BASE+1022
- *****************************************************************************************************/
- void SavePara(DWORD addr,WORD data)
- {
-
- FLASH_ProgramHalfWord(addr,data);//写16位半字
-
- }
-
-
-
-
- /*****************************************************************************************************
- ** 函数名称: GetPara()
- ** 函数描述: 读出参数
- ** 接口参数: 读取 addr 地址里的数据
- ** 全局变量: 无
- ** 宏 定 义:ADDR_BASE
- ** 引用函数:
- ** 作 者: 刘良勇
- ** 日 期: 2010.5.13
- ------------------------------------------------------------------------------------------------------
- ** 备注: addr地址范围:ADDR_BASE ~ADDR_BASE+1022
- *****************************************************************************************************/
- WORD GetPara(DWORD addr)
- {
- WORD data;
- data=(WORD)(*(DWORD*)addr); //读取相应地址中的16位数据
- return data;
- }
-
- /*****************************************************************************************************
- ** 函数名称: Savestr_to_flash()
- ** 函数描述: 将一串数据存到指定的地址区间里
- ** 接口参数: addr,data,len
- ** 全局变量: 无
- ** 宏 定 义:
- ** 作 者: 刘良勇
- ** 日 期: 2010.5.13
- ------------------------------------------------------------------------------------------------------
- ** 备注:每次写数据前得先擦除所要存储位置所在的整个页,这是和EEPROM的不同之处。Flash不具备修改功能,
- 只能先擦除再写,而擦除时,只支持页擦除。
- addr地址范围:ADDR_BASE ~ADDR_BASE+1022
- *****************************************************************************************************/
- void Savestr_to_flash(DWORD addr,WORD *str,WORD len)
- {
- BYTE i = 0;
- for(i = 0;i < len;i ++)
- {
- SavePara(addr,str[i]);
- addr += 2;
- }
- }
-
- /*****************************************************************************************************
- ** 函数名称: Readstr_of_flash()
- ** 函数描述: 从某个地址开始读取一个字符串
- ** 接口参数: addr,data,len
- ** 全局变量: 无
- ** 宏 定 义:
- ** 作 者: 刘良勇
- ** 日 期: 2010.5.13
- ------------------------------------------------------------------------------------------------------
- ** 备注:每次写数据前得先擦除所要存储位置所在的整个页,这是和EEPROM的不同之处。Flash不具备修改功能,
- 只能先擦除再写,而擦除时,只支持页擦除。
- addr地址范围:ADDR_BASE ~ADDR_BASE+1022
- *****************************************************************************************************/
- void Readstr_of_flash(DWORD addr,WORD *str,WORD len)
- {
- BYTE i = 0;
- for(i = 0;i < len;i ++)
- {
- str[i] = GetPara(addr);
- addr += 2;
- }
- }
-
- /*****************************************************************************************************
- ** 函数名称: SavePara_to_flash()
- ** 函数描述: 将一些参数存到flash
- ** 接口参数: addr,data,len
- ** 全局变量: 无
- ** 宏 定 义:
- ** 作 者: 刘良勇
- ** 日 期: 2010.5.13
- ------------------------------------------------------------------------------------------------------
- ** 备注:每次写数据前得先擦除所要存储位置所在的整个页,这是和EEPROM的不同之处。Flash不具备修改功能,
- 只能先擦除再写,而擦除时,只支持页擦除。
- addr地址范围:ADDR_BASE ~ADDR_BASE+1022
- *****************************************************************************************************/
-
- void SavePara_to_flash(void)
- {
- BYTE i = 0;
- WORD flash_buf[STORE_DATA_NUM] = {0};
- for(i = 0;i < STORE_DATA_NUM;i ++)
- {
- flash_buf[i] = (WORD)StoreBuffer[i];//转换要写入的数据
- }
-
- Startwritedata(PC_NUM_ADDR);
- Savestr_to_flash(PC_NUM_ADDR,flash_buf,STORE_DATA_NUM);
- Write_Complete();
- }
-
- /*****************************************************************************************************
- ** 函数名称: Readstr_of_flash()
- ** 函数描述: 从某个地址开始读取一个字符串
- ** 接口参数: addr,data,len
- ** 全局变量: 无
- ** 宏 定 义:
- ** 作 者: 刘良勇
- ** 日 期: 2010.5.13
- ------------------------------------------------------------------------------------------------------
- ** 备注:每次写数据前得先擦除所要存储位置所在的整个页,这是和EEPROM的不同之处。Flash不具备修改功能,
- 只能先擦除再写,而擦除时,只支持页擦除。
- addr地址范围:ADDR_BASE ~ADDR_BASE+1022
- *****************************************************************************************************/
- void Readpara_from_flash(void)
- {
- BYTE i = 0;
- WORD flash_buf[STORE_DATA_NUM] = {0}; //16位数组向FLASH中写数据
- // BYTE Save_Buffer[STORE_DATA_NUM*2]={0}; //8位数组,将16位数组中数据转换出来
- Readstr_of_flash(PC_NUM_ADDR,flash_buf,STORE_DATA_NUM);
-
- for(i = 0;i < STORE_DATA_NUM;i ++)
- {
- Save_Buffer[2*i] = (WORD)flash_buf[i];
- // printf("低八位 %d=%d \r\n",i,Save_Buffer[2*i]); //打印16位数据的低八位
-
- // Save_Buffer[2*i + 1] = (WORD)(flash_buf[i] >>=8);
- // printf("高八位=%u \r\n",Save_Buffer[2*i+1]); //打印高八位
-
- }
-
- // printf("设置频率 = %d \r\n",Save_Buffer[2*0]); //打印16位数据的低八位
- // printf("设置功率 = %d \r\n",Save_Buffer[2*1]); //打印16位数据的低八位
- // printf("设置速率 = %d \r\n",Save_Buffer[2*2]); //打印16位数据的低八位
- }
-
-
-
-
|