Jump to content
ART_ME

STM32 для чайника

Recommended Posts

а китайский свисток за 2 бакса чем вас всех не устроил?


Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Share this post


Link to post
Share on other sites

Китайский 2 бакса, а этот бесплатно :)


Сергей.

Share this post


Link to post
Share on other sites
Posted (edited)

Неожиданно забузил J-link, перешитый из китайского ST-Link.

Выглядит это как показано на скрине ниже, но только после запуска программы и не сразу, а через несколько секунд.

После чего bluepill превращается в кирпич и ни на что более не реагирует.

После его реанимации с помощью ST-Link (т.е. неперепрошитого под J-link) загрузка в bluepill осуществляется, но опять только до первого же старта программы.

С ST-Link отладчик запускается и работает без замечаний.

С настройками J-link поигрался, а также заново его перепрошил.

Куда копать дальше?

Снимок.JPG

Edited by ART_ME

Никогда не спорьте с дураками. Они опустят Вас до своего уровня и победят за счет опыта.

 

 

Share this post


Link to post
Share on other sites

Вебинар «Каждому ключу — свой драйвер» (13.08.2020)

Компания КОМПЭЛ приглашает вас принять участие в вебинаре, который будет посвящен теме драйверов управления транзисторами компании Infineon. Мы рассмотрим четыре различных технологии изготовления микросхем драйверов, в чём их отличия и особенности.

Подробнее

Posted (edited)

Попробовал на другом bluepill - тот же результат. :( 

Загрузка программы, как и очистка памяти, с J-Link успешно осуществляется. Проблема только с отладчиком. 

log ниже.

cspycomm.rar

Edited by ART_ME

Никогда не спорьте с дураками. Они опустят Вас до своего уровня и победят за счет опыта.

 

 

Share this post


Link to post
Share on other sites

Меньше не бывает: неизолированные микро-DC/DC нового поколения R4 от Mornsun

Компания Mornsun разработала серию R4 неизолированных импульсных стабилизаторов напряжения в новом миниатюрном конструктивном исполнении. Уменьшение коснулось не только размеров, на 80% меньше существующих преобразователей, но и стоимости.

Подробнее

08.07.2020 в 16:26, elki сказал:

информацией по настройке?

В интернете есть несколько гайдов на эту тему, можете попробовать. Я настраивал себе по mac и там в принципе оказалось все не сложно. Если вам по win то я вообще ничем помочь не смогу.

Единственное что недавно всплыло, что не компилится исходник под l0 серию типа l011d3, но пока руки так и не дошли написать об этом разработчикам. Так что если вы пишите под L0 с малым количеством памяти на хале то скорее всего возникнут проблемы (хотя может и нет)

Share this post


Link to post
Share on other sites

Сетевой источник питания с расширенным диапазоном входных напряжений на основе VIPER26xK

Питание стационарных устройств чаще осуществляется напряжением 220 В, получаемым от одной фазы трехфазной промышленной сети. Однако существует ряд приложений, которым необходима энергия из всех трех фаз, в т.ч. и в аварийных режимах. Решение этой задачи обычно требует введение в модули питания дополнительных узлов, увеличивающих как их размеры, так и стоимость. Упростить схемы источников питания от трехфазной сети переменного тока либо от других высоковольтных источников, позволяет использование преобразователей с расширенным диапазоном входного напряжения.

Подробнее

Posted (edited)
5 часов назад, ART_ME сказал:

Попробовал на другом bluepill - тот же результат. :( 

Поставил KEIL - не работает J-Link!

Нашел исходник старой программы, запустил - на ней J-Link работает. :shok:

Выходит, разница только в содержимом программы?

Никак не пойму, как пользовательская программа может влиять на работу отладчика, когда основная разница в библиотеках, а именно - неработающая создана в Cube. :wall:

Edited by ART_ME

Никогда не спорьте с дураками. Они опустят Вас до своего уровня и победят за счет опыта.

 

 

Share this post


Link to post
Share on other sites

Проблема решена, спасибо всем откликнувшимся . :)


Никогда не спорьте с дураками. Они опустят Вас до своего уровня и победят за счет опыта.

 

 

Share this post


Link to post
Share on other sites

Ну конечно же настройка Cube! :D

Ну а почему отладчик St-Link работал при запрещенной отладке - хз. 

 

Снимок.JPG


Никогда не спорьте с дураками. Они опустят Вас до своего уровня и победят за счет опыта.

 

 

Share this post


Link to post
Share on other sites

Исходные данные проц: STM32L053R8
работаю с HAL
мне надо ногу PA9 сначала подергать вручную, а потом чтоб она была уартом.
я решил делать так:
конфигурирую как ногу на выход:
 

  /*Configure GPIO pins : PA9 */

    GPIO_InitStruct.Pin = GPIO_PIN_9;
      GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
      GPIO_InitStruct.Pull = GPIO_NOPULL;
      GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
      HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

дергаю ногой:
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9,GPIO_PIN_RESET);
HAL_Delay (582);// это будет 582 задержка
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9,GPIO_PIN_SET);
HAL_Delay (158);// это будет 158 задержка
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9,GPIO_PIN_RESET);
HAL_Delay (24); // это будет 24 задержка очень чувствительно. ставлю 25 перестает работать.
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9,GPIO_PIN_SET);
HAL_Delay (24);// это будет 24 задержка

конфигурирую как уарт:
// ниже конфигурирую пин PA9 опять как уарт
    GPIO_InitStruct.Pin = GPIO_PIN_9;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF4_USART1;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

отправляю:
HAL_UART_Transmit(&huart1, &start_posilka_abs, 1, 30);  //отправляю 1 байт
принимаю:
HAL_UART_Receive_IT(&huart1, (uint8_t*)buffers_first, 1);//запускает прием по уарту как токо придут все байты будут приняты сработает прерывание каллбэк

вообщем вроде все работает кроме одного, перестает работать прием ) перестают работать прерывания на прием.

Share this post


Link to post
Share on other sites

и еще вопрос, почему не работает этот код.
у меня стоит драйвер, который параллелит при отправке RX и TX ну вроде как эхо называется.
поэтому пишу вот так:
HAL_UART_Abort_IT (&huart1);//запрет прерываний по приему.
HAL_UART_Transmit(&huart1, &start_posilka_abs, 1, 30); //отправляю 1 байт
HAL_UART_Receive_IT(&huart1, (uint8_t*)buffers_first, 1);//запускает прием по уарту как токо придут все байты будут приняты сработает прерывание каллбэк

каждый цикл срабатывает каллбэк на прием. но я же вроде как запретил прием.

Share this post


Link to post
Share on other sites
39 minutes ago, Zombie47 said:

запретил прием

Функция HAL_UART_Receive_IT() обратно разрешает прерывания по приёму.

Share this post


Link to post
Share on other sites
Только что, Yurkin2015 сказал:

Функция HAL_UART_Receive_IT() обратно разрешает прерывания по приёму.

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

Share this post


Link to post
Share on other sites
14 minutes ago, Zombie47 said:

ниче не должно

Честно говоря, Вас трудно понять: то какой-то драйвер параллелит эхо, то в каком-то цикле срабатывает коллбэк, то почему-то не должно в приёме дублироваться ...

Одно могу добавить, функция HAL_UART_Receive_IT() не очищает флаги прерывания, а только разрешает их. Поэтому если когда-то UART принял байт, то установится RXNE флаг, что байт принят без всяких прерываний. И этот флаг будет ждать своего часа. Потом вы стартуете эту самую HAL_UART_Receive_IT(), обнаруживаете принятый байт и забираете его.

Share this post


Link to post
Share on other sites
Только что, Yurkin2015 сказал:

Честно говоря, Вас трудно понять: то какой-то драйвер параллелит эхо, то в каком-то цикле срабатывает коллбэк, то почему-то не должно в приёме дублироваться ...

Одно могу добавить, функция HAL_UART_Receive_IT() не очищает флаги прерывания, а только разрешает их. Поэтому если когда-то UART принял байт, то установится RXNE флаг, что байт принят без всяких прерываний. И этот флаг будет ждать своего часа. Потом вы стартуете эту самую HAL_UART_Receive_IT(), обнаруживаете принятый байт и забираете его.

Спасибо теперь понятнее стало почему так работает. Вообщем вопрос в следующем, как запретить поднимать эти флаги прерывания на прием пока я отправляю?

Share this post


Link to post
Share on other sites
3 minutes ago, Zombie47 said:

как запретить

Запретить невозможно, флаг поднимается в железе. Надо RXNE сбрасывать перед стартом приёма пакета, что-нибудь, типа, очистить висящие флаги прерывания 

USART_ClearITPendingBit(USART1, USART_IT_RXNE);

Ну, или сделать приёмник UART RX disabled, тогда приёмные байты будут игнорироваться, и флаги не поднимутся.

Share this post


Link to post
Share on other sites
10 часов назад, Yurkin2015 сказал:

Запретить невозможно, флаг поднимается в железе. Надо RXNE сбрасывать перед стартом приёма пакета, что-нибудь, типа, очистить висящие флаги прерывания 

USART_ClearITPendingBit(USART1, USART_IT_RXNE);

Ну, или сделать приёмник UART RX disabled, тогда приёмные байты будут игнорироваться, и флаги не поднимутся.

Значит так флаг поднялся. Сработало прерывание, и обработчик прерываний? вызвался каллбэк?
А как переконфигурировать сначала в ногу на выход а потом в ногу уарта? я переконфигурирую и у меня впринципе прием перестает работать

Share this post


Link to post
Share on other sites
11 часов назад, Yurkin2015 сказал:

USART_ClearITPendingBit(USART1, USART_IT_RXNE);

такого нет впринципе.

Share this post


Link to post
Share on other sites

Подскажите, что означает "время выборки" в характеристике АЦП. На что оно влияет. В STM32F4xx время выборки может составлять от 3 до 480 тактов.

Share this post


Link to post
Share on other sites

ну сам подумай, на что оно может влиять, если АЦП один, а УВХ емкостного типа


Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Share this post


Link to post
Share on other sites
12 часов назад, Скептик сказал:

Подскажите, что означает "время выборки" в характеристике АЦП.

Время выборки - это время в течении которого ключ УВХ соединяет конденсаторный блок АЦП со входным пином. За это время конденсатор УВХ должен успеть зарядиться от источника сигнала с требуемой погрешностью. Ток заряда ограничен внутренним сопротивлением цепей МК от пина (включая ключ УВХ) до конденсатора и внутренним сопротивлением источника сигнала.

Share this post


Link to post
Share on other sites
14.07.2020 в 01:38, Yurkin2015 сказал:

Запретить невозможно, флаг поднимается в железе. Надо RXNE сбрасывать перед стартом приёма пакета, что-нибудь, типа, очистить висящие флаги прерывания 

USART_ClearITPendingBit(USART1, USART_IT_RXNE);

Ну, или сделать приёмник UART RX disabled, тогда приёмные байты будут игнорироваться, и флаги не поднимутся.

где взять эту функцию? USART_ClearITPendingBit
где взять это USART_IT_RXNE у меня этого просто нету.
я понимаю что второе это регистр, но он где то должен быть определен. а у меня нигде не определен и как это сделать я не пойму.

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...