STM Урок 216. HAL. STM32F4. FLASH память W25Q. Используем программу для обмена данными



Продолжаем тему программирования контроллера STM32F4 и также продолжаем работу с последовательной FLASH-памятью серии W25Q. И теперь мы попробуем считать из микросхемы для начала служебную информацию, но уже не с использованием стандартной терминальной программы, а с помощью программы, которую я начал писать сам. Дело в том, что с помощью терминальной программы тяжело общаться с контроллером в плане передачи различных команд, а также и неудобно.

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

Схема наша осталась такая же, как и в прошлом уроке

 

 

Проект за основу мы возьмём также из прошлого урока с именем SPI_25Q32_READ и назовём его SPI_25Q32_INFO_TO_PC.

Только сейчас мы воспользуемся старым добрым Кейлом, поэтому запустим наш проект в Cube MX и внесём соответствующие изменения в настройках

 

 

Также включим на выход ножки, отвечающие за свечение светодиодов

 

 

Больше ничего не меняем, сгенерируем проект и откроем его в Keil.

На всякий случай соберём проект и прошьём контроллер, чтобы проверить, не пропала ли работоспособность из за смены IDE.

В файле w25q_spi.h объявим следующую функцию, а то в прошлом уроке не добавили

 

 

 

В функции main() файла main.c удалим объявление переменной и массива

 

char str1[30];
unsigned int addr=0;

 

Объявим небольшой массив

 

 

Код после вызова функции W25_Ini до бесконечного цикла удалим.

В качестве запрос информации о микросхеме компьютерная программа будет передавать байт с числом 33. Примем байт и узнаем, то ли это число, в бесконечном цикле. Если это 33, то зажжём зелёный светодиод

 

 

В файле w25q_spi.c после функции W25_Reset добавим функцию для сбора информации из микросхемы в буфер. Подобный код был в функции инициализации, только он данную информацию отправлял сразу в порт

 

 

 

Добавим прототип данной функции в файле w25q_spi.h

 

 

Вернёмся в файл w25q_spi.c и в функции инициализации W25_Ini уберём всё лишнее. Останется только вот это

 

 

Вернёмся в файл main.c в бесконечный цикл и, используя написанную нами функцию, заберём информацию о микросхеме в буфер

 

 

Чтобы компьютерной программе распознать, что от нашего контроллера придёт служебная информация о микросхеме, в самом первом байте он будет ждать от нас число 5. Поэтому занесём его в начало нашего буфера

 

 

в следующие 4 байта добавим число, равное длине нашего служебного сообщения, чтобы компьютер знал, сколько байтов ему принимать

 

 

Передадим наши 5 байтов

 

 

А после этого передадим наш строковый буфер компьютеру

 

 

Выйдем из тела условия, обнулим первый байт в буфере, чтобы не попадать туда каждый раз в бесконечном цикле и добавим небольшую задержку

 

 

Ну вот и всё. Осталось проверить, как это всё будет работать.

Соберём код, прошьём контроллер, запустим программу и нажмём кнопку Info, после чего мы должны получить что-то типа вот этого

 

 

Ну вот. Теперь можно будет развивать проект.

Всем спасибо за внимание!

 

 

Предыдущий урок Программирование МК STM32 Следующий урок

 

Исходный код

 

 

Программа для работы с микросхемой

 

 

Отладочную плату можно приобрести здесь STM32F429I-DISCO

Микросхему FLASH-памяти W25Q32FVSSIG SOP8 (5 штук) можно приобрести здесь W25Q32FVSSIG

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

STM HAL. STM32F4. FLASH память W25Q. Используем программу для обмена данными

2 комментария на “STM Урок 216. HAL. STM32F4. FLASH память W25Q. Используем программу для обмена данными
  1. Vlad:

    Здорово! С возвращением! Спвсибо.
    Здоровья, здоровья и еще раз здоровья!!!

  2. Олег:

    Здравствуйте.
    Скажите пожалуйста, где объявлен буфер — rx_buf
    И почему он передаётся вторым аргументом(ниже) иммено так?
    HAL_UART_Transmit(&huart1, rx_buf, strlen((char*)rx_buf), 0x1000);
    CubIDE ругается — pointer targets in passing argument 2 differ in signedness.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*