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

STM32 для чайника


ART_ME

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

разобрался вроде

HAL_I2C_Mem_Write(&hi2c1, 0xA1,0x01,2,&aTxBuffer[0],1,500);
HAL_Delay(50);
HAL_I2C_Mem_Read(&hi2c1,0xA1,0x01,2,&aTxBuffer[0],1,500);

размер адреса надо ставить 2 сейчас пишет и читает

Вот с Mem_Write/Read понятней один фиг - задаем и адрес слейва и о куда читать. Как тут быть HAL_I2C_Master_Receive пока непонятно. Есть только адрес слейва и все. Неужели в адрес впихивать от куда читать?

 HAL_I2C_Master_Receive(&hi2c1,  0xA0 , Buffer,  10, 100);

//-----------------------------------------------

о как получилось  читать

Buffer[0] = 0;
HAL_I2C_Master_Transmit(&hi2c1,  0xA0 , &Buffer[0],  2, 1);
HAL_I2C_Master_Receive(&hi2c1,  0xA0 , Buffer,  7, 300);

в два захода. сначала передаем адрес слейва и в буфере адрес с которого читаем

потом адрес слейва и сколько читаем.

результат 

Time [s], Analyzer Name, Decoded Protocol Result
Setup Write to [0xA0] + ACK
0x00 + ACK это запись
0x00 + ACK
0x01 + ACK
0x02 + ACK
0x03 + ACK
0x04 + ACK
0x05 + ACK
0x06 + ACK
0x00 + ACK
Setup Write to [0xA0] + ACK
0x00 + ACK это передал адрес для чтения
0x00 + ACK
Setup Read to [0xA1] + ACK
0x01 + ACK читаем
0x02 + ACK
0x03 + ACK
0x04 + ACK
0x05 + ACK
0x06 + ACK
0x00 + NAK конец чтения

всем спасибо...хз правильно ли только это все...

перцы пишут порядок

Сконфигурировать интерфейс I2C 

Отправить стартовый бит

Отправить адрес микросхемы + адрес блока памяти откуда нужно читать

Отправить адрес ячейки памяти

Снова отправить стартовый бит

Отправить адрес микросхемы и адрес блока памяти с битом «чтение»

Получить байт

Отправить стоповый бит

В принципе получилось нечто подобное

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

ой и фигню я написал))) все не так ) как пока не знаю)

//---------------------------------

Все проще

Запись

HAL_I2C_Mem_Write(&hi2c1, 0xA0,0x1001,2,(uint8_t*)buf,strlen(buf),500); 

0xA0 - адрес микросхемы  уже сдвинутый на 1 влево

0x1001 - 10 это адрес блока( в hex) у меня их 255  и 01 это адрес ячейки. Каждый блок содержит 255 ячеек.

2 - это размер адреса  т.е размер 0х1001

Чтение выглядит так же 

HAL_I2C_Mem_Read(&hi2c1,0xA0,0x1001,2,&aTxBuffer[0],strlen(buf),500);

главное указать размер сколько байт считать strlen(buf) тут для примера.

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

1 час назад, MihaNN52 сказал:

в два захода

Ну, правильно. У микросхемы внутри есть счётчик-указатель на ячейку памяти. Если выполнить HAL_I2C_Master_Receive(), то просто прочитаете байт, на который указывает счётчик, при этом указатель передвинется на следующий байт автоматически. То есть можно прочитать несколько байтов подряд.

А если положение этого указателя неизвестно, типа, хрен его знает, откуда в последний раз читалось/писалось, то надо сначала записать нужный адрес в этот счётчик адреса.

Делается это точно также, как при записи байта. Сначала посылаем запись двух байтов адреса HAL_I2C_Master_Transmit(), но после этого сам байт данных не посылаем. Получается, что указатель на ячейку установили, но ничего не записали в неё. Вот тут-то и начинаем читать эту самую нужную ячейку.

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

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

Юрий я выше написал как получилось читать писать.

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

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

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

HAL_I2C_Master_Transmit_IT(&hi2c1, LIS331DLH_I2C_ADDRESS << 1, lis331dlh_Buffer, 1);

Так что не удивлюсь, что и с функциями чтения и запись в память так же...

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

55 минут назад, MihaNN52 сказал:

он в рамках одного блока будет крутиться?

При чтении никаких блоков нет, вся память - одним куском, читайте на здоровье.

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

Страница - не 16 байт, а 256 128. Если перевалить за страницу, переноса на следующую автоматом не будет.

Это касается только записи. Читать можно сколько угодно байтов подряд.

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

3 минуты назад, MihaNN52 сказал:

что не влезит на страницу перенесется на следующую ?

Страница 128 байт. Если начали писать с середины страницы, то при переполнении перепрыгивает на начало той же страницы. То есть у счётчика адреса крутятся только младшие 7 битов.

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

Коллеги я смотрел для примера на вот эту схему представления памяти 8 килобит у меня память 512 килобит

adressation_in_24lc08.png

Действительно в даташите сказано что страница 128 байт. 

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

Вот, может поможет :

bool EE_Write(const unsigned char* pBuf, unsigned int address, unsigned int size){
bool ret=1;
int s=0;
    while(size){
        s=128-(address%128);
        if(s>size)  s=size;

        if(!write_block(pBuf, address, s))  ret=0;
        
        pBuf+=s;
        address+=s;
        size-=s;
    }
return ret;
}

Функция записи произвольного кол-ва байтов. Подгоняет адреса к границам блоков.

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

Спасибо у меня пост как раз 16 байт т.е на странице все ровно 8 записей. Теперь непонятно сколько же там страниц) пора спать походу. Получается 1024*512\8\128 =512 страниц

 

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

Ребята, не могу найти характеристики ОУ в STM32, не подскажите, где взять? Надо амперметр сделать, падение на шунте 3-10мВ, вот и думаю, необходимо ли отдельный ОУ ставить, например, LM358 или встроенного хватит?

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

3 hours ago, Koret said:

необходимо ли отдельный ОУ ставить, например, LM358 или встроенного хватит?

ни тот ни другой не сгодится. Надо ставить OP27 или подобный (OP07, OP177, LT1077 но они все хуже). Короче говоря для таких задач нужен конкретный инструментальник. Иначе получите кучу шумов и плавающий ноль. Будет очень некрасиво на АЦП смотреться в виде постоянно прыгающих циферок и непонятных показаний при нуле тока

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

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

В Keil 5.23.0 внезапно в настройках дебаггера пропала возможность выбирать Download Function - и в новых, и в старых проектах, где эта возможность точно была.

Что за напасть такая?

UPD: Это по всему Keil пропали check-box... Что за фигня? :o

Keil.png

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

скажите, какая минимальная частота тактирования микроконтроллеров stm32, в частности тех что кортекс 3?

может ли микроконтроллер пошагово выполнять программу тактируя его импульсами от кнопки?

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

а что они собой представляют? я так понимаю это необходимо дополнительное устройство приобретать? они на компьютер выводят информацию?

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

Для АРМов отладчик идёт вместе с программатором. Если есть программатор то отладчик наверняка есть. Будете прямо из IDE клацать по шагам, и никаких импульсов по кнопке не нужно. Если бы отладка делалась так как вы сказали, то половина народу бы застрелилось сразу, а половина потом...

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

Ассемблер конечно круто, но я б 100 раз подумал. Некоторые задачи будут требовать титанических усилий, а ради чего? Да и под ассемблер тоже есть отладка, но тут не подскажу, на нём толком не писал никогда. Поверхностно конечно знаю, благодаря ему и представляешь, что и как работает в контроллере. Но решать какие то вменяемые задачи будет тяжело.

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

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

писать же на Си под микроконтроллер - на мой взгляд необходимо быть реальным специалистом, который прекрасно знает и ассемблер и Си и микроконтроллер, иначе получится как с ПК только на порядок печальнее. я не чувствую МК, процессор, полагаюсь на компилятор, который не вызывает у меня доверия кто бы что мне говорил по этому поводу

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

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

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

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

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

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

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

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

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

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

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

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

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