Jump to content
IgnatiusF

Программирование микроконтроллеров STM32 по UART

Recommended Posts

Появилась надобность в микроконтрллере STM32 для проектирования устройства. И вопрос вот в чем - в программировании этих стм-ов. Прочитал несколько статей по их программированию - что вообще для этого нужно. Выяснил, что в них (во всех?) есть вшитый bootloader, который может сам прошить МК.

То есть для этого необходимо подключить какой-либо ...to UART преобразователь, а именно TX, RX, VCC и gnd к соответсвующим ногам микроконтроллера и все? Или надо еще куда-то подавать управляющий сигнал?

Еще вопрос по поводу бутлоадера - если он занимает 8 КБ (или по разному?), то МК с 16 КБ памяти, по сути, будет иметь 8 КБ для программ?

Datasheet я только начинаю читать и пока еще не нашел точной информации, так что за помощь буду очень признателен^_^

Share this post


Link to post
Share on other sites
25 минут назад, IgnatiusF сказал:

Прочитал несколько статей по их программированию - что вообще для этого нужно.

А надо было даташит.

 

25 минут назад, IgnatiusF сказал:

есть вшитый bootloader, который может сам прошить МК.

Есть.

 

26 минут назад, IgnatiusF сказал:

Или надо еще куда-то подавать управляющий сигнал?

Надо совершать манипуляции выводами BOOT и RESET при старте. Статьи явно не читались, а пролистывались.

 

26 минут назад, IgnatiusF сказал:

Еще вопрос по поводу бутлоадера - если он занимает 8 КБ (или по разному?), то МК с 16 КБ памяти, по сути, будет иметь 8 КБ для программ?

Нет, бутлоадер там аппаратный и память не занимает.

Share this post


Link to post
Share on other sites

Изготовление 2-х слойных плат от 2$, а 4-х слойных от 5$!

Быстрое изготовление прототипа платы всего за 24 часа! Прямая доставка с нашей фабрики!

Смотрите видео о фабрике JLCPCB: https://youtu.be/_XCznQFV-Mw

Посетите первую электронную выставку JLCPCB https://jlcpcb.com/E-exhibition чтобы получить купоны и выиграть iPhone 12, 3D-принтер и так далее...

Есть такой документ на сайте STM AN2606 Application note почитайте. Там для каждого чипа расписано какой интерфейс используется, схема подключения и пр.

Share this post


Link to post
Share on other sites

Вебинар «Параметры выше, цена ниже. Обновление в линейке AC/DC- и DC/DC-преобразователей MORNSUN» (26.01.2021)

Приглашаем 26 января на бесплатный вебинар, посвящённый преимуществам и отличиям новых источников питания и DC/DC-преобразователей Mornsun. На вебинаре будут рассмотрены изолированные и неизолированные DC/DC-преобразователи последнего, четвертого, поколения (R4) и компактные модульные источники питания второго и третьего поколений (семейства LS/R3 и LD/R2) на плату. Рассмотрим новую группу продукции – встраиваемые источники питания в кожухе.

Подробнее

Ага, спасибо, статьи "перелистал", все это нашел и запомнил. AN тоже штука хорошая, я эту инфу искал, да не нашел. Просто параллельно изучаю несколько вещей и поэтому делаю это бегло и, бывает, не внимательно)

Share this post


Link to post
Share on other sites

Вебинар "Новый BlueNRG-LP с Bluetooth 5.2 и Long Range — волшебная палочка разработчика IoT" (04/02/2021)

Приглашаем 4 февраля на бесплатный вебинар о BlueNRG-LP - новом программируемом чипе SoC STMicroelectronics. На вебинаре будут детально рассмотрены новые возможности, особенности подключения, аппаратные и программные средства для разработки, а также практические примеры работы с микросхемой.

Подробнее

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

Share this post


Link to post
Share on other sites

Плата STEVAL-IDB011V1 – тестируем идеи на новом BLE 5.2-чипе BlueNRG-LP

Новая система на кристалле BlueNRG-LP производства STMicroelectronics предназначена для устройств интернета вещей(IoT ) и не только, отвечает стандарту BLE 5.2 и поддерживает MESH-сети. Микросхема содержит малопотребляющий MCU Cortex-M0+. Отладка STEVAL-IDB011V1 позволит сэкономить время на разработку новых устройств.

Подробнее

8 hours ago, IgnatiusF said:

Datasheet я только начинаю читать и пока еще не нашел точной информации

ну надо значит продолжать читать и искать более точную информацию. А еще можно использовать поиск по форуму, чтобы не задавать одни и те же обмусоленные 55 раз вопросы заново. А ты судя по всему вообще ничего толком то и не читал, а с уже с вопросами. Труда не приложил


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

Share this post


Link to post
Share on other sites

На счет программатора и отладки это ясно, но это уж только если договорюсь об уго покупке. Деньги-то не мои)

На счет поиска по форуму - да искал. На счет труда не приложил - соглашусь от части, поскольку я сказал, что занят параллельно несколькими делами. Завтра (сегодня) уже надо все обсудить, заказать все что надо.

Share this post


Link to post
Share on other sites

в теме для начинающих все до атомов расписано, даже искать не надо


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

Share this post


Link to post
Share on other sites
3 часа назад, IgnatiusF сказал:

Деньги-то не мои)

Китайский клон ST-Link V2  стоит 3 бакса

Share this post


Link to post
Share on other sites
6 часов назад, BARS_ сказал:

Китайский клон ST-Link V2  стоит 3 бакса

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

Share this post


Link to post
Share on other sites

А вы оптимистично надеетесь отладить с нуля через UART быстрее чем дойдет отладчик?


Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Share this post


Link to post
Share on other sites
7 часов назад, COKPOWEHEU сказал:

А вы оптимистично надеетесь отладить с нуля через UART быстрее чем дойдет отладчик?

Я и раньше не полагался на отладчики. Живут же как-то люди?) Хотя у меня код никогда особо сложным и не был. Думаю, моргалок и небольшого "подобия дебага" через UART мне пока хватит.

Share this post


Link to post
Share on other sites

ну да, само то под кортекс диодиком помигать


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

Share this post


Link to post
Share on other sites

дело не только в отладчике. Не придется дергать BOOT1 и ресет, да и скорость у JTAG/SWD выше


Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Share this post


Link to post
Share on other sites

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

Вот вопрос, ндаа... Толи понял, то ли ничего не понял. Читаю AN2606 на счет того, где этот boot1 находится, увидел что в таблице это не пин, а бит, и теперь не понимаю где выставляется. И еще какой интерфейс (UART, I2C, SPI, 1,2,3...) используется для программирования. Нашел блок схему: USART.png.5a7d738297af79f471e56722d27e4865.png

То есть притягиваем boot0 к питанию (Pattern2 | Boot0(pin) = 1 and nBoot1(bit) = 1), жмем RESET, и через любой USART передаем прошивку? Простите если туплю и не понимаю, для меня это и вправду не очевидно...

Edited by IgnatiusF

Share this post


Link to post
Share on other sites
1 час назад, IgnatiusF сказал:

где этот boot1 находится, увидел что в таблице это не пин, а бит, и теперь не понимаю где выставляется

Посмотрите описание порта PB2. К сожалению, вы не написали какой контроллер вы используете. Если stm32f103c8t6 в 48-выводном корпусе, то 20-й вывод.

На практике достаточно притянуть BOOT0 и BOOT1 к земле через резистор. Плюс поставить перемычку, замыкающую BOOT0 на питание. Тогда для перепрошивки надеваете перемычку, дергаете ресет (или питание) и запскаете прошивку. После окончания снимаете перемычку и дергаете ресет (питание) для проверки прошитого.

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

И еще какой интерфейс (UART, I2C, SPI, 1,2,3...) используется для программирования.

UART1: PA9, PA10, которые 30, 31 выводы в 48-выводном корпусе.


Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Share this post


Link to post
Share on other sites
27 минут назад, COKPOWEHEU сказал:

Посмотрите описание порта PB2. К сожалению, вы не написали какой контроллер вы используете. Если stm32f103c8t6 в 48-выводном корпусе, то 20-й вывод.

Контроллер STM32F378RTC6. Без платы, имеется ввиду, если что.

Цитата

На практике достаточно притянуть BOOT0 и BOOT1 к земле через резистор...

BOOT0 я на распиновке вижу, а где находится BOOT1? Я ни в одном документе его не видел, ни на одной схеме, однако на отладочных он присутствует. А в N2606 вообще пишут, что это бит, а не пин для F378. Можете немного разъяснить?

UPD: Ясно, после ресета BOOT1 работает на ноге PB2 на F103, однако в моем варианте после ресета такого нет.

Edited by IgnatiusF

Share this post


Link to post
Share on other sites

BOOT1 это действительно бит. Почитать можно в Reference manual секция 3.5.7  Option byte register (FLASH_OBR)

Как с ним работать есть в stm32f37x_flash.c. В самом начале описана работа с флэш памятью.

Share this post


Link to post
Share on other sites

Судя по тому, что я понял - работать с этим битом требуется только при использовании самописного бутлоадера, а при использовании аппаратного он выставляется автоматически?

Share this post


Link to post
Share on other sites

Не нашел что записано в этом бите в чистом МК. Попробуйте просто подключиться к UART1 и попробуйте загрузить любую программу. Для загрузки используют Flash Loader Demonstrator.

Share this post


Link to post
Share on other sites

Если ты ничего не умеешь зачем тебе STM32F378RCT6, Ардуино тебе самое то будет.

Edited by Oxford

Share this post


Link to post
Share on other sites

Если ты такой умный помоги человеку, нет желания помогать иди мимо.

Share this post


Link to post
Share on other sites

elki, ты коней своих притормози. Желание есть, нет времени. У тебя есть время, помогай. Я ему помог, пусть делает на Arduino так он сделает очень быстро проект.

Цитата

Устройство должно быть уже готово меньше чем через месяц

Я уже начал отсчет времени, понаблюдаю прошло 9 дней, как успехи?

 

Edited by Oxford

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения


  • Сенсорный дисплей 3.5" для Raspberry Pi. 480*320 точек

  • Similar Content

    • By Карен Григорян
      Здравствуйте, товарищи форумчане!
      У меня вот такая проблемка: есть такая схема:

      По сути тут stm32 на который подаётся некоторое постоянное напряжение, а именно на вход PA1. МК получает его, приводит в цифровую форму (разрядность АЦП равна восьми) и выводит их при помощи восьми GPIO выводов, а именно PB0-PB7. Эти выводы соединены со схемой ЦАП, которая преобразует значение, полученное от stm32 обратно в аналоговую форму и выводит в пробнике R2(1).
      Проблема в том результат выводится не верный. Точнее говоря не всегда верный. Когда я подаю 1В, то на выходе получаю 0,99В, что верно. Но когда, например, подаю 300мВ, то получаю 1.8В, что совсем не верно. Код прошивки предельно прост:
        while (1)
        {
              HAL_ADC_Start_IT(&hadc1);
              HAL_Delay(10);
      }
      Код колбека прерывания:
      void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
      {
          if(hadc->Instance == ADC1) //check if the interrupt comes from ACD1
          {
            int adc = HAL_ADC_GetValue(&hadc1);
                  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,(adc>>0)&1);
                  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,(adc>>1)&1);
                  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,(adc>>2)&1);
                  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,(adc>>3)&1);
                  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,(adc>>4)&1);
                  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,(adc>>5)&1);
                  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,(adc>>6)&1);
                  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,(adc>>7)&1);
          }
              }
      На всякий случай вот настройка АЦП в stm32:

      Вот пример неправильного вычисления:

    • By Vladimir Rubtsov
      Здраствуйте) Подскажите мне балбесу что я делаю не так. Хочу сделать чтобы при нажатии кнопки (PB13) срабатывал светодиод (PE1), но не работает, я как понял что я не правильно инициализирую режим работы порта кнопки, должен быть режим Input mode, но я не пойму как это сделать. У меня просто горит светодиод, но при нажатии кнопки ничего не происходит. Плата у меня stm32h743zi. Подскажите пожалуйста что я делаю не так, все сайты прочекал, но так ничего и не нашел. p.s. Пробовал через HAL писать тоже самое, там естественно все работает, но я хочу понять как работать с кнопкой без HAL.
      #include "stm32h7xx.h" void GPIO_Init(void); int main(void) { GPIO_Init(); if((GPIOC->IDR & GPIO_IDR_ID13) != 0) { GPIOE->BSRR |= GPIO_BSRR_BR1; }else{ GPIOE->BSRR |= GPIO_BSRR_BS1; } } void GPIO_Init () { RCC->AHB4ENR |= RCC_AHB4ENR_GPIOEEN; RCC->AHB4ENR |= RCC_AHB4ENR_GPIOCEN; GPIOE->MODER = GPIO_MODER_MODE1_0; GPIOC->MODER &= ~GPIO_MODER_MODE13; }


    • By Денисов Никита
      Здравствуйте. Решил я таки попробовать перебраться с Arduino AVR на STM32 и для начала решил полностью скопировать Arduino проект, но появилась проблема. Код который на AVR занимал 7кбайт и свободно вмещался на Atmega8, на STM32 занимает 26кбайт. В проекте используется 2 канала ацп + прерывания по DMA, дисплей 1602 по i2c и 4 GPIO. Конечно это занимает только 42% памяти STM32F103C8T, но для такого проекта она избыточна и я хотел использовать STM32F030F4P, но там только 16 кб памяти и прошивка не влезает. Что я не так делаю? Может нужно какую-то оптимизацию включить или что-то подобное(выбран уровень оптимизации for size)? Или у меня просто код никчёмный? Но там так мало написано, что сомневаюсь что я мог где-то накосячить 
    • By Любовь Бертулите
      Компания производитель вендинговых автоматов для розлива питьевой воды в поисках инженера-системотехника/инженера электронщика.
      График 5/2 с 9 до 18, здесь удаленный формат не рассматриваем.
      Место работы – г. Екатеринбург.
      Мы ищем специалиста, который будет делать прототипы нового для контроллера, курировать производство, проверять, дорабатывать, перепаивать, а также:
      Переписывать текущие программы на С++; Создавать программу для Android для конфигурации параметров контроллера через bluetooth. (т.е. предлагать новые, современные идеи и подходы для развития имеющихся контроллеров, которыми вы владеете); Предлагать новые программные продукты, среды разработки. Будет в тренде мира микроэлектроники, китайского контрактного производства. Может предложить совершенно новую реализацию наших текущих задач, чтобы это было лучше и эффективнее. В идеале, нам нужен специалист, который имеет:
      Опыт программирования микроконтроллеров Atmega, STM32, ESP32; Опыт работы в Altium Designer; Опыт работы в c++ (IAR, QT); Опыт работы с modbus, rs485/232, SPI. Готовы рассматривать специалистов с разным опытом, поэтому пишите, задавайте вопросы.
      Резюме можно отправить на почту lb@ktekt.ru (да, мы кадровое агентство), позвонить можно по следующему тел. 89068001212 - Любовь. 
       
    • By xrou
      Здравствуйте, пытаюсь подключить USB флешку к STM32F767ZI
       
      Включаю USB_OTG_FS - host only, (V bus и SOF  не включаю), USB HOST Class for fs ip - Mass Storage host class, FATFS (USE_LFN - в стеке) - USB_Disk
      В настройках USB_HOST требует, как я понял, пин отвечающий за питание устройства - PC1
      Код простейший, должен работать 100% а может нет. Внутренние файлы библиотек не менял
      Думаю что нет питания на USB устройство т.к. пробовал вставить туда ttl конвертер на котором есть светодиод питания и он не горит
       
      Ваши идеи и предположения? 
       
×
×
  • Create New...