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

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

Share this post


Link to post
Share on other sites

Материалы вебинара «Создание беспроводных устройств на системах-на-кристалле семейства SimpleLink компании TI»

Компания Компэл, совместно с Texas Instruments провели вебинар, где инженер по применению беспроводных технологий компании TI рассказал(дублированный перевод), как на новых беспроводных системах можно реализовать несколько полезнейших в повседневной жизни функций для ваших устройств. С развитием элементной базы TI становится возможной реализация более удобных, функциональных и безопасных систем, недоступных ранее.

Подробнее...

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

ESP32-DevKitC-VB позволит быстро запустить ваше первое WiFi-приложение

Отладочная плата на основе одного из самых популярных WiFi-модулей Espressif ESP32-WROVER-B позволяет в самые короткие сроки запустить приложение с поддержкой беспроводных стандартов WiFi 802.11b/g/n и Bluetooth Classic/BLE. Ресурсов встроенного в модуль чипа ESP32-D0WD хватит для решения даже очень сложных задач.

Подробнее...

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 быстрее чем дойдет отладчик?

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 выше

Share this post


Link to post
Share on other sites
Posted (edited)

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

Вот вопрос, ндаа... Толи понял, то ли ничего не понял. Читаю 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-выводном корпусе.

Share this post


Link to post
Share on other sites
Posted (edited)
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

Вот с этим - то и проблема, он еще не приехал)

Share this post


Link to post
Share on other sites
Posted (edited)

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

Edited by Oxford

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Posted (edited)

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...

  • Similar Content

    • By katet
      Добрый день. Может быть,кто-нибудь уже сталкивался с таким. 
      Занимаюсь доработкой чужого проекта в среде STM32CubeMX, первый раз работаю с библиотекой HAL.
      В этом проекте осуществлялся прием байт по USART1 из ComMon. Проект был открыт в STM32CubeMX, где мной дополнительно были активированы новые модули - RTC, SD, USART2. Настройки USART1 не менялись. 
      Часы реального времени RTC: питание от батарейки, тактирование – от LSE. 
      При приеме байт по USART1 в новом проекте (активны  USART1, RTC, SD, USART2) было выявлено, что после приема 2 байт по USART1 перестает инкрементироваться значение переменной uwTick, отвечающей за прерывания Systick, в результате чего дальнейшая отладка невозможна. Не удается выяснить, в каком месте и почему перестает увеличиваться значение uwTick. При работе со старым проектом (где активен только USART1) uwTick инкрементируется после приема 2 байт.
      Смены приоритета прерываний не происходит, в  функцию HAL_Delay() отладчик не попадает. При вызове функции HAL_ResumeTick(), возобновляющей прерывания Systick, ничего не меняется, значение uwTick остается неизменным.
      Остановка прерываний была обнаружена при попадании в функцию:
      static HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, uint32_t Tickstart, uint32_t Timeout)
      {
        /* Wait until flag is set */
        while((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status) 
        {
          /* Check for the Timeout */
          if(Timeout != HAL_MAX_DELAY)
          {            
            if((Timeout == 0U)||((HAL_GetTick() - Tickstart ) > Timeout))
            {
              /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */
              CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE));
              CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
              
              huart->gState  = HAL_UART_STATE_READY;
              huart->RxState = HAL_UART_STATE_READY;
              
              /* Process Unlocked */
              __HAL_UNLOCK(huart);
              
              return HAL_TIMEOUT;
            }
          }
        }
        
        return HAL_OK;
      }
      В новом проекте текущее значение uwTick, возвращаемое функцией HAL_GetTick(), всегда равно значению Tickstart. В старом проекте сначала также, но затем uwTick начинает увеличиваться. Выяснить, в каком именно месте кода значение uwTick должно начать увеличиваться, не удается.
      Может быть, у кого-нибудь есть хоть какие-то идеи, с чем может быть связана остановка увеличения значений uwTick, помогите пожалуйста)
      Распиновка и конфигурация обоих проектов: верхняя часть рисунков - первоначальный, работающий вариант,  нижняя - сбой прерываний Systick.


    • By _qwerty
      Добрый день. Продам
      отладочные платы для STM32
      Отладочная плата на базе MCU STM32F429ZIT6 (ARM Cortex-M4) - 2600 р. В наличии 2 шт. Отладочная плата на базе MCU STM32F407VGT6 (ARM Cortex-M4) - 1600 р. В наличии 2 шт. Отладочная плата на базе MCU STM32F303VCT6 (ARM Cortex-M4) - 1200 р. В наличии 2 шт. Отладочная плата на базе MCU STM32F103RBT6 (ARM Cortex-M3) - 1000 р. В наличии 2 шт. образовательный набор Амперка Tetra для обучения детей прикладному программированию на основе визуального языка Scratch - 4500 р. В наличии 2 шт.
      электронный конструктор БХВ-Петербург Дерзай 36608 Стартовый набор Arduino - 1500 р. В наличии 2 шт.
      Все новое, не использовалось, возможна отправка почтой по России


















    • By ChaNger16ua
      Здравствуйте, недавно начал заниматься stm32, до этого занимался только Arduino/AVR. Купил себе плату с чипом STM32F103C8T6, и программатор ST-Link v2.
      Сразу же начал искать себе подходящую IDE, остановил свой выбор на CoIDE. И когда начал, проблем с загрузкой, и компиляцией программы не было, управлял всем через регистры, и радостно мигал светодиодом, но когда решил проверить как работает отладка, столкнулся с проблемой. При запуске отладки проект компилировался и загружался, но сама отладка выдавала ошибку: Cannot execute this command without a live selected thread. Перерыл весь интернет, ничего не помогло. 
      Взял уже пример с миганием светодиода из библиотеки GPIO, поменял название функции на int main, поставил return, и дописал строку которая включает SWD. Вот сам код:
      #include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" int main(void) { int i; /* Initialize Leds mounted on STM32 board */ GPIO_InitTypeDef GPIO_InitStructure; /* Initialize LED which connected to PC6,9, Enable the Clock*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); /* Configure the GPIO_LED pin */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); while (1) { /* Toggle LEDs which connected to PC6*/ GPIOC->ODR ^= GPIO_Pin_13; /* delay */ for(i=0;i<0x100000;i++); } return 0; } Запускаю, и ничего та же ошибка.
      После решил сам все не делать, а создать проект в STM32CubeMX. Делал по многим примерам(код кидать не буду он стандартный). Правильно настраивал порты, в пинах sys выставил значение Serial Debug, выставил тактирование. Кидаю проект, все правильно выставляю(папки Drivers, Src, Inc), потом в конфигурации во вкладке компилятор, выставляю переменные. Компилирую, выдает такую строку:
      Program Size: text data bss dec hex filename 0 0 0 0 0 NewMain.elf тоесть программы по сути нет, это в настройках линкера во вкладке options стоит галочка на: Use memory layout from memory window.
      Окей знаю что линкер просто не подключает нужные библиотеки и файлы, поэтому программа ничего не весит.
      Снимаю галочку, ставлю Scatter file, который сделала STM32CubeMX, запускаю.
      Дальше выдает ошибку, но не компиляции, вылазит окно Problem Occurred, нажимаю details, там такое:
      An internal error occurred during: "Building". String index out of range: -1 И все, компиляция прервана. НО если очистить проект, и потом сбилдить(либо ребилд), то работает, но заветный светодиод не моргает.
      Дальше касательно отладки, в нее не могу зайти, потому что при отладке проект компилируется, но я его не могу скомпилировать, могу перебилдить, и поэтому отладка тупо не включается, но есть я очищу проект, то отладка просто не работает.
       
      P.S перемычки на плате менял, как угодно, и с одной прошивкой и другой, не работает. Пытался освоить uVision, не пошло, куча проблем с ней, хотя уже и по гайдам делал(по нескольким), и сам все пытался. Но в итоге как не работало, так и не работает.
      Поэтому прошу помощи.
    • By IgnatiusF
      Не удается проинициализировать работу UART2 на скорость 19200 бод.
      Не вызывается прервание совсем, отсылаются постоянно нули на всех скоростях, если ставить System clock switch в 01 (HSE). При работе от RC генератора выдает уже просто не то, что нужно. 
      Кварц рабочий, и вообще все работает, при использовании библиотек HAL.
      SysTick выключил потому, что были подозрения на конлфикт приоритетов.
      Внизу представлена именно та часть кода программы, которая не работает, то есть сам UART.
      Проект скоро сдавать, а использовать готовую библиотеку HAL не хочется совсем, уже несколько дней парюсь и не могу найти проблему. Попробовал разобраться что пишет в регистры HAL, однако не смог т.к. не хватает знаний, значения регистров все такие же, кроме PLL (не используется) и RCC_CR1 (в HAL почему-то полностью равен 0). Проверял передачей данных по UART. Регистр BRR не удалось считать т.к. он только для записи. У меня записано так:
      USART1->BRR = 0x412;  //20MHz/16/19200 = 65,104.
      Где искать следует ошибку?
    • By small girl
      Привет, ребят! Кто возьмется написать на С протокол взаимодействия для сети микроконтроллеров. База: STM32 с bluetooth модулем HC-06,- slave. ПК - master?

      За вознаграждение
×
×
  • Create New...