Перейти к содержанию

STM32 для чайника


ART_ME

Рекомендуемые сообщения

то есть 427 тоже? Выходит от 429 TFT-LCD мне не нужна штука?

А FMC и FSMC по 1 штуке на борту? Если я захочу SRAM + дисплей, мне надо 2 FSMC же как я понимаю

Ссылка на комментарий
Поделиться на другие сайты

Там разные банки. Можно по несколько устройств подключать.

На каком то сайте, какого-то магазина по РЭ, читал серию статей, как раз по этой теме. Не могу вспомнить какой сайт. :mellow: Там так хорошо всё описано...

Кстати, Ваш дисплей, судя по ДШ, подключается по SPI. Так что ему FSMC не нужен. Медленный будет :(
Я бы посоветовал прикупить что-нибудь типа на SSD1963, или ему подобном (с интерфейсом Intel 8080). Они простые как 5 копеек и запускаются с пол-оборота...

Ссылка на комментарий
Поделиться на другие сайты

 pzAPgIml.jpg

Вот на такой похож мой дисплей, выводы Д0-Д7 разве не то что для  FSMC? На SPI как раз и не вижу выводов) Ну от SD карточки если только

 

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Из даташита на контроллер, который Вы сказали (SPFD5408) :

Скрытый текст

2019-03-25_11-24-43.thumb.png.bd1f3460c320a37134beac94123ba0ab.png

Есть SPI интерфейс и RGB.
Если разберётесь с модулем LTDC в микроконтроллере, то можете подключить по RGB.
 

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Лучше найти доку на сам экран, а не на контроллер, тут не совсем понятно как выбрать режим, где эти ножки, нет их. Скорее всего изначально настроен на SPI, а через него уже можно изменить режим. Типа как на дискавери 429.

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, DrobyshevAlex сказал:

Я могу по FMSC подключить его если что или нет?)

Если контроллер SPFD5408, то нет. Только SPI или RGB. Но инить его, всё равно, придётся через SPI.

Ссылка на комментарий
Поделиться на другие сайты

Цитата

Технические детали:

2,4 "диагональный ЖК-дисплей TFT

Разрешение 240x320, 18 бит (262000) цвет

Контроллер spfd5408 со встроенным буфером оперативной памяти

8 бит цифровой интерфейс, плюс 4 линии управления

Использует Цифровые контакты 5-13 и аналоговые 0-3. Это означает, что вы можете использовать Цифровые контакты 2, 3 и аналоговые 4 и 5. Pin 12 доступен, если не использовать microSD

Работает с любым '328 или Mega (Леонардо еще не поддерживается)

5 V совместимы! Использование с логикой 3,3 В или 5 В

Бортовой регулятор LDO 3,3 V 300mA

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

4-резистивный сенсорный экран

Вот такое описание. Как SPI и 8 битный интерфейс не понимаю))

Я даже выводов SPI не вижу) ИЛи спи может быть 8 битный? по 8 проводам вместо MI/MO

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...
В 16.11.2017 в 17:58, Darth_Vader сказал:

Я продолжил ковыряться с чудесами шины I²C - взял плату STM32VLDISCOVERY с процессором STM32F100RBT6B.

Ситуация не идентичная, но, по-сути, такая же.

Если частота тактирования модуля I²C 8 МГц или 16 МГц - модуль MPU6050 работает (на HAL_I2C_Master_Transmit отвечает HAL_OK),  если сделать частоту 24 МГц - всё, HAL_BUSY.

 

@Darth_Vader Здравствуйте, скажите пожалуйста, эпопея с I2c чем-то закончилась? Сейчас имею подобную ситуацию, только что бы ни пытался сделать, всегда линия BUSY. Пытаюсь на плате stm32vldiscovery. Пробовал менять частоты, использовать другие ноги (на ней два i2c) -  безрезультатно. Вы так же писали про 15 пунктов решения бага - не помогает, а конкретно - виснет на 5ом пункте, т.к. почему-то не может опустить SDA к земле. Взял плату с f4 discovery - всё завелось без каких-либо проблем.

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Не стал создавать новую тему, может все же я чего то не догоняю

Собственно столкнулся недавно вот с какой ситуацией:

Расписал я память, начал ее мапить ссылками на структуры, и внезапно часть структур мапится и работает корректно а часть при маппиге и использовании сваливает проц в HardFault_Handler

IDE Keil если что

Начал разбираться, и откровенно говоря вообще ничего не понял. 

Возьмем кусок памяти:

uint16_t modbus_data[32];

Есть у нас структура такого типа:


typedef struct vb_counter_unit {
    uint8_t init;
    uint8_t reserve;
    
    uint32_t counter;         

    double     counter_real;      
    float      counter_offset;    
    float    pulse_weight;
    
}  vb_counter_unit;

Структура как структура, создадим ссылку:

vb_counter_unit *cu_counters;

По сути я привожу пример с чистого проекта под STM32F072C8T6 + CubeMX 

Далее в main у нас начинается мап+фид:

cu_counters = (vb_counter_unit*) &modbus_data[1];
cu_counters->init = 1;
cu_counters->reserve = 2;
cu_counters->counter = 3;
cu_counters->counter_real = 4.4;
cu_counters->counter_offset = 5.5;
cu_counters->pulse_weight = 6.6;

Во время выполнения он заполняет только первые два поля, после чего дропается в HardFault_Handler

Начал смотреть память а там ваще котовасия какая та  

Запускаем и смотрим 

5cdd23c145868_.jpg.73eda12f01a017cf4ba371cde289c7d9.jpg

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

Хорошо, в ручную меняем значение поля    cu_counters->counter = 0x21;

И получаем очень странную картину:

5cdd2444ba879_.jpg.9080908d2910c0ba0cfe19fd42a878f9.jpg

Видно что между counter и reserve есть целых 2 байта, откуда они там взялись???

Провожу еще один эксперемент, и начинаю мапить данные не с 1 а с 0 адреса 

    cu_counters = (vb_counter_unit*) &modbus_data[0];

До этого я указывал   modbus_data[1];

И о чудо:

5cdd24ea20c8d_.jpg.abe45520d879f47e17158c7670c0076c.jpg

Все работает правильно. После чего я провел некоторые тесты и выяснилось что если мап я назначаю с четного индекса массива то все работает, если же назначаю с нечетного то он крашится в HardFault_Handler

Может кто то ответить что я упустил в этой всей истории?

Я взял тут же накидал такой же пример на Xcode что по сути является GCC

Вот код:


#include <stdio.h>


uint16_t modbus_data[32];


typedef struct vb_counter_unit {
    
    uint8_t init;
    uint8_t reserve;
    
    uint32_t counter;           
    
    double     counter_real;      
    float      counter_offset;  
    float    pulse_weight;
    
}  vb_counter_unit;

vb_counter_unit *cu_counters;

int main(int argc, const char * argv[]) {

    cu_counters = (vb_counter_unit*) &modbus_data[19];
    cu_counters->init = 1;
    cu_counters->reserve = 2;
    cu_counters->counter = 3;
    cu_counters->counter_real = 4.4;
    cu_counters->counter_offset = 5.5;
    cu_counters->pulse_weight = 6.6;
    
    while (1){
        
    }
    
    return 0;
}

И он полноценно смапил все как надо и заполнил

5cdd260d11cf3_2019-05-1612_56_54.thumb.png.c7ab503089ca9bcc7c948b886f06b686.png

Может кто скажет что я упустил?

Изменено пользователем tar
Указал IDE
Ссылка на комментарий
Поделиться на другие сайты

Откуда проблемы если вы не выравнивали структуры к 1 байту? Это проделки кейла? Ну а то что М0 не умеет это понятно.

А ну теперь ясно cu_counters = (vb_counter_unit*) &modbus_data[1]; вот это проблема

Изменено пользователем MasterElectric
Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, MasterElectric сказал:

А ну теперь ясно cu_counters = (vb_counter_unit*) &modbus_data[1]; вот это проблема

В чем конкретно проблема? Я не понимаю. Я присваиваю адрес ссылке на структуру, предпологая что дальше в памяти расположатся данные моей структуры

Ссылка на комментарий
Поделиться на другие сайты

Ядро Cortex-M0 не поддерживает доступ к данным без выравнивания. Отсюда и HardFault.  Структура должна быть выровнена по границе в 8 байт, исходя из использования типа double.

Почему заполняются первые два поля, а потом наступает HardFault.

Начальный адрес структуры 0х01, она выровнена по границе в 1 байт.  

Первые две переменные типа uint8_t, требуют выравнивания по границе в 1 байт. Адреса переменных 0х01, 0х02. Все верно

Третья переменная типа uint32_t, требует выравнивания по границе в 4 байта. Адрес переменной 0х03, выравнивание в 1 байт.

Попытка записи -> HardFault.

 

 

Изменено пользователем Вуйко
Ссылка на комментарий
Поделиться на другие сайты

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

просто указатель адреса у М0 не может иметь никаких других значений, кроме кратных 4-ке. Как только кто-то пытается присвоить ему значение отличное от этого, в ядре махом вскакивает флаг ошибки. Железный флаг. Возникает немаскируемое прерывание ошибки и привет, в счетчик адреса записан железобетонный вектор в тупик. Вот и вся механика процесса

Просто нельзя чтобы счетчик адреса изменялся на значение не кратное 4-ем (0х03). Назначая в указателе индекс не с нулевого поля структуры происходит следующее - структура все равно создается целиком с 0-го поля по выровненному адресу, а указателю присвается адрес +1, который не кратен 4-ем и не может быть присвоен регистру указателю адреса процессорного ядра. У него просто физически нет двух последних бит (они эмулируются). Фиксируется ошибка при попытке записи в эти биты значений отличных от нуля

У GCC просто уже гдето прописано #pragma pack(push, 4), а у кайла по умолчанию стоит 1, вот и лепится рантайм эррор

 

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

парни, всем привет
как то раз перестал шиться чип в отладочной плате (stm32f407ve). при попытке чтения st-link utility выдает cannot read memory. disable read out protection and retry.

захожу в option bytes там стоит level 1 (хотя никто ее туда не ставил. эту плату вообще через st-link utility никто не шьет, а используют из матлаба)

меняю level 1 на level 0, жму апплай, начинается процесс, двигается зеленая полоска прогресса, доходит процентов до 15-20 и выдает ошибку could not set option bytes. please reset the target and retry. 

после резета ситуация не меняется

 

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

Изменено пользователем AlexAlex9417
Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, mail_robot сказал:

просто указатель адреса у М0 не может иметь никаких других значений, кроме кратных 4-ке. Как только кто-то пытается присвоить ему значение отличное от этого, в ядре махом вскакивает флаг ошибки. Железный флаг. Возникает немаскируемое прерывание ошибки и привет, в счетчик адреса записан железобетонный вектор в тупик. Вот и вся механика процесса

Просто нельзя чтобы счетчик адреса изменялся на значение не кратное 4-ем (0х03). Назначая в указателе индекс не с нулевого поля структуры происходит следующее - структура все равно создается целиком с 0-го поля по выровненному адресу, а указателю присвается адрес +1, который не кратен 4-ем и не может быть присвоен регистру указателю адреса процессорного ядра. У него просто физически нет двух последних бит (они эмулируются). Фиксируется ошибка при попытке записи в эти биты значений отличных от нуля

У GCC просто уже гдето прописано #pragma pack(push, 4), а у кайла по умолчанию стоит 1, вот и лепится рантайм эррор

Не совсем так, зависит от типа обращения к данным. Слово к 4, полуслово к 2, байты можно не выравнивать.

Ссылка на комментарий
Поделиться на другие сайты

6 часов назад, mail_robot сказал:

И тут же спрашивает в чем проблема. Я хз каким местом люди читают

А там что, написано что:

6 часов назад, mail_robot сказал:

просто указатель адреса у М0 не может иметь никаких других значений, кроме кратных 4-ке

Я же выше привел пример что если я это делаю на x86 у меня никаких проблем нету. И в принципе что то подобное и ожидал.

Ссылка на комментарий
Поделиться на другие сайты

  • 5 месяцев спустя...

Здравствуйте! Собрался заказывать МК, хочу не ошибиться как прошлый раз, по этому вначале решил спросить а потом заказать))

Дисплей видимо вот такой у меня http://www.jurnal.nips.ru/sites/default/files/AaSI-1-2018-4_0.pdf

Я так понимаю управление по 8-битной параллельной шине, так что FSMC подойдет

И AD9280 или AD9283, тоже похоже что можно подключить по FSMC

Выбираю между STM32F407VGT6 и STM32F407ZGT6

STM32F407VGT6 - Дешевле, удобней размером, но есть ограничение 

Цитата

For the LQFP100 and WLCSP90 packages, only FSMC Bank1 or Bank2 are available. Bank1 can only support a multiplexed NOR/PSRAM memory using the NE1 Chip Select. Bank2 can only support a 16- or 8-bit NAND Flash memory using the NCE2 Chip Select. The interrupt line cannot be used since Port G is not available in this package.

Я не понимаю пока о чем речь) И какие типы мне нужны для работы с этими устройствами.

То есть я хочу подключить 2 устройства по 8 битной шине

Дисплей с ДМА будет слать из памяти байтики
АЦП с ДМА будет класть в память байтики

Можно ли это сделать с 100 ногим корпусом? И если да, то будет ли одинаковая производительность? То есть мне нужно что бы АЦП писало на максимальной скорости данные в ОЗУ МК.

 

Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

Писал в другой теме, но неответили....Есть китайский показометр VC-288 на контроллере NUVOTON N76E003AT20 и он жутко тормознутый, тоесть показания меняються очень медленно. Можно ли его подключить к компу и подправить прошу? Походу и программатор надо, которого нету. Или выкинуть его?

Ссылка на комментарий
Поделиться на другие сайты

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

Изменено пользователем Dr. West

"Я не знаю какой там коэффициент, я просто паять умею. "

Ссылка на комментарий
Поделиться на другие сайты

44 минуты назад, Dr. West сказал:

Конечно можно, если прошивка не залочена. Понадобится программатор

Спасибо) короче будет как индикатор. Если программатор не куплю. Выкидать жаль, 100 гривен отдал.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...