mirror of
https://gitee.com/beecue/fastbee.git
synced 2025-12-17 16:36:03 +08:00
[update] 增加STM32智慧宿舍基础代码
This commit is contained in:
71
firmware/stm32/smart_dormitory/User/flash/flash.c
Normal file
71
firmware/stm32/smart_dormitory/User/flash/flash.c
Normal file
@@ -0,0 +1,71 @@
|
||||
/****************************************Copyright (c)****************************************************
|
||||
**
|
||||
** File name: humi.c
|
||||
** Created by: Brown Lee
|
||||
** Created date: 2020-10-16
|
||||
** Version: v1.0
|
||||
** Descriptions: The original
|
||||
** Link address: https://blog.csdn.net/weixin_45006076
|
||||
**
|
||||
*********************************************************************************************************/
|
||||
|
||||
#include "flash.h"
|
||||
|
||||
//<2F><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ʼ<EFBFBD><CABC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void FLASH_ReadMoreData(uint32_t startAddress,uint16_t *readData,uint16_t countToRead)
|
||||
{
|
||||
uint16_t dataIndex;
|
||||
for(dataIndex=0;dataIndex<countToRead;dataIndex++)
|
||||
{
|
||||
readData[dataIndex]=FLASH_ReadHalfWord(startAddress+dataIndex*2);
|
||||
}
|
||||
}
|
||||
|
||||
//<2F><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD>ַ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD>(16λ<36><CEBB><EFBFBD><EFBFBD>)
|
||||
uint16_t FLASH_ReadHalfWord(uint32_t address)
|
||||
{
|
||||
return *(__IO uint16_t*)address;
|
||||
}
|
||||
|
||||
//<2F><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ȫ<EFBFBD><C8AB>(32λ<32><CEBB><EFBFBD><EFBFBD>)
|
||||
uint32_t FLASH_ReadWord(uint32_t address)
|
||||
{
|
||||
uint32_t temp1,temp2;
|
||||
temp1=*(__IO uint16_t*)address;
|
||||
temp2=*(__IO uint16_t*)(address+2);
|
||||
return (temp2<<16)+temp1;
|
||||
}
|
||||
|
||||
//<2F><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ʼд<CABC><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void FLASH_WriteMoreData(uint32_t startAddress, uint16_t *writeData, uint16_t countToWrite)
|
||||
{
|
||||
uint32_t dataIndex;
|
||||
FLASH_EraseInitTypeDef User_Flash; //<2F><><EFBFBD><EFBFBD> FLASH_EraseInitTypeDef <20>ṹ<EFBFBD><E1B9B9>Ϊ User_Flash
|
||||
|
||||
if(startAddress < FLASH_BASE || ((startAddress+countToWrite * 2) >= (FLASH_BASE + 1024 * FLASH_SIZE)))
|
||||
{
|
||||
return;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>ַ
|
||||
}
|
||||
HAL_FLASH_Unlock(); //<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
// offsetAddress=startAddress-FLASH_BASE; //<2F><><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5>0X08000000<30><30><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>ƫ<EFBFBD>Ƶ<EFBFBD>ַ
|
||||
// sectorPosition=offsetAddress/FLASH_SIZE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>STM32F103VET6Ϊ0~255
|
||||
//
|
||||
// sectorStartAddress=sectorPosition*SECTOR_SIZE+FLASH_BASE; //<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
|
||||
HAL_FLASH_Unlock(); //<2F><><EFBFBD><EFBFBD>Flash
|
||||
|
||||
User_Flash.TypeErase = FLASH_TYPEERASE_PAGES; //<2F><><EFBFBD><EFBFBD>Flashִ<68><D6B4>ҳ<EFBFBD><D2B3>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
User_Flash.PageAddress = startAddress; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ
|
||||
User_Flash.NbPages = 1; //˵<><CBB5>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Min_Data = 1<><31>Max_Data =(<28><><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>-<2D><>ʼҳ<CABC><D2B3>ֵ)֮<><D6AE><EFBFBD><EFBFBD>ֵ
|
||||
|
||||
uint32_t PageError = 0; //<2F><><EFBFBD><EFBFBD>PageError,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᱻ<EFBFBD><E1B1BB><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FLASH<53><48>ַ
|
||||
HAL_FLASHEx_Erase(&User_Flash, &PageError); //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
for(dataIndex=0;dataIndex<countToWrite;dataIndex++)
|
||||
{
|
||||
HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD,startAddress+dataIndex*2,writeData[dataIndex]);
|
||||
}
|
||||
|
||||
HAL_FLASH_Lock();//<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user