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

 
 
> STM32F103, Альтернатива библиотеки производителя
KSN
сообщение May 6 2009, 09:58
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 404
Регистрация: 3-12-04
Из: Новосибирск
Пользователь №: 1 304



Достаточно много проектов сделано на ATmele(AVR,ARM) и как-то привык к startup, low_level_init и стилю, как там все организовано и описывается. Решил попробовать STM32. Поглядел примерчики под IAR. Все как-то необычно. Хотел бы услышать мнения и отзывы людей. которые используют STM32+IAR: используете ли функции/макросы (настройка таблицы векторов, настройка переферии и т.п.), которые есть примерах для IAR? Адаптируете их под себя(как удобней, как привыкли)? Создаете свои функции/макросы или где-то есть альтернатива?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KSN
сообщение May 28 2009, 08:03
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 404
Регистрация: 3-12-04
Из: Новосибирск
Пользователь №: 1 304



подкиньте примерчик написания функции прерывания для STM32. Что-то я не нашел *.h файла в папке IAR, где-бы определялись адреса векторов прерываний.
Go to the top of the page
 
+Quote Post
KRS
сообщение May 28 2009, 09:00
Сообщение #3


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(KSN @ May 28 2009, 12:03) *
подкиньте примерчик написания функции прерывания для STM32. Что-то я не нашел *.h файла в папке IAR, где-бы определялись адреса векторов прерываний.

Для кортекса обработчик - обычная С функция. Надо только указатель на нее в векторе прерывания разместиь
Go to the top of the page
 
+Quote Post
miksher
сообщение Jun 10 2009, 10:56
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 64
Регистрация: 27-02-08
Из: Россия, Алтайский край, г.Баранул, Павловский тракт 283
Пользователь №: 35 418



Цитата(KRS @ May 28 2009, 16:00) *
Для кортекса обработчик - обычная С функция. Надо только указатель на нее в векторе прерывания разместиь

Здравствуйте.
Посмотрите пожалуйста для Таймера 1 будет работать прерывание по вектору TIM1_UP_IRQHandler.
Код
#pragma language=extended
#pragma segment="CSTACK"

void __iar_program_start( void );

#pragma location = ".intvec"
/* STM32F10x Vector Table entries */
const intvec_elem __vector_table[] =
{
  { .__ptr = __sfe( "CSTACK" ) },         //0
  __iar_program_start,                    //1
  0,//NMIException,                       //2
  0,//HardFaultException,                 //3
  0,//MemManageException,                 //4
  0,//BusFaultException,                  //5
  0,//UsageFaultException,                //6
  0, 0, 0, 0,        /* Reserved */
  0,//SVCHandler,                         //11
  0,//DebugMonitor,                       //12
  0,                 /* Reserved */
  0,//PendSVC,                            //14
  0,//SysTickHandler,                     //15
  0,//WWDG_IRQHandler,                    //16
  0,//PVD_IRQHandler,                     //17
  0,//TAMPER_IRQHandler,                  //18
  0,//RTC_IRQHandler,                     //19
  0,//FLASH_IRQHandler,                   //20
  0,//RCC_IRQHandler,                     //21
  0,//EXTI0_IRQHandler,                   //22
  0,//EXTI1_IRQHandler,                   //23
  0,//EXTI2_IRQHandler,                   //24
  0,//EXTI3_IRQHandler,                   //25
  0,//EXTI4_IRQHandler,                   //26
  0,//DMAChannel1_IRQHandler,             //27
  0,//DMAChannel2_IRQHandler,             //28
  0,//DMAChannel3_IRQHandler,             //29
  0,//DMAChannel4_IRQHandler,             //30
  0,//DMAChannel5_IRQHandler,             //31
  0,//DMAChannel6_IRQHandler,             //32
  0,//DMAChannel7_IRQHandler,             //33
  0,//ADC_IRQHandler,                     //34
  0,//USB_HP_CAN_TX_IRQHandler,           //35
  0,//USB_LP_CAN_RX0_IRQHandler,          //36
  0,//CAN_RX1_IRQHandler,                 //37
  0,//CAN_SCE_IRQHandler,                 //38
  0,//EXTI9_5_IRQHandler,                 //39
  0,//TIM1_BRK_IRQHandler,                //40
  TIM1_UP_IRQHandler,                 //41
  0,//TIM1_TRG_COM_IRQHandler,            //42
  0,//TIM1_CC_IRQHandler,                 //43
  0,//TIM2_IRQHandler,                    //44
  0,//TIM3_IRQHandler,                    //45
  0,//TIM4_IRQHandler,                    //46
  0,//I2C1_EV_IRQHandler,                 //47
  0,//I2C1_ER_IRQHandler,                 //48
  0,//I2C2_EV_IRQHandler,                 //49
  0,//I2C2_ER_IRQHandler,                 //50
  0,//SPI1_IRQHandler,                    //51
  0,//SPI2_IRQHandler,                    //52
  0,//USART1_IRQHandler,                  //53
  0,//USART2_IRQHandler,                  //54
  0,//USART3_IRQHandler,                  //55
  0,//EXTI15_10_IRQHandler,               //56
  0,//RTCAlarm_IRQHandler,                //57
  0,//USBWakeUp_IRQHandler,               //58
};


А
Код
void __iar_program_start( void );
для чего или она тут не при чем?

Кто-нибудь может скинуть пример работы программы на STM32 с библиотекой от IAR.
Мне нужно запустить процессор, инициализировать прерывания, таймер, АЦП и UART.
С процессором вроде как разобрался, вот что получилось:
Код
void SetupClock(void)
{
  // 1. включаем внутренний генератор
  RCC_CR_bit.HSION = 1;                   // включаем внутренний генератор
  while(RCC_CR_bit.HSIRDY == 0){}         // ожидаем потверждения включения внутреннего генератора
  // 2. %%%%%%%%%%%% отключаем SYSCLK  %%%%%%%%%%%%%%%%%%%%%%%%%%
  RCC_CFGR_bit.SW = 0;                    // системный clock не выбран
  while(RCC_CFGR_bit.SWS != 3){}          // ожидаем потверждения выключения SYSCLK
  // 3. отключаем внешний генератор
  RCC_CR_bit.HSEON = 0;                   // отключаем внешний генератор
  RCC_CR_bit.HSEBYP = 0;                  // не замыкаем внешний генратор с SYSCLK
  while(RCC_CR_bit.HSERDY == 0){}         // ожидаем потверждения выключения внешнего генератора
  // 4. ******ВЫКЛЮЧАЕМ PLL********
  RCC_CR_bit.PLLON = 0;                   // выключаем PLL
  while(RCC_CR_bit.PLLRDY == 0){}         // ожидаем потверждения выключения PLL
  // 5. настаеваем SYSCLK
  RCC_CFGR_bit.PLLSRC = 0;                // HSI (внутренний генератор) выбирается как вход PLL, при этом делится на 2
  RCC_CFGR_bit.PLLXTPRE = 0;              // HSE (внешний генератор) не делится на 2 во вход в PLL
  RCC_CFGR_bit.PLLMUL = 0xA;              // установка умнажителя на 12 (8 МГц -> /2 -> 4 МГц -> *12 -> 48 МГц)
  // 6. ********ВКЛЮЧАЕМ PLL*******
  RCC_CR_bit.PLLON = 1;                   // включаем PLL
  while(RCC_CR_bit.PLLRDY == 0){}         // ожидаем потверждения включения PLL
  
  // 7. настраемаем AHB предделитель
  RCC_CFGR_bit.HPRE = 0x0;                // преддилитель AHB = 1
  // 8. настраемаем APB1 предделитель
  RCC_CFGR_bit.PPRE1 = 0x4;               // преддилитель APB1 = 2
  // 9. настраемаем APB2 предделитель
  RCC_CFGR_bit.PPRE2 = 0x0;               // преддилитель APB2 = 1
  
  RCC_CR_bit.CSSON = 0;                   // отключаем внешний детектор clock
  
  // 12. %%%%%%%%%%%%%%%%%%% включаем SYSCLK %%%%%%%%%%%%%%%%%%%%%
  RCC_CFGR_bit.SW = 2;                    // PLL как системный clock
  while(RCC_CFGR_bit.SWS != 2){}          // ожидаем потверждения включения SYSCLK


Скачал примеры, там самописные билиотеки (не привязанные к IAR), такие замудренные, разбираться замучаешься.
Может кто чем поможет?
Заранее спасибо!
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jun 10 2009, 12:23
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(miksher @ Jun 10 2009, 13:56) *
Скачал примеры, там самописные билиотеки (не привязанные к IAR), такие замудренные, разбираться замучаешься.

Какие библиотеки? От STM?
Я бы так не драматизировал, только одна ошибка - определение TRUE и FALSE конфликтует с ИАРовским.
Зато все есть, и примеры под них написаны.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
miksher
сообщение Jun 13 2009, 07:55
Сообщение #6


Участник
*

Группа: Свой
Сообщений: 64
Регистрация: 27-02-08
Из: Россия, Алтайский край, г.Баранул, Павловский тракт 283
Пользователь №: 35 418



Цитата(Dog Pawlowa @ Jun 10 2009, 19:23) *
Какие библиотеки? От STM?
Я бы так не драматизировал, только одна ошибка - определение TRUE и FALSE конфликтует с ИАРовским.
Зато все есть, и примеры под них написаны.


библиотека с программным обеспечение IAR (c:\Program Files\IAR Systems\Embedded Workbench 5.4 Evaluation\arm\inc\ST\iostm32f10xxE.h)
Хотелось бы посмотреть примеры программ с этой библиетекой
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jun 13 2009, 09:38
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(miksher @ Jun 13 2009, 10:55) *
библиотека с программным обеспечение IAR (c:\Program Files\IAR Systems\Embedded Workbench 5.4 Evaluation\arm\inc\ST\iostm32f10xxE.h)
Хотелось бы посмотреть примеры программ с этой библиетекой

А пошарьте на сайте STM - там есть и последняя версия библиотеки и примеры ее использования. ИАР всегда опаздывает.
Ссылку не дам - дома по WLL подключен sad.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 03:32
Рейтинг@Mail.ru


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