STM32F407Z FSMC SRAM 16 бит побайтная запись

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Аватара пользователя
TenRoom
Родился
Сообщения: 4
Зарегистрирован: Вт апр 10, 2012 11:47:20
Откуда: Волгоград, Россия
Контактная информация:

STM32F407Z FSMC SRAM 16 бит побайтная запись

Сообщение TenRoom »

Всем привет. К контроллеру STM32F407ZE через FSMC подключена статическая память 256к х 16бит, сигналы UB и LB подключены, в настройках CubeMX FSMC опция "Byte enable" включена. Чтение-запись по 16 бит работает нормально.

Сейчас, если записать несколько значений ( 45, 67, 89, AB ) последовательно по адресам 0000, 0001, 0002, 0003, при чтении всё нормально:

0x0000: 45
0x0001: 67
0x0002: 89
0x0003: AB

Но если после записи по адресу 0003 сделать запись другого значения, например, 0x34, то портится содержимое по адресу 0002:

0x0000: 45
0x0001: 34
0x0002: 00
0x0003: AB

Можно ли делать побайтную (8 бит) запись и чтение? Если функцию побайтного чтения можно организовать, анализируя нулевой бит адреса и используя сдвиг, то для функции записи я, пока что, вижу только вариант "чтение-модификация-запись". Можно использовать, конечно, но при этом будут совершаться лишние действия и при записи будет падать производительность.


Проблема решена - нужно было использовать 8-битный указатель. Возможно, информация кому-нибудь пригодится.

Функции чтения и записи байтов:

Код: Выделить всё

#define EXT_SRAM_BASE_ADDRESS 0x68000000

void ext_sram_write_byte(uint32_t address, uint8_t data)
{
	*(uint8_t *) (EXT_SRAM_BASE_ADDRESS + (address) ) = data;
}

uint8_t ext_sram_read_byte(uint32_t address)
{
	return *(uint8_t *)(EXT_SRAM_BASE_ADDRESS + address);
}
Реклама
Ответить

Вернуться в «ARM»