Программирование МК STM32. УРОК 12. HAL. Динамическая индикация

แชร์
ฝัง
  • เผยแพร่เมื่อ 9 ก.พ. 2025

ความคิดเห็น • 24

  • @4ORESIGHT
    @4ORESIGHT 4 ปีที่แล้ว

    Владимир, огромное вам спасибо за данные уроки!

  • @pashka-cherepashka
    @pashka-cherepashka 8 ปีที่แล้ว +3

    Большое спасибо за уроки !!!

  • @Jensiru
    @Jensiru 8 ปีที่แล้ว +3

    Хотелось бы урок по настройке частоты. Почти во всех видео нажимаете на вкладку "Clock Configuration". Почему там иногда нужно менять частоту, как узнать что её нужно менять? Как в настройках таймера считается частота и т.п.
    К примеру, был урок недавно по ШИМ со светодиодами, сделал всё так же, но светодиод плавно загорался и резко потухал. Потом специально изменил частоту как на видео и всё заработало, до этого стояло всё по умолчанию. Конечно, статьи есть и даже видео по настройке этого всего, но это как минимум идея для одного из следующих видео:)
    За урок спасибо! Было бы неплохо говорить в каждом последующем видео о том, что может понадобиться. Т.е. вдруг следующее видео будет про дисплей, энкодер или ещё чего-то. Так будет возможность приобрести и заниматься. Ну а там смотрите сами, быть может это и лишнее. Канал отличный, хотелось бы чтобы он развивался.

    • @narodstream552
      @narodstream552  8 ปีที่แล้ว +2

      +Сергей Аксенов
      1. Частота настраивается в зависимости от ситуации. Нужно смотреть в зависимости от того, какой именно интерфейс мы используем и на какой шине он находится(AHB1, AHB2,APB1,APB2 или отдельная собственная, как например для USB). Затем также учитываем, какую частоту граничную может поддержать какая-то внешняя периферия, которую мы по данному интерфейсу используем, вот тогда уже и настраиваем определённую шину на определённую частоту. А все умножители и делители в rcc даны и отлично расписаны в Reference Manual, поэтому, я считаю всё-таки что общий какой то урок по частоте не требуется, а именно требуется объяснение настройки частоты в какой то частной ситуации.
      2. Светодиод резко может потухать не из-за частоты, а только из-за неправильного кода, как у меня сначала было в занятии, потом когда всё поправилось, всё стало плавно)
      3. Спасибо Вам так же за высокую оценку моего труда!
      3а. Анонсы когда именно выйдет следующее видео я размещаю во всех трёх социальных сетях в группах, ссылки в описании под видео. В принципе из названия следующего урока видно, что именно потребуется. Но тем не менее я учту Ваше пожелание и буду расписывать в анонсе поконкретнее.
      Ещё раз огромное спасибо за интерес к моим занятиям!

    • @Jensiru
      @Jensiru 8 ปีที่แล้ว

      +narod stream не не, светодиод именно из-за частоты, код проверял от и до. Потом в кубе изменил частоту и прошил МК - всё заработало как надо.

    • @narodstream552
      @narodstream552  8 ปีที่แล้ว

      Сергей Аксенов
      ну может быть, у меня сразу всё работало. Отлично, что сами догадались, что нужно отрегулировать частоту.
      Кстати для следующего занятия, которое выйдет завтра 10 мая в 14.00 по московскому времени, потребуется переходник TTL-to-USB. А для занятия, которое выйдет ещё через сутки (11 мая в 14-00) потребуется ещё и дисплей LCD такой же, который мы использовали в 6 и 7 занятии.

    • @Jensiru
      @Jensiru 8 ปีที่แล้ว +1

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

  • @timelord1137
    @timelord1137 5 ปีที่แล้ว +2

    Большое спасибо)

  • @Yushik79
    @Yushik79 3 ปีที่แล้ว

    Благодарю за уроки, усовершенствовал обработчик прерывания теперь незначащие старшие ноли гасятся: if((Interrupt_Count==0)&&(Digit_4!=0))
    {
    HAL_GPIO_WritePin(GPIOE, GPIO_PIN_6, GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5, GPIO_PIN_RESET);
    segchar(Digit_4);
    }
    else HAL_GPIO_WritePin(GPIOE, GPIO_PIN_6, GPIO_PIN_RESET);

    if((Interrupt_Count==1)&&(Digit_3|Digit_4!=0))
    {
    HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_6, GPIO_PIN_RESET);
    segchar(Digit_3);
    }
    else HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_RESET);

    if((Interrupt_Count==2)&&(Digit_2|Digit_3|Digit_4!=0))
    {
    HAL_GPIO_WritePin(GPIOE, GPIO_PIN_4, GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3|GPIO_PIN_5|GPIO_PIN_6, GPIO_PIN_RESET);
    segchar(Digit_2);
    }
    else HAL_GPIO_WritePin(GPIOE, GPIO_PIN_4, GPIO_PIN_RESET);


    if(Interrupt_Count==3)
    {
    HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOE, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6, GPIO_PIN_RESET);
    segchar(Digit_1);
    }


    Interrupt_Count++;
    if(Interrupt_Count>3)Interrupt_Count=0;
    /* USER CODE END TIM6_DAC_IRQn 1 */
    } Так же целесообразно в главном цикле main.c в подцикле for сделать for(i=0; i

  • @Сергей-ф2ъ7я
    @Сергей-ф2ъ7я 4 ปีที่แล้ว

    спасибо за урок!
    может уже не актуально, но у меня такое предложение, что б предделитель прям в main.c менять, так быстрее.
    и хотел бы спросить, при таком подключении можно еще и яркостью цифр управлять? то есть прерывания + ШИМ одновременно. интересует управление именно через общие ноги (у Вас аноды).

  • @DrargonsM
    @DrargonsM 8 ปีที่แล้ว

    Отличный канал! всем рекомендую подписаться))))

  • @ДмитрийТисов-ж6я
    @ДмитрийТисов-ж6я 10 หลายเดือนก่อน

    Спасибо

  • @Urrih
    @Urrih 6 ปีที่แล้ว

    Есть ли особенности настройки таймеров для других чипов? Например STM32F030F4 и TIM14?

  • @pavelaugur6565
    @pavelaugur6565 8 ปีที่แล้ว +2

    Спасибо, за уроки. Не в тему: Вы почему то у меня с Леонидом Броневым ассоциируетесь )

    • @narodstream552
      @narodstream552  8 ปีที่แล้ว +2

      "А Вас, Штирлиц, я попрошу остаться" - теперь так буду уроки начинать. Гы, гы.

  • @timbakk
    @timbakk 8 ปีที่แล้ว

    Спасибо за уроки! Владимир, немного не по теме,но как с помощью библиотеки HAL (или может LL) использовать битовую маску для порта? Тоесть вывести на ножки 16-ти битового порта значение, чтобы каждый пин пора представлял свой разряд. Например: 1 = 0b0000000000000001 (устанавливаем высокий уровень на нулевом пине); 65535 = 0b1111111111111111 (выставляем все пины в единицу) и т.д. Понимаю как это сделать с помощью функций SET, RESET отдельных пинов, но может быть, есть какая нибудь спициальная для этого функция. Спасибо.

    • @narodstream552
      @narodstream552  8 ปีที่แล้ว

      Это надо библиотеку писать. Я не заморачивался. Посмотрите, как это выполнено в Atmel Studio.

  • @AlexeySolovyev55
    @AlexeySolovyev55 8 ปีที่แล้ว

    У меня подобная схема не заработала по причине того, что на выходах уровень 1 равен 2,95V, этого недостаточно для того, чтобы закрыть транзисторы. Индикатор светится все время. Пробовал токо-ограничительный резистор включать в цепь эмитора, все равно уровня 1 мало.

    • @andreyparovozz
      @andreyparovozz 7 ปีที่แล้ว

      С подключением напутал.

  • @Кузя-щ5м
    @Кузя-щ5м 7 ปีที่แล้ว

    в регистр ODR ,и не писать длинную функцию и каждый пин устанавливать командой set и reset

    • @narodstream552
      @narodstream552  7 ปีที่แล้ว

      Ответил выше.

    • @narodstream552
      @narodstream552  7 ปีที่แล้ว

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

  • @Кузя-щ5м
    @Кузя-щ5м 7 ปีที่แล้ว

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

    • @narodstream552
      @narodstream552  7 ปีที่แล้ว +1

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