STM32F103C6T6
-
aleksey chilov
- Нашел транзистор. Понюхал.
- Сообщения: 167
- Зарегистрирован: Вс мар 27, 2022 09:38:17
Re: STM32F103C6T6
Это рефернс на STM32F103C6T6 с ним собственно и сейчас и общаюсь... Скоро закину его...
- Реклама
Re: STM32F103C6T6
Я не про референс-мануал, а про сам микроконтроллер. И если это именно STM32, а не его клон, тогда дело не в микроконтроллере - это точно. Дело в банальной невнимательности.
-
aleksey chilov
- Нашел транзистор. Понюхал.
- Сообщения: 167
- Зарегистрирован: Вс мар 27, 2022 09:38:17
Re: STM32F103C6T6
И контролер тоже соответствует. Был бы клон куб бы его не принял.
Добавлено after 1 minute 44 seconds:
Если CH запаян в блюпил например CUBE сразу кидает сообщение что это не STM32 и отладка прекращается.
Добавлено after 1 minute 44 seconds:
Если CH запаян в блюпил например CUBE сразу кидает сообщение что это не STM32 и отладка прекращается.
Re: STM32F103C6T6
Ну тогда не знаю. У меня - работает. Вот показываю - тот код, который я приводил ранее - он выдает на лог.анализаторе поток и включает дисплей


-
aleksey chilov
- Нашел транзистор. Понюхал.
- Сообщения: 167
- Зарегистрирован: Вс мар 27, 2022 09:38:17
Re: STM32F103C6T6
Сейчас я перекину ваш код и покажу что получилось у меня...
Добавлено 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:
На фото это на прямую...
Добавлено 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:
На фото это на прямую...
- Реклама
Re: STM32F103C6T6
Ну ладно, а что говорит отладка? каковы состояния регистров DMA и I2C1? То есть, что в DMA1->ISR, DMA1->CCR6, I2C1->CR1, I2C1->SR1, I2C1->SR2 ? Где именно останавливается исполнение кода?
Пошаговая отладка по строчкам может выдавать глюк, поскольку отладчик читает содержимое I2C1->SR1 (SR22), а это действие сбрасывает ожидаемые флаги и код виснет.
Нужно запустить в режиме отладки, посмотреть, где завис код и посмотреть состояние регистров.
Пошаговая отладка по строчкам может выдавать глюк, поскольку отладчик читает содержимое I2C1->SR1 (SR22), а это действие сбрасывает ожидаемые флаги и код виснет.
Нужно запустить в режиме отладки, посмотреть, где завис код и посмотреть состояние регистров.
-
aleksey chilov
- Нашел транзистор. Понюхал.
- Сообщения: 167
- Зарегистрирован: Вс мар 27, 2022 09:38:17
Re: STM32F103C6T6
Вот могу
сказать точно что свою задачу
на HAL-е яб наверное уже решил, и забыл про это, уже сделал бы и платку, вытравил распаял и залил
прошивку туда, но тогда бы вся память все 32 кБ ушли наверное. А так хотелось бы уместить в F030F4P6 да
и монтировать её куда удобнее и быстрее...
Там просто всё делается несколько щелчков мышкой но это не интересно...
Добавлено after 48 seconds:
Щас посмотрю... На отладку
Добавлено after 2 minutes 53 seconds:
Вот как раз ините олед и останавливается там нужно передать массив... F6 полистал...
Добавлено after 1 minute 44 seconds:

Все в таком состоянии
сказать точно что свою задачу
на HAL-е яб наверное уже решил, и забыл про это, уже сделал бы и платку, вытравил распаял и залил
прошивку туда, но тогда бы вся память все 32 кБ ушли наверное. А так хотелось бы уместить в F030F4P6 да
и монтировать её куда удобнее и быстрее...
Там просто всё делается несколько щелчков мышкой но это не интересно...
Добавлено after 48 seconds:
Щас посмотрю... На отладку
Добавлено after 2 minutes 53 seconds:
Вот как раз ините олед и останавливается там нужно передать массив... F6 полистал...
Добавлено after 1 minute 44 seconds:
Все в таком состоянии
Re: STM32F103C6T6
А, пардон. кнопка пауза нажата?
-
aleksey chilov
- Нашел транзистор. Понюхал.
- Сообщения: 167
- Зарегистрирован: Вс мар 27, 2022 09:38:17
Re: STM32F103C6T6
Так нажать кнопочку ПАУЗА - Желтенькие две вертикальыне полоски рядом с кнопкой Стоп 
Ну понятно что виснет в той строчке - это и по лог.анализатору видно. Но надо посмотреть состяние регистров DMA и I2C и понять, почему не запускается канал ДМА.
ЗЫ. Опять же:
SET_BIT(DMA1_Channel6->CCR, DMA_CCR_DIR_Pos); - почему именно _Pos? Разве в макросе SET_BIT используется именно позиционный номер бита, а не его значение? Макрос ведь записан в виде #define SET_BIT(REG, BIT) ((REG) |= (BIT))
Ну понятно что виснет в той строчке - это и по лог.анализатору видно. Но надо посмотреть состяние регистров 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
Добавлено 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:
И сейчас ваш код прописан не мой, и точно такие же неполадки. Я думал я чёто начудил но
как видите нет.
Тут тайна!!!!
Re: STM32F103C6T6
Да это то всё понятно. Я говорю о том, что изначально макрос должен принимать не позицию, а маску бита. А маска бита получается от (1 << _Pos).
Но я о другом. Лично я предполагаю, что проблема всей этой штуки происходит из-за невозможности переконфигурировать УЖЕ ВКЛЮЧЕННЫЙ РАНЕЕ канала DMA. То есть, где-то в коде канал частично сконфиругирован, включен. А после этого производится повторная конфигурация, в том числе и запись регистров адресов и кол-ва байт. Но при включенном канале эти изменения не будут действовать. Поэтому, когда включаются запросы ДМА в I2C, не полностью настроенный канал ДМА просто не запускаестся.
Добавлено after 8 minutes 6 seconds:
Да, я сейчас смоделировал эту ситуацию - включил канал перед записью CPAR, CMAR, CNDTR - и всё, ситуация полностью смоделировалась

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

-
aleksey chilov
- Нашел транзистор. Понюхал.
- Сообщения: 167
- Зарегистрирован: Вс мар 27, 2022 09:38:17
Re: STM32F103C6T6
Сейчас пошарюсь...
Добавлено after 24 minutes 56 seconds:
Блин...
Ну вот ничего не нахожу...
Всё как надо ёлы-палы...
Задрал уже этот DMA...
Мошь он не рабочий...
Добавлено after 31 second:
Попробовать преписать на C8T6
Добавлено after 1 minute 39 seconds:
На там я аккум отслеживал в одном пректике, ну там через CubeMX настраивал на HAL прекрасно работал DMA
Добавлено after 49 seconds:
Короче незнаю уже чтоделать...
НЕ РАБОТАЕТ!
Добавлено after 24 minutes 56 seconds:
Блин...
Ну вот ничего не нахожу...
Всё как надо ёлы-палы...
Задрал уже этот DMA...
Мошь он не рабочий...
Добавлено after 31 second:
Попробовать преписать на C8T6
Добавлено after 1 minute 39 seconds:
На там я аккум отслеживал в одном пректике, ну там через CubeMX настраивал на HAL прекрасно работал DMA
Добавлено after 49 seconds:
Короче незнаю уже чтоделать...
НЕ РАБОТАЕТ!
Re: STM32F103C6T6
Можно просто непосредственно перед настройкой канала выключить его, сбросив бит EN в регистре CCR6. Ну или сделать через Cube HAL. Там функции прописаны без косяков. Главное, не накосячить с применением этих функций.
Ну и в плате BluePill обычно должен стоять C8 или CB. Хотя, если не ошибаюсь, там нет принципиальных отличий в рассматриваемой проблеме.
Ну и в плате BluePill обычно должен стоять C8 или CB. Хотя, если не ошибаюсь, там нет принципиальных отличий в рассматриваемой проблеме.
-
aleksey chilov
- Нашел транзистор. Понюхал.
- Сообщения: 167
- Зарегистрирован: Вс мар 27, 2022 09:38:17
Re: STM32F103C6T6
Да, разница только в памяти, там 64 кБ а в СВ 128 кБ. И в цене. Только у меня проект чистый под cmsis без драйверов HAL, в этом вся и прелесть. Память не расходуется. На HAL давно бы уже и забыл про это. Но он мне не интересен.
CMSIS вот что меня интересует.
На HAL любой дурак сделает всё что угодно. Только это уже arduino по сути получается. А это не интересно
в принципе... Буду страдать дальше...
CMSIS вот что меня интересует.
На HAL любой дурак сделает всё что угодно. Только это уже arduino по сути получается. А это не интересно
в принципе... Буду страдать дальше...
Re: STM32F103C6T6
Из 9 строк 7 с ошибками, включая первую, где должно было тактирование DMA включаться, т.е. запись в регистры DMA вообще проходить не должна. Как это можно не заметить 100 раз все проверив? )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 Включён
-
aleksey chilov
- Нашел транзистор. Понюхал.
- Сообщения: 167
- Зарегистрирован: Вс мар 27, 2022 09:38:17
Re: STM32F103C6T6
[uquote="aleksey chilov",url="/forum/viewtopic.php?p=4631102#p4631102"]
Так лучше?[/uquote]
Пошагово код выполняешь и смотришь записались ли в нужные биты нужные значения. Сейчас первая строка рабочая, в последней _Pos все равно остался. Для одиночных битов достаточно просто юзать RCC_AHBENR_DMA1EN или RCC_AHBENR_DMA1EN_Msk.
Так лучше?[/uquote]
Пошагово код выполняешь и смотришь записались ли в нужные биты нужные значения. Сейчас первая строка рабочая, в последней _Pos все равно остался. Для одиночных битов достаточно просто юзать RCC_AHBENR_DMA1EN или RCC_AHBENR_DMA1EN_Msk.
-
aleksey chilov
- Нашел транзистор. Понюхал.
- Сообщения: 167
- Зарегистрирован: Вс мар 27, 2022 09:38:17
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 и тд. Но это дело вкуса.
И еще. Я, когда разбираюсь с чем-то новым и незнакомым, я создаю чистый проект с минимально необходимым наполнением, без всего лишнего, чтобы ничего не мешалось. И вначале пишу код максимально просто, "в лоб". А неудачные и нерабочие строчки кода не закомменчиваю, а сразу удаляю. В случае чего можно просмотреть историю изменений файла и вернуть.
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 раз.


