Все о микроконтроллерах: AVR, PIC, STM8, STM32, Arduino, Altera, Xilinx, все что угодно. Этот раздел для всего что клацает байтиками.
-
Rogers
- Сообщения: 13
- Откуда: МО, Климовск
Сообщение Rogers » 25 июл 2014, 09:28
Приветствую! Дана задачка: занести в определенную ячейку flash памяти, определенное значение. Вроде все просто, но у меня не работает или я неправильно понимаю как это записать. Подскажите, что я делаю не так.
Код: Выделить всё
#include "stm32f4xx.h"
#include "stm32f4xx_flash.h"
#define DEVICE_ADDRESS 0x08008010
#define DEVICE_SECTOR FLASH_Sector_2
//void WriteDeviceAddress(char* data)
void WriteDeviceAddress(void)
{
FLASH_Unlock();
FLASH_EraseSector(FLASH_Sector_2,VoltageRange_3);
FLASH_ProgramHalfWord(0x08008010,0x5555);
FLASH_Lock();
}
int main (void)
{
while(1);
}
-
Rogers
- Сообщения: 13
- Откуда: МО, Климовск
Сообщение Rogers » 25 июл 2014, 11:34
Попробовал с другим типом данных и чуть-чуть поправил код => заработало.
Код: Выделить всё
#include "stm32f4xx.h"
#include "stm32f4xx_flash.h"
#define DEVICE_ADDRESS 0x08008010
#define DEVICE_SECTOR FLASH_Sector_2
//void WriteDeviceAddress(char* data)
void WriteDeviceAddress(void)
{
FLASH_Unlock();
FLASH_EraseSector(FLASH_Sector_2,VoltageRange_3);
FLASH_ProgramWord(DEVICE_ADDRESS,0xAAAA8855);
FLASH_Lock();
}
int main (void)
{ WriteDeviceAddress();
while(1);
}
Чтение (путем наведения на переменную i):
Код: Выделить всё
#define DEVICE_ADDRESS 0x08008010
#define DEVICE_SECTOR FLASH_Sector_2
#define ADDRESS 0x08008010
uint32_t Read_Flash(uint32_t Data_adr)
{
return *(uint32_t*) Data_adr;
}
/*
void WriteDeviceAddress(void)
{
FLASH_Unlock();
FLASH_EraseSector(FLASH_Sector_2,VoltageRange_3);
FLASH_ProgramWord(DEVICE_ADDRESS,0xAAAA8855);
FLASH_Lock();
}*/
int main (void)
{
uint32_t i=0;
//WriteDeviceAddress();
i = Read_Flash(ADDRESS);
while(1)
{i++;}
}
Вернуться в «Микроконтроллеры и ПЛИС»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей