|
|
  |
Пару вопросов о stm32f100 |
|
|
|
Aug 14 2014, 09:07
|
Частый гость
 
Группа: Участник
Сообщений: 138
Регистрация: 27-12-11
Пользователь №: 69 107

|
Цитата(ArtTheft @ Aug 14 2014, 11:33)  Добрый день. Только начал заниматься микроконтроллерами STM32. Для проекта я выбрал stm32f100cbt6b. Первый вопрос. Это как проверить, работу МК, если я все напаивал самостоятельно? Обвязка самая простая: внешний кварц, парочка кондеров под питание. И главные вопрос, это как прошить его. Есть разъемы на выводах SWDIO, SWCLK, а так же есть разъемы на выходах ТхД и РхД. Задаю такие вопросы, просто не очень понял по поводу прошивки мк с помощью этих двух методов. Большая просьба писать как для танкиста. Один раз опишите и больше глупых вопросов я задавать не буду.
Заранее спасибо всем за помощь.
С уважением, Владимир. 1. Берете к.либо проект из примеров и компилируете. 2. SW ИМХО лучше, т.к. позволяет отлаживать дебаггером, ну и не надо BOOT0 и BOOT1 коммутировать. Как подключать к ST-LINK - в прилогаемой доке.
|
|
|
|
|
Aug 14 2014, 09:28
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
Aug 15 2014, 03:58
|
Местный
  
Группа: Участник
Сообщений: 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 помимо библиотеки куча примеров работы с периферией. Ну и самое главное работать головой, разжевывать Вам тут никто не будет.
|
|
|
|
|
Aug 15 2014, 08:37
|
Профессионал
    
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Aug 15 2014, 08:57
|
Участник

Группа: Участник
Сообщений: 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 помимо библиотеки куча примеров работы с периферией. Ну и самое главное работать головой, разжевывать Вам тут никто не будет. Насчет совета, спасибо большое. А насчет кита, я уже таки сделал. Заказал, жду пока приедет. Буду тестировать и надеяться что припаял я свой МК правильно  Цитата(SSerge @ Aug 15 2014, 11:37)  Да. Но если собираетесь прошивать через USART1, то BOOT1 лучше подтянуть резистором к земле. Тогда при низком уровне на BOOT0 будет стартовать программа из флеши, а при высоком - встроенный бутлоадер. А тогда такой вопрос. Если я буду прошивать через SWD, надо чтобы выходы BOOT0, BOOT1 были подключены по правилу прошивки через USART?
|
|
|
|
|
Aug 15 2014, 12:52
|
Частый гость
 
Группа: Участник
Сообщений: 138
Регистрация: 27-12-11
Пользователь №: 69 107

|
Цитата(ArtTheft @ Aug 15 2014, 11:57)  А тогда такой вопрос. Если я буду прошивать через SWD, надо чтобы выходы BOOT0, BOOT1 были подключены по правилу прошивки через USART? Нет, как и с JTAG.
|
|
|
|
|
Aug 15 2014, 15:48
|
Профессионал
    
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Aug 15 2014, 21:51
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 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 */ }
|
|
|
|
|
Aug 17 2014, 05:51
|
Частый гость
 
Группа: Участник
Сообщений: 138
Регистрация: 27-12-11
Пользователь №: 69 107

|
Может помочь конфигуратор STM32CubeMX. Коды выдает ИМХО приемлимые, и, главное, не пропустите "мелочь" типа подать тактирование на включаемый пин/порт/таймер....
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|