реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Пару вопросов о stm32f100
ArtTheft
сообщение Aug 14 2014, 08:33
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 19-06-14
Пользователь №: 82 003



Добрый день.
Только начал заниматься микроконтроллерами STM32.
Для проекта я выбрал stm32f100cbt6b.
Первый вопрос. Это как проверить, работу МК, если я все напаивал самостоятельно? Обвязка самая простая: внешний кварц, парочка кондеров под питание.
И главные вопрос, это как прошить его. Есть разъемы на выводах SWDIO, SWCLK, а так же есть разъемы на выходах ТхД и РхД.
Задаю такие вопросы, просто не очень понял по поводу прошивки мк с помощью этих двух методов.
Большая просьба писать как для танкиста. Один раз опишите и больше глупых вопросов я задавать не буду.

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

С уважением, Владимир.
Go to the top of the page
 
+Quote Post
A.Lex
сообщение Aug 14 2014, 09:07
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 138
Регистрация: 27-12-11
Пользователь №: 69 107



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

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

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


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





Прикрепленные файлы
Прикрепленный файл  STLINK_SWD_for_STM32.doc ( 61.5 килобайт ) Кол-во скачиваний: 201
 
Go to the top of the page
 
+Quote Post
ViKo
сообщение Aug 14 2014, 09:13
Сообщение #3


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Купите платку Дискавери. На ней и отладчик-программатор есть, и целевой МК.
А для проверки я вывожу частоту на MCO.
Go to the top of the page
 
+Quote Post
viakon
сообщение Aug 14 2014, 09:14
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 290
Регистрация: 9-12-05
Из: г. Пермь
Пользователь №: 12 002



Что туда шить есть у Вас? 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
сильно обегчит освоение.
Go to the top of the page
 
+Quote Post
ArtTheft
сообщение Aug 14 2014, 09:28
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 19-06-14
Пользователь №: 82 003



Цитата(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? Какие библиотеки?

Сообщение отредактировал ArtTheft - Aug 14 2014, 10:15
Go to the top of the page
 
+Quote Post
viakon
сообщение Aug 15 2014, 03:58
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 290
Регистрация: 9-12-05
Из: г. Пермь
Пользователь №: 12 002



Цитата(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 помимо библиотеки куча примеров работы с периферией.
Ну и самое главное работать головой, разжевывать Вам тут никто не будет.
Go to the top of the page
 
+Quote Post
SSerge
сообщение Aug 15 2014, 08:37
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(ArtTheft @ Aug 14 2014, 16:28) *
И еще вопрос в моей схеме BOOT0 подключен на землю через резистор 2кОм, а BOOT1 висит в воздухе, то есть по статье, будем запускать программа прошитая во Флеш?

Да.
Но если собираетесь прошивать через USART1, то BOOT1 лучше подтянуть резистором к земле.
Тогда при низком уровне на BOOT0 будет стартовать программа из флеши, а при высоком - встроенный бутлоадер.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
ArtTheft
сообщение Aug 15 2014, 08:57
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 19-06-14
Пользователь №: 82 003



Цитата(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?
Go to the top of the page
 
+Quote Post
A.Lex
сообщение Aug 15 2014, 12:52
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 138
Регистрация: 27-12-11
Пользователь №: 69 107



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


Go to the top of the page
 
+Quote Post
SSerge
сообщение Aug 15 2014, 15:48
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(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-а.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Aug 15 2014, 21:51
Сообщение #11


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(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 */
}
Go to the top of the page
 
+Quote Post
A.Lex
сообщение Aug 17 2014, 05:51
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 138
Регистрация: 27-12-11
Пользователь №: 69 107



Может помочь конфигуратор STM32CubeMX. Коды выдает ИМХО приемлимые, и, главное, не пропустите "мелочь" типа подать тактирование на включаемый пин/порт/таймер....
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th August 2025 - 17:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01468 секунд с 7
ELECTRONIX ©2004-2016