STM32F103C6T6

Кто любит RISC в жизни, заходим, не стесняемся.
aleksey chilov
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вс мар 27, 2022 09:38:17

Re: STM32F103C6T6

Сообщение aleksey chilov »

Это рефернс на STM32F103C6T6 с ним собственно и сейчас и общаюсь... Скоро закину его...
Реклама
Базилюк
Нашел транзистор. Понюхал.
Сообщения: 159
Зарегистрирован: Чт сен 19, 2024 19:18:28

Re: STM32F103C6T6

Сообщение Базилюк »

Я не про референс-мануал, а про сам микроконтроллер. И если это именно STM32, а не его клон, тогда дело не в микроконтроллере - это точно. Дело в банальной невнимательности.
Реклама
aleksey chilov
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вс мар 27, 2022 09:38:17

Re: STM32F103C6T6

Сообщение aleksey chilov »

И контролер тоже соответствует. Был бы клон куб бы его не принял.

Добавлено after 1 minute 44 seconds:
Если CH запаян в блюпил например CUBE сразу кидает сообщение что это не STM32 и отладка прекращается.
Базилюк
Нашел транзистор. Понюхал.
Сообщения: 159
Зарегистрирован: Чт сен 19, 2024 19:18:28

Re: STM32F103C6T6

Сообщение Базилюк »

Ну тогда не знаю. У меня - работает. Вот показываю - тот код, который я приводил ранее - он выдает на лог.анализаторе поток и включает дисплей

Изображение
Реклама
Эиком - электронные компоненты и радиодетали
aleksey chilov
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вс мар 27, 2022 09:38:17

Re: STM32F103C6T6

Сообщение aleksey chilov »

Сейчас я перекину ваш код и покажу что получилось у меня...

Добавлено after 13 minutes 32 seconds:
Изображение

Добавлено after 17 seconds:
Не работает!

Добавлено after 1 minute 9 seconds:
Яж говорю я уже читал и референс и так и сяк и примеры на SPI правда чужие смотрел но суть то одна, и нихера!

Добавлено after 1 minute 55 seconds:
Там на скрине я залил ваш рабочий код, только массив у меня свой там просто разом все настройки которые мне нужны
от дисплея все там я его ранее настраивал как мне удобно. Просто на шине без DMA он едет...

Добавлено after 4 minutes 46 seconds:
Изображение Изображение Изображение

Добавлено after 25 seconds:
На фото это на прямую...
Реклама
Базилюк
Нашел транзистор. Понюхал.
Сообщения: 159
Зарегистрирован: Чт сен 19, 2024 19:18:28

Re: STM32F103C6T6

Сообщение Базилюк »

Ну ладно, а что говорит отладка? каковы состояния регистров DMA и I2C1? То есть, что в DMA1->ISR, DMA1->CCR6, I2C1->CR1, I2C1->SR1, I2C1->SR2 ? Где именно останавливается исполнение кода?
Пошаговая отладка по строчкам может выдавать глюк, поскольку отладчик читает содержимое I2C1->SR1 (SR22), а это действие сбрасывает ожидаемые флаги и код виснет.
Нужно запустить в режиме отладки, посмотреть, где завис код и посмотреть состояние регистров.
Реклама
aleksey chilov
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вс мар 27, 2022 09:38:17

Re: STM32F103C6T6

Сообщение aleksey chilov »

Вот могу
сказать точно что свою задачу
на HAL-е яб наверное уже решил, и забыл про это, уже сделал бы и платку, вытравил распаял и залил
прошивку туда, но тогда бы вся память все 32 кБ ушли наверное. А так хотелось бы уместить в F030F4P6 да
и монтировать её куда удобнее и быстрее...
Там просто всё делается несколько щелчков мышкой но это не интересно...

Добавлено after 48 seconds:
Щас посмотрю... На отладку

Добавлено after 2 minutes 53 seconds:
Вот как раз ините олед и останавливается там нужно передать массив... F6 полистал...

Добавлено after 1 minute 44 seconds:
Изображение

Все в таком состоянии
Базилюк
Нашел транзистор. Понюхал.
Сообщения: 159
Зарегистрирован: Чт сен 19, 2024 19:18:28

Re: STM32F103C6T6

Сообщение Базилюк »

А, пардон. кнопка пауза нажата?
aleksey chilov
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вс мар 27, 2022 09:38:17

Re: STM32F103C6T6

Сообщение aleksey chilov »

Изображение

А конкретнее то сдесь всё виснет
Базилюк
Нашел транзистор. Понюхал.
Сообщения: 159
Зарегистрирован: Чт сен 19, 2024 19:18:28

Re: STM32F103C6T6

Сообщение Базилюк »

Так нажать кнопочку ПАУЗА - Желтенькие две вертикальыне полоски рядом с кнопкой Стоп :)

Ну понятно что виснет в той строчке - это и по лог.анализатору видно. Но надо посмотреть состяние регистров DMA и I2C и понять, почему не запускается канал ДМА.

ЗЫ. Опять же:
SET_BIT(DMA1_Channel6->CCR, DMA_CCR_DIR_Pos); - почему именно _Pos? Разве в макросе SET_BIT используется именно позиционный номер бита, а не его значение? Макрос ведь записан в виде #define SET_BIT(REG, BIT) ((REG) |= (BIT))
aleksey chilov
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вс мар 27, 2022 09:38:17

Re: STM32F103C6T6

Сообщение aleksey chilov »

Изображение

Добавлено after 40 seconds:
Это макрос "pos"

Добавлено after 1 minute 3 seconds:
Ну там пишем, читаем, или сбрасываем бит через макрос чтоб не писать руками я так понял...

Добавлено after 1 minute 15 seconds:
Тем более работае автоподстановка и писать код одно удовольствие, начало набрал потом ctrl+пробел и выбрал из списка что нужно

Добавлено after 3 minutes 15 seconds:
Ну там если бит можно читать/писать там SET_BIT где только писать вроде WRITE_REG() и т.д. там они вроде на все случаи написаны уже за ранее...

Добавлено after 2 minutes 51 second:
Изображение

Добавлено after 3 minutes 45 seconds:
И сейчас ваш код прописан не мой, и точно такие же неполадки. Я думал я чёто начудил но
как видите нет.
Тут тайна!!!!
Базилюк
Нашел транзистор. Понюхал.
Сообщения: 159
Зарегистрирован: Чт сен 19, 2024 19:18:28

Re: STM32F103C6T6

Сообщение Базилюк »

Да это то всё понятно. Я говорю о том, что изначально макрос должен принимать не позицию, а маску бита. А маска бита получается от (1 << _Pos).

Но я о другом. Лично я предполагаю, что проблема всей этой штуки происходит из-за невозможности переконфигурировать УЖЕ ВКЛЮЧЕННЫЙ РАНЕЕ канала DMA. То есть, где-то в коде канал частично сконфиругирован, включен. А после этого производится повторная конфигурация, в том числе и запись регистров адресов и кол-ва байт. Но при включенном канале эти изменения не будут действовать. Поэтому, когда включаются запросы ДМА в I2C, не полностью настроенный канал ДМА просто не запускаестся.

Добавлено after 8 minutes 6 seconds:
Да, я сейчас смоделировал эту ситуацию - включил канал перед записью CPAR, CMAR, CNDTR - и всё, ситуация полностью смоделировалась

Изображение
aleksey chilov
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вс мар 27, 2022 09:38:17

Re: STM32F103C6T6

Сообщение aleksey chilov »

Сейчас пошарюсь...

Добавлено after 24 minutes 56 seconds:
Блин...
Ну вот ничего не нахожу...
Всё как надо ёлы-палы...
Задрал уже этот DMA...
Мошь он не рабочий...

Добавлено after 31 second:
Попробовать преписать на C8T6

Добавлено after 1 minute 39 seconds:
На там я аккум отслеживал в одном пректике, ну там через CubeMX настраивал на HAL прекрасно работал DMA

Добавлено after 49 seconds:
Короче незнаю уже чтоделать...
НЕ РАБОТАЕТ!
Базилюк
Нашел транзистор. Понюхал.
Сообщения: 159
Зарегистрирован: Чт сен 19, 2024 19:18:28

Re: STM32F103C6T6

Сообщение Базилюк »

Можно просто непосредственно перед настройкой канала выключить его, сбросив бит EN в регистре CCR6. Ну или сделать через Cube HAL. Там функции прописаны без косяков. Главное, не накосячить с применением этих функций.

Ну и в плате BluePill обычно должен стоять C8 или CB. Хотя, если не ошибаюсь, там нет принципиальных отличий в рассматриваемой проблеме.
aleksey chilov
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вс мар 27, 2022 09:38:17

Re: STM32F103C6T6

Сообщение aleksey chilov »

Да, разница только в памяти, там 64 кБ а в СВ 128 кБ. И в цене. Только у меня проект чистый под cmsis без драйверов HAL, в этом вся и прелесть. Память не расходуется. На HAL давно бы уже и забыл про это. Но он мне не интересен.
CMSIS вот что меня интересует.
На HAL любой дурак сделает всё что угодно. Только это уже arduino по сути получается. А это не интересно
в принципе... Буду страдать дальше...
Adrift
Вымогатель припоя
Сообщения: 543
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: STM32F103C6T6

Сообщение Adrift »

aleksey chilov писал(а):

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

SET_BIT(RCC->AHBENR, RCC_AHBENR_DMA1EN_Pos); // разрешение тактирования DMA1
MODIFY_REG(DMA1_Channel6->CCR, DMA_CCR_PL_Msk, 0b01 << DMA_CCR_PL_Pos); // приоритета канала средний
MODIFY_REG(DMA1_Channel6->CCR, DMA_CCR_MSIZE_Msk, 0b00 << DMA_CCR_MSIZE_Pos);//разрядность данных в памяти 8 бит
MODIFY_REG(DMA1_Channel6->CCR, DMA_CCR_PSIZE_Msk, 0b01 << DMA_CCR_PSIZE_Pos);//разрядность регистра данных 16 бит
SET_BIT(DMA1_Channel6->CCR, DMA_CCR_MINC_Pos); //Включить инкремент адреса памяти
CLEAR_BIT(DMA1_Channel6->CCR, DMA_CCR_PINC_Pos); //Инкремент адреса периферии отключен
CLEAR_BIT(DMA1_Channel6->CCR, DMA_CCR_CIRC_Pos); //кольцевой режим отключен
SET_BIT(DMA1_Channel6->CCR, DMA_CCR_DIR_Pos); // из памяти в периферию
SET_BIT(DMA1_Channel6->CCR, DMA_CCR_EN_Pos); // Канал 6 DMA Включён
Из 9 строк 7 с ошибками, включая первую, где должно было тактирование DMA включаться, т.е. запись в регистры DMA вообще проходить не должна. Как это можно не заметить 100 раз все проверив? )
aleksey chilov
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вс мар 27, 2022 09:38:17

Re: STM32F103C6T6

Сообщение aleksey chilov »

Так, а где ошибки???

Добавлено after 3 minutes 3 seconds:
Изображение


Так лучше?
Adrift
Вымогатель припоя
Сообщения: 543
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: STM32F103C6T6

Сообщение Adrift »

[uquote="aleksey chilov",url="/forum/viewtopic.php?p=4631102#p4631102"]Изображение

Так лучше?[/uquote]
Пошагово код выполняешь и смотришь записались ли в нужные биты нужные значения. Сейчас первая строка рабочая, в последней _Pos все равно остался. Для одиночных битов достаточно просто юзать RCC_AHBENR_DMA1EN или RCC_AHBENR_DMA1EN_Msk.
aleksey chilov
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вс мар 27, 2022 09:38:17

Re: STM32F103C6T6

Сообщение aleksey chilov »

Еба.....
Переписал тупо как писал раньше в AtmelStudio под avr и о ЧУДО!!!
Массив предан дисплей весело дёргает шкалой туда-сюда! Да ете не ужели всё дело в форме записи кода???
А как же макросы CMSIS????
Теперь чё писать по старинке как раньше под Atmega???

Добавлено after 1 minute 24 seconds:
Изображение
Базилюк
Нашел транзистор. Понюхал.
Сообщения: 159
Зарегистрирован: Чт сен 19, 2024 19:18:28

Re: STM32F103C6T6

Сообщение Базилюк »

А я ж не зря говорил про макрос - он требует не _Pos, то есть не позицию бита, а маску _Msk,
SET_BIT(I2C1->CR1, I2C_CR1_PE);
То есть, сам макрос, он же записан в виде SET_BIT(REG, BIT) ((REG) |= (BIT)) - не позиция бита, а его маска. Я в котороый раз это повторяю жеж, а вы опять и снова смешиваете то номер позиции бита, то его маску. Невнимательность к деталям.
Номер позиции бита _Pos - это просто его порядковый номер, число. А маска бита _Msk - это (1 << _Pos). И обощначение I2C_CR1_PE равно I2C_CR1_PE_Msk, которая в свою очередь равна (1 << I2C_CR1_PE_Pos), а I2C_CR1_PE_Pos равен 0. Таким образом, если в макрос SET_BIT пишете I2C_CR1_PE_Pos, то получаете совсем не то, что думается.

Лично я не пользуюсь макросами SET_BIT, а просто пишу I2C1->CR1 |= I2C_CR1_PE, это быстрее в написании. Пользуюсь только макросом MODIFY_REG(), поскольку он заменяет больше текста, чем привносит.
Хотя для визуального единообразия и понятности можно применять SET_BIT и тд. Но это дело вкуса.

И еще. Я, когда разбираюсь с чем-то новым и незнакомым, я создаю чистый проект с минимально необходимым наполнением, без всего лишнего, чтобы ничего не мешалось. И вначале пишу код максимально просто, "в лоб". А неудачные и нерабочие строчки кода не закомменчиваю, а сразу удаляю. В случае чего можно просмотреть историю изменений файла и вернуть.
Последний раз редактировалось Базилюк Вт окт 01, 2024 20:50:51, всего редактировалось 1 раз.
Ответить

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