Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 23.01.2011, 16:59  
gromovi
Заблокирован
 
Регистрация: 12.09.2009
Сообщений: 420
Сказал спасибо: 148
Сказали Спасибо 166 раз(а) в 118 сообщении(ях)
gromovi на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

помогите с первыми шагами. имеется стм32 дискавери и keil.
хочется поморгать светиком. открыл проект стартовый. там куча всяких #ifdef. разобраться в этом сложно. возможно ли запустить минуя все заготовки? (стартапы, системы) как эти все заготовки связаны? можно в один си файл запихнуть? чтоб самому все это прописать?
stm32f10x.h это описание регистров, не трогаем. цепляем к проекту и юзаем.
startup_stm32f10x_ld_vl.s это что?
system_stm32f10x.c настройка МК?
нашел http://eugenemcu.ru/publ/13-1-0-71 может кому пригодится.
сделал робкую попытку по созданию проекта While(1);
результат на фото. как быть? что упустил?
Миниатюры:
Нажмите на изображение для увеличения
Название: Безымянный.gif
Просмотров: 363
Размер:	127.1 Кб
ID:	17248  
Реклама:

Последний раз редактировалось gromovi; 23.01.2011 в 17:16.
gromovi вне форума  
Сказали "Спасибо" gromovi
RY723 (23.01.2011)
Непрочитано 23.01.2011, 17:59  
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,777
Сказал спасибо: 124
Сказали Спасибо 599 раз(а) в 416 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от gromovi Посмотреть сообщение
что упустил?
system_stm32f10x.c
Сам долго искал и мучился. В нем есть функция начальной инициализации. Этого требует "startup_stm32f10x_md_vl.s" в процедуре "Reset_Handler PROC". Пробовал инициализацию делать в "STM32_Init.c", очень удобно, но в "STM32_Init.c" изменял название функции "stm32_Init" на "SystemInit". Удобно и легко, но мало периферии можно инициализировать.
andries5 вне форума  
Сказали "Спасибо" andries5
gromovi (23.01.2011)
Непрочитано 23.01.2011, 18:16  
gromovi
Заблокирован
 
Регистрация: 12.09.2009
Сообщений: 420
Сказал спасибо: 148
Сказали Спасибо 166 раз(а) в 118 сообщении(ях)
gromovi на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от andries5 Посмотреть сообщение
system_stm32f10x.c
Сам долго искал и мучился. В нем есть функция начальной инициализации. Этого требует "startup_stm32f10x_md_vl.s" в процедуре "Reset_Handler PROC". Пробовал инициализацию делать в "STM32_Init.c", очень удобно, но в "STM32_Init.c" изменял название функции "stm32_Init" на "SystemInit". Удобно и легко, но мало периферии можно инициализировать.
допер и сам конечно. пользуя чужие коды светики зажег.
но понять что там делается в этой инициализации трудно.
вообще первое впечатление - кривизна во всем.
GPIOC-›BSRR=GPIO_BSRR_BS8|GPIO_BSRR_BS9; этим зажигаем два светика
GPIOC-›BSRR=GPIO_BSRR_BR8|GPIO_BSRR_BS9; этим один зажигаем другой тушим.
НЕ ИНФОРМАТИВНО! куча писанины, нельзя ли как то более человекопонятно сделать? типо
порт на выход(регистр = чему то там)
двухтактный выход вкл.(регистр = чему то там)
порт.bit=1????
писец не вкурить на какой частоте работает мк после инициализации.
Код:
void SystemInit (void)
{
  /* Reset the RCC clock configuration to the default reset state(for debug purpose) */
  /* Set HSION bit */
  RCC-›CR |= (uint32_t)0x00000001;

  /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
#ifndef STM32F10X_CL
  RCC-›CFGR &= (uint32_t)0xF8FF0000;
#else
  RCC-›CFGR &= (uint32_t)0xF0FF0000;
#endif /* STM32F10X_CL */   
  
  /* Reset HSEON, CSSON and PLLON bits */
  RCC-›CR &= (uint32_t)0xFEF6FFFF;

  /* Reset HSEBYP bit */
  RCC-›CR &= (uint32_t)0xFFFBFFFF;

  /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */
  RCC-›CFGR &= (uint32_t)0xFF80FFFF;

#ifdef STM32F10X_CL
  /* Reset PLL2ON and PLL3ON bits */
  RCC-›CR &= (uint32_t)0xEBFFFFFF;

  /* Disable all interrupts and clear pending bits  */
  RCC-›CIR = 0x00FF0000;

  /* Reset CFGR2 register */
  RCC-›CFGR2 = 0x00000000;
#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) 
  /* Disable all interrupts and clear pending bits  */
  RCC-›CIR = 0x009F0000;

  /* Reset CFGR2 register */
  RCC-›CFGR2 = 0x00000000;      
#else
  /* Disable all interrupts and clear pending bits  */
  RCC-›CIR = 0x009F0000;
#endif /* STM32F10X_CL */
    
#if defined (STM32F10X_HD) || (defined STM32F10X_XL)
  #ifdef DATA_IN_ExtSRAM
    SystemInit_ExtMemCtl(); 
  #endif /* DATA_IN_ExtSRAM */
#endif 

  /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */
  /* Configure the Flash Latency cycles and enable prefetch buffer */
  SetSysClock();
}

/**
  * @brief  Update SystemCoreClock according to Clock Register Values
  * @note   None
  * @param  None
  * @retval None
  */
void SystemCoreClockUpdate (void)
{
  uint32_t tmp = 0, pllmull = 0, pllsource = 0;

#ifdef  STM32F10X_CL
  uint32_t prediv1source = 0, prediv1factor = 0, prediv2factor = 0, pll2mull = 0;
#endif /* STM32F10X_CL */

#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL)
  uint32_t prediv1factor = 0;
#endif /* STM32F10X_LD_VL or STM32F10X_MD_VL */
    
  /* Get SYSCLK source -------------------------------------------------------*/
  tmp = RCC-›CFGR & RCC_CFGR_SWS;
  
  switch (tmp)
  {
    case 0x00:  /* HSI used as system clock */
      SystemCoreClock = HSI_Value;
      break;
    case 0x04:  /* HSE used as system clock */
      SystemCoreClock = HSE_Value;
      break;
    case 0x08:  /* PLL used as system clock */

      /* Get PLL clock source and multiplication factor ----------------------*/
      pllmull = RCC-›CFGR & RCC_CFGR_PLLMULL;
      pllsource = RCC-›CFGR & RCC_CFGR_PLLSRC;
      
#ifndef STM32F10X_CL      
      pllmull = ( pllmull ›› 18) + 2;
      
      if (pllsource == 0x00)
      {
        /* HSI oscillator clock divided by 2 selected as PLL clock entry */
        SystemCoreClock = (HSI_Value ›› 1) * pllmull;
      }
      else
      {
 #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL)
       prediv1factor = (RCC-›CFGR2 & RCC_CFGR2_PREDIV1) + 1;
       /* HSE oscillator clock selected as PREDIV1 clock entry */
       SystemCoreClock = (HSE_Value / prediv1factor) * pllmull; 
 #else
        /* HSE selected as PLL clock entry */
        if ((RCC-›CFGR & RCC_CFGR_PLLXTPRE) != (uint32_t)RESET)
        {/* HSE oscillator clock divided by 2 */
          SystemCoreClock = (HSE_Value ›› 1) * pllmull;
        }
        else
        {
          SystemCoreClock = HSE_Value * pllmull;
        }
 #endif
      }
#else
      pllmull = pllmull ›› 18;
      
      if (pllmull != 0x0D)
      {
         pllmull += 2;
      }
      else
      { /* PLL multiplication factor = PLL input clock * 6.5 */
        pllmull = 13 / 2; 
      }
            
      if (pllsource == 0x00)
      {
        /* HSI oscillator clock divided by 2 selected as PLL clock entry */
        SystemCoreClock = (HSI_Value ›› 1) * pllmull;
      }
      else
      {/* PREDIV1 selected as PLL clock entry */
        
        /* Get PREDIV1 clock source and division factor */
        prediv1source = RCC-›CFGR2 & RCC_CFGR2_PREDIV1SRC;
        prediv1factor = (RCC-›CFGR2 & RCC_CFGR2_PREDIV1) + 1;
        
        if (prediv1source == 0)
        { 
          /* HSE oscillator clock selected as PREDIV1 clock entry */
          SystemCoreClock = (HSE_Value / prediv1factor) * pllmull;          
        }
        else
        {/* PLL2 clock selected as PREDIV1 clock entry */
          
          /* Get PREDIV2 division factor and PLL2 multiplication factor */
          prediv2factor = ((RCC-›CFGR2 & RCC_CFGR2_PREDIV2) ›› 4) + 1;
          pll2mull = ((RCC-›CFGR2 & RCC_CFGR2_PLL2MUL) ›› 8 ) + 2; 
          SystemCoreClock = (((HSE_Value / prediv2factor) * pll2mull) / prediv1factor) * pllmull;                         
        }
      }
#endif /* STM32F10X_CL */ 
      break;

    default:
      SystemCoreClock = HSI_Value;
      break;
  }
  
  /* Compute HCLK clock frequency ----------------*/
  /* Get HCLK prescaler */
  tmp = AHBPrescTable[((RCC-›CFGR & RCC_CFGR_HPRE) ›› 4)];
  /* HCLK clock frequency */
  SystemCoreClock ››= tmp;  
}

/**
  * @brief  Configures the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers.
  * @param  None
  * @retval None
  */
static void SetSysClock(void)
{
#ifdef SYSCLK_FREQ_HSE
  SetSysClockToHSE();
#elif defined SYSCLK_FREQ_24MHz
  SetSysClockTo24();
#elif defined SYSCLK_FREQ_36MHz
  SetSysClockTo36();
#elif defined SYSCLK_FREQ_48MHz
  SetSysClockTo48();
#elif defined SYSCLK_FREQ_56MHz
  SetSysClockTo56();  
#elif defined SYSCLK_FREQ_72MHz
  SetSysClockTo72();
#endif
 
 /* If none of the define above is enabled, the HSI is used as System clock
    source (default after reset) */ 
}

Последний раз редактировалось gromovi; 23.01.2011 в 18:41.
gromovi вне форума  
Непрочитано 23.01.2011, 18:16  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

andries5, По шагам распиши как с STM32_Init.c начать проект.
И где слить свежую .
Если не трудно.
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 23.01.2011, 19:35  
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,777
Сказал спасибо: 124
Сказали Спасибо 599 раз(а) в 416 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

gromovi, сам не очень плаваю, но что понял расскажу.
В инициализации идет сброс и последующая установка. В "system_stm32f10x.c" указано

#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
/* #define SYSCLK_FREQ_HSE HSE_VALUE */
#define SYSCLK_FREQ_24MHz 24000000
#else
/* #define SYSCLK_FREQ_HSE HSE_VALUE */
/* #define SYSCLK_FREQ_24MHz 24000000 */
/* #define SYSCLK_FREQ_36MHz 36000000 */
/* #define SYSCLK_FREQ_48MHz 48000000 */
/* #define SYSCLK_FREQ_56MHz 56000000 */
#define SYSCLK_FREQ_72MHz 72000000
#endif

т.е. установить 24MHz. Можно передефайнить на HSE то есть на 8MHz. Для более гибкого изменения надо применить свои процедуры для RCC. Но изменять множитель можно только при отключенном PLL. PLL это множитель системной частоты.
andries5 вне форума  
Сказали "Спасибо" andries5
gromovi (23.01.2011)
Непрочитано 23.01.2011, 19:57  
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,777
Сказал спасибо: 124
Сказали Спасибо 599 раз(а) в 416 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

dosikus, Создаю папку проекта например "Test", в нее копирую
STM32_Init.c
STM32_Init.h
STM32_Reg.h
далее в кейле создаю проект в данной папке. В ней же создаю "main.c"

#include "stm32f10x.h"
#include "STM32_Init.h"

#define Led_blue_off GPIOC-›BRR =GPIO_BRR_BR8
#define Led_blue_on GPIOC-›BSRR =GPIO_BSRR_BS8
#define Led_green_off GPIOC-›BRR =GPIO_BRR_BR9
#define Led_green_on GPIOC-›BSRR =GPIO_BSRR_BS9
#define Button_User GPIOA-›IDR & GPIO_IDR_IDR0

int main(void)
{

Led_green_on;
Led_blue_on;

while (1)
{

}
}

в "STM32_Init.c" в строке 5529 меняю имя функции "stm32_Init" на "SystemInit".
Когда открыт "STM32_Init.c" на вкладке его внизу есть "Configuration Wizard".
Нажимаю на ней и в данном мастере удобно настроить порты, частоту, таймеры (правда только четыре), RTC, wdg, USART. Компилирую и радуюсь как дитя. Для симуляции меняю имя процессора на stm32f103RB и тогда в симуляторе в периферии смотрю состояние и частоты и портов и чего угодно.
Но все-же видимо буду ломать голову над "STM32F10x_StdPeriph_Driver". Уже что-то вырисовывается.
andries5 вне форума  
Эти 3 пользователя(ей) сказали Спасибо andries5 за это сообщение:
a-fisher (15.02.2011), dosikus (23.01.2011)
Непрочитано 23.01.2011, 20:05  
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,777
Сказал спасибо: 124
Сказали Спасибо 599 раз(а) в 416 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от gromovi Посмотреть сообщение
GPIOC-›BSRR=GPIO_BSRR_BS8|GPIO_BSRR_BS9; этим зажигаем два светика
GPIOC-›BSRR=GPIO_BSRR_BR8|GPIO_BSRR_BS9; этим один зажигаем другой тушим.
НЕ ИНФОРМАТИВНО! куча писанины, нельзя ли как то более человекопонятно сделать? типо
порт на выход(регистр = чему то там)
Здесь сказано следующее:

GPIOC-›BSRR=GPIO_BSRR_BS8|GPIO_BSRR_BS9;
В порт GPIOC т.е. в регистр портаС записать "установить единицу на 8, и ноль на 9 выходе порта"

GPIOC-›BSRR=GPIO_BSRR_BR8|GPIO_BSRR_BS9;
В порт GPIOC т.е. в регистр портаС записать "установить ноль на 8, и единицу на 9 выходе порта"


Сообщение от gromovi Посмотреть сообщение
писец не вкурить на какой частоте работает мк после инициализации.
уже писал выше "Для симуляции меняю имя процессора на stm32f103RB и тогда в симуляторе в периферии смотрю состояние и частоты и портов и чего угодно."
andries5 вне форума  
Эти 3 пользователя(ей) сказали Спасибо andries5 за это сообщение:
dosikus (23.01.2011), General_Dead (27.02.2011)
Непрочитано 23.01.2011, 20:36  
gromovi
Заблокирован
 
Регистрация: 12.09.2009
Сообщений: 420
Сказал спасибо: 148
Сказали Спасибо 166 раз(а) в 118 сообщении(ях)
gromovi на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от andries5 Посмотреть сообщение
GPIOC-›BSRR=GPIO_BSRR_BS8|GPIO_BSRR_BS9;
В порт GPIOC т.е. в регистр портаС записать "установить единицу на 8, и ноль на 9 выходе порта"
8=1 && 9=1 || нет?
gromovi вне форума  
Непрочитано 23.01.2011, 20:49  
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,777
Сказал спасибо: 124
Сказали Спасибо 599 раз(а) в 416 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от gromovi Посмотреть сообщение
GPIO_BSRR_BS8
Это битовая маска. То есть BS8 это восьмой бит регистра BSRR группы GPIO.
BS9 это девятый бит BSRR.
BR8 это двадцать четвертый бит того-же регистра. Просто BSRR 32-разрядный регистр поделен на две части, с 0 по 15 биты устанавливают бит в порту, а с 16 по 31 сего-же и сбрасывают. "Reference manual.pdf RM0041" страница 113. Все просто.
andries5 вне форума  
Непрочитано 23.01.2011, 20:52  
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,777
Сказал спасибо: 124
Сказали Спасибо 599 раз(а) в 416 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от gromovi Посмотреть сообщение
8=1 && 9=1 || нет?
В данном случае да, установить 1 и на 8 и на 9. Порта С.
andries5 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Школа АRMрестлинга Uragan90 Микроконтроллеры, АЦП, память и т.д 54 22.08.2011 16:13
ARM Cortex M3 + Linux SiMiLya Микроконтроллеры, АЦП, память и т.д 10 17.06.2011 17:20
Помогите с STM32 - очень нужно... yakuzaa Микроконтроллеры, АЦП, память и т.д 60 04.08.2010 11:04
Как добавить поддержку для STM32 SFHK Микроконтроллеры, АЦП, память и т.д 11 18.12.2009 18:09


Часовой пояс GMT +4, время: 07:02.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot