Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Пару вопросов о stm32f100
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
ArtTheft
Добрый день.
Только начал заниматься микроконтроллерами STM32.
Для проекта я выбрал stm32f100cbt6b.
Первый вопрос. Это как проверить, работу МК, если я все напаивал самостоятельно? Обвязка самая простая: внешний кварц, парочка кондеров под питание.
И главные вопрос, это как прошить его. Есть разъемы на выводах SWDIO, SWCLK, а так же есть разъемы на выходах ТхД и РхД.
Задаю такие вопросы, просто не очень понял по поводу прошивки мк с помощью этих двух методов.
Большая просьба писать как для танкиста. Один раз опишите и больше глупых вопросов я задавать не буду.

Заранее спасибо всем за помощь.

С уважением, Владимир.
A.Lex
Цитата(ArtTheft @ Aug 14 2014, 11:33) *
Добрый день.
Только начал заниматься микроконтроллерами STM32.
Для проекта я выбрал stm32f100cbt6b.
Первый вопрос. Это как проверить, работу МК, если я все напаивал самостоятельно? Обвязка самая простая: внешний кварц, парочка кондеров под питание.
И главные вопрос, это как прошить его. Есть разъемы на выводах SWDIO, SWCLK, а так же есть разъемы на выходах ТхД и РхД.
Задаю такие вопросы, просто не очень понял по поводу прошивки мк с помощью этих двух методов.
Большая просьба писать как для танкиста. Один раз опишите и больше глупых вопросов я задавать не буду.

Заранее спасибо всем за помощь.

С уважением, Владимир.
1. Берете к.либо проект из примеров и компилируете.


2. SW ИМХО лучше, т.к. позволяет отлаживать дебаггером, ну и не надо BOOT0 и BOOT1 коммутировать. Как подключать к ST-LINK - в прилогаемой доке.




ViKo
Купите платку Дискавери. На ней и отладчик-программатор есть, и целевой МК.
А для проверки я вывожу частоту на MCO.
viakon
Что туда шить есть у Вас? SWDIO и SWCLK требуют отдельного программатора (ST-LINK). Если TXD, RXD - это ноги 30,31 и есть преобразователи уровня в RS-232 то можно
подключиться к com порту компьютера и прошить с помощью встроенного бутлоадера.

http://easystm32.ru/useful-things/42-bootloader-stm32

Я бы посоветовал купить http://www.terraelectronica.ru/catalog_info.php?CODE=573571
сильно обегчит освоение.
ArtTheft
Цитата(viakon @ Aug 14 2014, 12:14) *
Что туда шить есть у Вас? SWDIO и SWCLK требуют отдельного программатора (ST-LINK). Если TXD, RXD - это ноги 30,31 и есть преобразователи уровня в RS-232 то можно
подключиться к com порту компьютера и прошить с помощью встроенного бутлоадера.

http://easystm32.ru/useful-things/42-bootloader-stm32

Я бы посоветовал купить http://www.terraelectronica.ru/catalog_info.php?CODE=573571
сильно обегчит освоение.


Читал данную статью,но возникает вопрос такого плана. У меня на ресете стоит кондер,кнопки нет. Можно ли просто после прошивки отключить питание,как бы сделать такой ресет?
И еще вопрос в моей схеме BOOT0 подключен на землю через резистор 2кОм, а BOOT1 висит в воздухе, то есть по статье, будем запускать программа прошитая во Флеш?

Шить пока нечего. Я начинаю только разбираться, пока буду делать проект по частям.
И кстати вопрос по этому тоже. Есть статья http://easystm32.ru/for-beginners/35-pwm-in-stm32.
По какому пути я должен пройти, чтобы залить этот код в МК? То есть должен ли я использовать CoIDe? Какие библиотеки?
viakon
Цитата(ArtTheft @ Aug 14 2014, 15:28) *
Читал данную статью,но возникает вопрос такого плана. У меня на ресете стоит кондер,кнопки нет. Можно ли просто после прошивки отключить питание,как бы сделать такой ресет?
И еще вопрос в моей схеме BOOT0 подключен на землю через резистор 2кОм, а BOOT1 висит в воздухе, то есть по статье, будем запускать программа прошитая во Флеш?

Шить пока нечего. Я начинаю только разбираться, пока буду делать проект по частям.
И кстати вопрос по этому тоже. Есть статья http://easystm32.ru/for-beginners/35-pwm-in-stm32.
По какому пути я должен пройти, чтобы залить этот код в МК? То есть должен ли я использовать CoIDe? Какие библиотеки?



Boot1 оставьте как есть? Boot0 запаять перемычку на + питания контроллера. После подать питание на плату, все, котроллер в бутлоадере. Залить программу с помощью Flash Loader Demonstrator. Выключить питание. Отпаять перемычку. Включить питание. Запустится залитая программа.

Лично я использую связку arm-gcc Eclipse Openocd все бесплатное. Что будет Вам удобнее не знаю.

потратьте 600-700р на кит, получите рабочую плату и отладчик по SWD, это куда удобнее чем заливать прогу и смотреть как она работает, можно поставить точки останова, пошагово пройти по программе. Скачайте STM32F10x_StdPeriph_Lib помимо библиотеки куча примеров работы с периферией.
Ну и самое главное работать головой, разжевывать Вам тут никто не будет.
SSerge
Цитата(ArtTheft @ Aug 14 2014, 16:28) *
И еще вопрос в моей схеме BOOT0 подключен на землю через резистор 2кОм, а BOOT1 висит в воздухе, то есть по статье, будем запускать программа прошитая во Флеш?

Да.
Но если собираетесь прошивать через USART1, то BOOT1 лучше подтянуть резистором к земле.
Тогда при низком уровне на BOOT0 будет стартовать программа из флеши, а при высоком - встроенный бутлоадер.
ArtTheft
Цитата(viakon @ Aug 15 2014, 06:58) *
Boot1 оставьте как есть? Boot0 запаять перемычку на + питания контроллера. После подать питание на плату, все, котроллер в бутлоадере. Залить программу с помощью Flash Loader Demonstrator. Выключить питание. Отпаять перемычку. Включить питание. Запустится залитая программа.

Лично я использую связку arm-gcc Eclipse Openocd все бесплатное. Что будет Вам удобнее не знаю.

потратьте 600-700р на кит, получите рабочую плату и отладчик по SWD, это куда удобнее чем заливать прогу и смотреть как она работает, можно поставить точки останова, пошагово пройти по программе. Скачайте STM32F10x_StdPeriph_Lib помимо библиотеки куча примеров работы с периферией.
Ну и самое главное работать головой, разжевывать Вам тут никто не будет.


Насчет совета, спасибо большое.
А насчет кита, я уже таки сделал. Заказал, жду пока приедет. Буду тестировать и надеяться что припаял я свой МК правильно sm.gif

Цитата(SSerge @ Aug 15 2014, 11:37) *
Да.
Но если собираетесь прошивать через USART1, то BOOT1 лучше подтянуть резистором к земле.
Тогда при низком уровне на BOOT0 будет стартовать программа из флеши, а при высоком - встроенный бутлоадер.

А тогда такой вопрос.
Если я буду прошивать через SWD, надо чтобы выходы BOOT0, BOOT1 были подключены по правилу прошивки через USART?
A.Lex
Цитата(ArtTheft @ Aug 15 2014, 11:57) *
А тогда такой вопрос.
Если я буду прошивать через SWD, надо чтобы выходы BOOT0, BOOT1 были подключены по правилу прошивки через USART?
Нет, как и с JTAG.


SSerge
Цитата(ArtTheft @ Aug 15 2014, 15:57) *
Если я буду прошивать через SWD, надо чтобы выходы BOOT0, BOOT1 были подключены по правилу прошивки через USART?

Самому SWD пофиг, он при любом варианте сможет записать флешь, но Вы же хотите чтобы после ресета запустилась прошитая программа, а не встроенный загрузчик. Следовательно, по крайней мере BOOT0 должен быть в "0" (а состояние BOOT1 в этом случае безразлично).

Насчёт софта.
Примеры и библиотеки из STM32F10x_StdPeriph_Lib тут уже упоминались.
Их никак нельзя признать за образец хорошего стиля, но почитать/посмотреть можно. Но поскольку для использования этих библиотек даташит всё равно изучать придётся, то проще (по моему скромному мнению) в процессе изучения сразу писать своё, сэкономите кучу времени, избавившись от необходимости разбираться как же эти библиотеки устроены и как их использовать.

Абсолютный минимум, необходимый для написания простейшей программы для STM32, состоит из трёх файлов:
1. startup_stm32f10x_md_vl.s - в нём описаны вектора прерываний (для Вашего процессора), в том числе и Reset_Handler, в его обработчике вызывается функция SystemInit и происходит переход на код, сгенерированный компилятором.
2. system_stm32f10x.c - в нём реализация функции SystemInit()
3. ещё один файл, с функцией main()

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

Для начала можно не заморачиваться инициализацией системы тактирования, проц стартует на внутреннем генераторе (HSI), его точности хватает для работы UART-а.
ViKo
Цитата(SSerge @ Aug 15 2014, 18:48) *
2. system_stm32f10x.c - в нём реализация функции SystemInit()

SystemInit тоже проще свою написать, чем разбираться в библиотечном исходнике.
P.S. Э, да что там говорить... Ловите.
CODE

/*!****************************************************************************
*
@brief System Clock STM32F100RBT6B initialize
@details Установить тактовую частоту 24MHz
@param
@return
@note Вызывается в startup.s
*/
void SystemInit(void) {

/* Задать начальное состояние (как после сброса) */
RCC->CR = 0x00000083; // HSI On, HSITRIM = 0x80
RCC->CFGR = 0x00000000; // HSI oscillator used as system clock
RCC->CIR = 0x001F0000; // Reset and disable all interrupts

/* Включить HSE генератор
Счетчик таймаута старта HSE генератора, загружается числом из stm32f10x.h
Ждать готовности генератора или окончания таймаута */
uint32_t StartCount = HSE_STARTUP_TIMEOUT;
RCC->CR |= RCC_CR_HSEON;
while (--StartCount && !(RCC->CR & RCC_CR_HSERDY)) { }

/* Если HSE генератор включился (таймаут не вышел) */
if (StartCount) {

/* Конфигурировать SYSCLK, HCLK, PCLK2, PCLK1, ADCPRE
Задать коэффициенты деления частоты */
RCC->CFGR =
RCC_CFGR_SW_0 * 0 | // SW[1:0] bits (System clock Switch): HSI
RCC_CFGR_HPRE_0 * 0 | // HPRE[3:0] bits (AHB prescaler): SYSCLK / 1 = 24 MHz (max)
RCC_CFGR_PPRE1_0 * 0 | // PRE1[2:0] bits (APB1 prescaler): HCLK / 1 = 24 MHz (max)
RCC_CFGR_PPRE2_0 * 0 | // PRE2[2:0] bits (APB2 prescaler): HCLK / 1 = 24 MHz
RCC_CFGR_ADCPRE_0 * 0 | // ADCPRE[1:0] bits (ADC prescaler): PCLK2 / 2 = 12 MHz (max)
RCC_CFGR_PLLSRC * 1 | // PLL entry clock source: PREDIV1
RCC_CFGR_PLLXTPRE * 1 | // HSE divider for PLL entry: / 2 (4 MHz)
RCC_CFGR_PLLMULL_0 * 4 | // PLLMUL[3:0] bits (PLL multiplication factor): * 6 = 24 MHz
RCC_CFGR_MCO_0 * 7 ; // MCO[2:0] bits (Microcontroller Clock Output): PLL / 2 = 12 MHz

/* Пределитель для PLL, не обязательно
Младший бит совпадает с RCC_CFGR_PLLXTPRE */
RCC->CFGR2 =
RCC_CFGR2_PREDIV1_0 * 1 ; // PREDIV1 input clock divided by 2

/* Включить PLL (и защиту HSE от сбоев, если нужно)
Ждать, пока нет готовности PLL */
RCC->CR |=
RCC_CR_PLLON * 1 | // PLL enable
RCC_CR_CSSON * 1 ; // Clock Security System enable
while (!(RCC->CR & RCC_CR_PLLRDY)) { }

/* Выбрать PLL как источник системной частоты
Ждать, пока PLL не выберется как источник системной частоты */
RCC->CFGR |= RCC_CFGR_SW_0 * 2 ; // System clock Switch: PLL
while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL) { }

/* Выключить внутренний генератор HSI */
RCC->CR &= ~RCC_CR_HSION;
}

/* Если HSE генератор не запустился, работать от HSI */
}
A.Lex
Может помочь конфигуратор STM32CubeMX. Коды выдает ИМХО приемлимые, и, главное, не пропустите "мелочь" типа подать тактирование на включаемый пин/порт/таймер....
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.