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

Не выходит из прерывания таймера

Цитата

TIM3->SR &= ~TIM_SR_UIF;

Зачем тут &? Этот бит очищается при записи 0, 1 не изменит его состояние.

Цитата

GPIOA->ODR ^= (1<<GPIO_ODR_OD8_Pos);

Ну и зачем? Не атомарно же.

А, новичок, ток щас прочитал. Но все зачеркнутое верно:wink:

Хотя тут, судя по всему, тупо стартап не от того МК взяли.

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


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

Вообще то да, был неправ, действительн если не вызывается то и не скомпелируется.

Смотрел примеры от IAR они все на HAl LL MX нет на CMSIS, не понятно ничего.

Just now, Arlleex said:

Зачем тут &? Этот бит очищается при записи 0, 1 не изменит его состояние.

Ну и зачем? Не атомарно же.

А, новичок, ток щас прочитал. Но все зачеркнутое верно:wink:

Хотя тут, судя по всему, тупо стартап не от того МК взяли.

TIM3->SR &= ~TIM_SR_UIF;

это запись нуля.

какой стартап вы о чем ?

Just now, MrBearManul said:

 

Ваш проект. Я не знаю. Ищите средствами ОС за которой работаете по имени.

По какому имени ?

Изменено пользователем whale

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


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

46 минут назад, whale сказал:

...это запись нуля

...не только в бит TIM_SR_UIF.

Цитата

...какой стартап вы о чем?

О стартап-файле, в котором в том числе таблица векторов описана.

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


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

Все победил, оказывается нужно было еще строеву куч файлов подключить и настроить, я то наивный думал что IAR ARM сам все должен подключить зря что ли ему тип мк указывал а тут даже конь не валялся.

Just now, Arlleex said:

...не только в бит TIM_SR_UIF.

 

Это почему же ?

 

TIM_SR_UIF   = 1;

~TIM_SR_UIF = FFFFFE

TIM3->SR &= TIM3->SR & FFFFFE  - сбрасываем ровно один бит 0

  

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


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

23 минуты назад, whale сказал:

Это почему же?

SR - это volatile-регистр. Флажки там устанавливаются аппаратно, а сбрасываются программно. Между операцией чтения SR и записью "обнуления" (SR = SR & ~UIF) есть вероятность изменчивости SR. Например, потому что произошло еще какое-то событие таймера. И Вы также сбросите это прерывание, как и UIF. Да, в Вашем конкретном случае с одним прерыванием, возможно, ничего плохого не произойдет. Но в общем случае, для того и помечены биты в SR как "r_wc0", т.е. очищаются они атомарной записью нуля, а не операцией read-modify-write.

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


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

Ну бит то один сбрасывается, в этом был вопрос, а то что он там еще за что то отвечает и может измениться это другой вопрос.

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


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

2 часа назад, whale сказал:

TIM3->SR &= ~TIM_SR_UIF;

Замените на

TIM3->SR = ~TIM_SR_UIF;

Запись 1 во все прочие биты регистра не изменит их значений. Зато операция сброса бита станет атомарной.

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


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

Понятно,  единица туда записываться просто не будет )

 

В догонку вопрос, не пускается генератор HSE вот такая штука вылетает с return 1,

генерации на кварце нет, кондеры по 20 пф, может такое быть из-за неподходящего кварца  ?

кварц 16мгц (на 6 мгц тоже не стартует) может что то еще прописать нужно ? 

VOS = 1 

 

 

 RCC->CR |= (1<<RCC_CR_HSEON_Pos);
                 

 
  for(StartUpCounter=0; ; StartUpCounter++)
  {
    
    if(RCC->CR & (1<<RCC_CR_HSERDY_Pos))
      break;
    
   
    if(StartUpCounter > 0xF000)
    {
      RCC->CR &= ~(1<<RCC_CR_HSEON_Pos); 
      return 1;
    }
  }

 

 

Изменено пользователем whale

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


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

Ну а если временно убрать проверку if(StartUpCounter > 0xF000)? Может, она (таймаут-задержка) тупо мала для разгона кварца.
Хотя при тактировании изначально от HSI (8МГц), времени на таймаут будет порядка нескольких десятков мс, чего должно хватать с лихвой.
Смотрите на качество монтажа, на правильность тех самых 20пФ (может, там не 20пФ запаяли, а что-то другое). А может там и не 20пФ должно быть.

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


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

Задержку убирал, смотрел генерацию на ноге out так и не появилась (

 

ps если верить поиску проблемма стара как мир, какие то геморойные эти stm32 и профита пока не видно...

Изменено пользователем whale

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


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

"Всю Одессу удовлетворяеет, а Моню нет... поглядите на этого привереду" ;-)
Выводы, на которых кварц, переключены на него или тупо GPIO?

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


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

 

11 часов назад, whale сказал:

По какому имени ?

*startup*.*

10 часов назад, whale сказал:

Все победил, оказывается нужно было еще строеву куч файлов подключить и настроить, я то наивный думал что IAR ARM

Какую тучу файлов? Укажите их, пожалуйста. Обычно достаточно подключить файлы проекта. И всё.

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


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

11 часов назад, whale сказал:

...какие то геморойные эти stm32 и профита пока не видно...

Цитата

...и фары протирал и по колесам стучал, все равно не заводится... (с)

:mosking:

7 часов назад, Obam сказал:

Выводы, на которых кварц, переключены на него или тупо GPIO?

Не надо там ничего переключать...
Эти выводы автоматом на кварц подключаются, когда HSE запускается.
Если, конечно, намеренно не переключить обратно на GPIO и пытаться включать HSE.

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


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

12 часов назад, whale сказал:

а то что он там еще за что то отвечает и может измениться это другой вопрос.

Вы невнимательно прочитали) Он больше ни за что не отвечат. Вы такой записью можете стереть другие биты и потерять статусы других прерываний. Перечитайте ещё раз внимательно сообщение уважаемого @Arlleex, я тоже наступил на такую ошибку.

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


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

3 часа назад, Arlleex сказал:

Не надо там ничего переключать...
Эти выводы автоматом на кварц подключаются, когда HSE запускается.

Кроме режима ног, обычно нужно ещё правильно установить переключатель "кварц/генератор". Не факт, что ТС это сделал - судя по всему он вообще мануал не открывал.

3 часа назад, MrBearManul сказал:

Вы невнимательно прочитали) Он больше ни за что не отвечат. Вы такой записью можете стереть другие биты и потерять статусы других прерываний.

Просто удивительно - уже какое сообщение вдалбливаете ТСу (и Вы и другие) очевидные истины из мануала на МК, а он упрямо продолжает игнорировать все советы, ещё и спорит с советчиками. Хотя сам даже не открывал мануал. Как будто нужно не ему, а советчикам. Истинно: "Чукча не читатель...." :russian_ru:

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


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

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

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

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

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

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

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

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

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

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