Перейти к содержанию
    

SysTick timer и использует. Из ядра. И его описание, соответственно, в описании ядра. Кстати, и вектор SysTick_Handler находится среди векторов ядра (всяких xxxAbort_Handler и т.п.).
.

 

Спасибо. Главное для меня, что это отдельный от всех остальных таймер и если включено SysTick, то другие таймеры можно использовать. В доках на ядро F0 о таймере SysTick написано крайне мало. Даже Гугль ничего не находит :)

 

А вектор ( приоритет SysTick ) попробую переставить пониже в файле startup_stm32f051.s Вдруг подействует?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В доках на ядро F0 о таймере SysTick написано крайне мало. Даже Гугль ничего не находит :)

PM0215, "STM32F0xxx Cortex-M0 programming manual", раздел 4.4, 4 страницы с картинками.

Гугль. Результатов: примерно 18 600. Попробуйте сменить интернет.

 

А вектор ( приоритет SysTick ) попробую переставить пониже в файле startup_stm32f051.s Вдруг подействует?
В файле вы можете перставлять что угодно, а в кристалле вектора прибиты к своим адресам гвоздями. Про приоритеты написано в том же описании в разделе 2.2, этот раздел аж из 6 страниц.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

PM0215, "STM32F0xxx Cortex-M0 programming manual", раздел 4.4, 4 страницы с картинками.

 

Эту доку читал, но интересовался не описанием регистров, а связью SysTick c другими таймерами, о чем в

в Programming manual не написали. Можно сравнить адреса регистров, но надо обратить специальное внимание, что я уже сделал.

 

Теперь добавил в программу инициализацию TIM6 и установку прерывания по этому таймеру. ИАР выдает ошибку

Error while running Linker :

 

Error[Li005]: no definition for "NVIC_Init" [referenced from C:\ARM\2_PROJ\1Prb32F0\EWARMv5\Release\Obj\01PrbDsc.o]

 

Что ему не нравится?

 

*
//#########################     
// /* TIM6 is used to  */
//
  NVIC_InitTypeDef            NVIC_InitStructure;
  TIM_TimeBaseInitTypeDef     TIM_TimeBaseStructure;
//
/* TIMER clock enable */
//
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6 , ENABLE);

/* Enable the TIMER global Interrupt */

  NVIC_InitStructure.NVIC_IRQChannel = TIM6_DAC_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//
  NVIC_Init(&NVIC_InitStructure);
//
  TIM_TimeBaseStructure.TIM_Period = 5000;
  TIM_TimeBaseStructure.TIM_Prescaler = 32;
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
//
  TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);
//
/* TIM IT enable */
  TIM_ITConfig(TIM6, TIM_IT_Update , ENABLE);
//
/* TIM enable counter */
//
   TIM_Cmd(TIM6, ENABLE);    
//-------

Изменено пользователем =L.A.=

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Error while running Linker :

 

Error[Li005]: no definition for "NVIC_Init" [referenced from C:\ARM\2_PROJ\1Prb32F0\EWARMv5\Release\Obj\01PrbDsc.o]

 

Нашел. Оказалось, что функция void NVIC_Init(....) спрятана в файле

stm32f0xx_misc.c

 

В файле вы можете перставлять что угодно, а в кристалле вектора прибиты к своим адресам гвоздями. Про приоритеты написано в том же описании в разделе 2.2, этот раздел аж из 6 страниц.
.

 

Насчет "прибитых гвоздями" векторов. Прочитал доку. Вижу таблицу с непонятными словами "settable". Что бы это значило? :) Гугля спросить или интернет поменять?

 

Intr_evnt2.jpg

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что бы это значило?

Что приоритет можно установить, что же еще? Позиция вектора от этого не изменится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос по определению USB подключения на STM32F0:

 

Обязательно ли нужно в STM32F0 (STM32F070) для работы с USB задействовать какой-то вывод МК кроме DP,DM для определения факта подключения (наличия VBUS) и начала инициализации USB соединения? Отдельный вывод под контроль VBUS очень не хочется, ножек не хватает.

 

Для DFU программатора ему это не нужно: только DP и DM, внешний pull-up резистор на DP не нужен- есть свой управляемый внутри МК.

A как для обычной работы, делать периодическое сканирование? USB планирую использовать просто как консоль, то есть пауза от подключения до детектирования может быть хоть 10 секунд, это не проблема. Но жалко много ресурсов МК тратить на сканирование интерфейса, который обычно выключен.

Много ли вычислительных ресурсов периодическое сканирование на предмет наличия USB подключения занимает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

STM32F0xxx

 

Приоритет SysTick устанавливается программно. Тактовая частота - как в примерах: HSE (HSI) на 8 МГц, умножитель на 6, то есть имеем 48 МГц тактирование ядра.

 

//**************************************************************************//
//  Установка периода SysTick  5 мс  
//==========================================================================//
    SysTick_Config(SystemCoreClock/200);
//
    NVIC_SetPriority(SysTick_IRQn, 2);  // IRQ Priority = 2

//
//
.....................
//
//**************************************************************************//
//  IRQ  SysTickTimer  с периодом 5 мс
//==========================================================================//
void SysTick_Handler(void)
{
//
....trtrtrtrtrtrtrtrtrtrtr....
//
}

Изменено пользователем =L.A.=

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приоритет SysTick устанавливается программно.
Да. Это влияет на адрес вектора? Или вы о чем-то другом хотели сказать?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос по определению USB подключения на STM32F0:

Обязательно ли нужно в STM32F0 (STM32F070) для работы с USB задействовать какой-то вывод МК кроме DP,DM для определения факта подключения (наличия VBUS) и начала инициализации USB соединения? Отдельный вывод под контроль VBUS очень не хочется, ножек не хватает.

 

Про F0 ничего не скажу, не работал.

А вот в USB OTG более "толстых" камней есть чудная грабля - VBUS им обязателен. При низком уровне на этой ноге соединение само собой гасится, при появлении высокого - восстанавливается.

Я столкнулся с этим на F105, на ногу VBUS удобно лёг передатчик UART'а. Пока по UART'у ничего не передавалось, всё работало. Зато сразу после написания драйвера на этот UART начались произвольные пропадания данных в USB. Ремап ножек там очень убогий, пришлось много резать, к сожалению.

 

Собственно, предложений два:

- проверить (демо-плата есть?), что низкий уровень на отключенной ремапом ножке не приводит к фатальным последствиям

- инициализировать один раз, и потом просто сидеть и ждать прерывания от хоста. Правда, это не очень красиво, если устройство супер-малопотребляющее.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...