Easyelectronics.ru

Электроника для всех
Текущее время: 23 сен 2019, 23:29

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 2777 ]  На страницу Пред.  1 ... 106, 107, 108, 109, 110, 111, 112  След.
Автор Сообщение
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 19 авг 2019, 18:13 
Заглядывает иногда

Зарегистрирован: 26 апр 2019, 00:22
Сообщения: 33
Pingvin писал(а):
vt340 писал(а):
Атарасий, вот здесь вот
Атарасий писал(а):
И аппаратно всегда проще и правильнее.

надо было вместо всегда написать иногда и вопросов бы не было )

+100

Нахрен ДМА если надо парсить ручной ввод с консоли?
Я аж поржал) Вы правда думаете что задача уровня школьной лабораторной покрывает "почти весь" объем применения UART?)) Ну право, нечего тут больше обсуждать. Для реализации нормальных протоколов обмена в STM32 есть DMA, который работает и на передачу и на прием, и это круто, а все остальные мелочи можно делать как угодно - капля в море.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 19 авг 2019, 18:48 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5656
vt340 писал(а):
Атарасий, вот здесь вот
Атарасий писал(а):
И аппаратно всегда проще и правильнее.

надо было вместо всегда написать иногда и вопросов бы не было )



Иногда - это именно то что вы с пингвином описываете- ручной парсинг, у меня вотЪ наоборот ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 19 авг 2019, 19:22 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 1432
Да я вообще-то об ошибках, хотя в каком-то смысле тоже парсинг )
Кстати драйверы hal останавливают приём по dma при ошибке
Вопрос - зачем они так делают?
Только не надо про индусский код, st-шные программисты как минимум не глупее нас )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 19 авг 2019, 21:51 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2348
У меня совмещенно - и ручной ввод, и передача блоками.
https://www.youtube.com/watch?v=9rmvgWteSMY

И со сматфона могу прошивать. ;-)

https://www.youtube.com/watch?v=elsnUWTDxTA&t=19s


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 19 авг 2019, 23:08 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5656
"-А еще я вышивать умею" (с) ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 29 авг 2019, 01:30 
Заглядывает иногда

Зарегистрирован: 10 июн 2017, 14:46
Сообщения: 92
Спрошу тут, потому как чувствую косяк детский....

В общем спаял плату под stm32f103rc, но не учел, что на PA15 висит JTAG JTDI подтянутый к питанию. Третий день не могу отключить JTDI и превратить PA15 в обычный GPOIO.
Вроде все по даташиту, а не работает. Вот код с использованием HAL LL


Код:
static GPIO_TypeDef * const      ENABLE_PIN_PORT      = GPIOA;
static const uint32_t         ENABLE_PIN_NUM      = LL_GPIO_PIN_15;
...
   LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA);

   LL_GPIO_AF_Remap_SWJ_NOJTAG();

   LL_GPIO_SetPinMode(ENABLE_PIN_PORT, ENABLE_PIN_NUM, LL_GPIO_MODE_OUTPUT);
   LL_GPIO_SetPinOutputType(ENABLE_PIN_PORT, ENABLE_PIN_NUM, LL_GPIO_OUTPUT_PUSHPULL);
   LL_GPIO_SetPinSpeed(ENABLE_PIN_PORT, ENABLE_PIN_NUM, LL_GPIO_SPEED_FREQ_LOW);
   LL_GPIO_ResetOutputPin(ENABLE_PIN_PORT, ENABLE_PIN_NUM);


Тот же самый код, но для другого пина (скажем 12 - он точно не задействован под JTAG) все работает правильно, режим пина как и должен ставится в push-pull. Но с PA15 не получается.

Смотрел в реализацию LL_GPIO_AF_Remap_SWJ_NOJTAG() - она честно ставит биты SWJ _CFG в 010 - все как по даташиту. Пробовал даже вообще SWD отключать (битами 100) путем вызова LL_GPIO_AF_DisableRemap_SWJ() - все равно пин не переходит в режим GPIO. Кстати, отладка не отваливается, хотя должна.

Пробовал использовать аналогичные функции из полноценного HAL - результат такой же

ЧЯДНТ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 29 авг 2019, 01:39 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1009
Включи RCC_APB2ENR_AFIOEN.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 29 авг 2019, 10:37 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 3940
Откуда: КЧР, поселок Нижний Архыз
++ за AFIOEN


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 29 авг 2019, 11:30 
Заглядывает иногда

Зарегистрирован: 10 июн 2017, 14:46
Сообщения: 92
О, спасибище! Так же ж much better'ее


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 29 авг 2019, 12:34 
Заглядывает иногда

Зарегистрирован: 28 сен 2018, 00:25
Сообщения: 159
Что-то совсем запутался в дма и таймерах. Есть stm32f7 и экран на ili9341 который подключен через fsmc на который выводится картинка с камеры. Чтобы разгрузить процессор от бестолковой передачи картинки хочется провернуть это через dma, но на полной скорости (mem2mem без инкремента приемника) экран не успевает все принять. Собственно вопрос. Можно-ли провернуть это с таймером? Т.е. чтобы таймер пинал дма и дма уже по пинку таймера отправлял один пиксел (два байта - RGB565, если это важно), инкрементировал адрес источника, по следующему пинку тоже один пиксел и т.д.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 01 сен 2019, 11:45 
Заглядывает иногда

Зарегистрирован: 16 дек 2013, 16:38
Сообщения: 114
Добрый день! подскажите, что я делаю не так.
Задача - выходить по таймеру на прерывание каждые 0,5с
МК STM32F407VET6, частота клока 168МГц
По итогу запуска симуляции в железе - таймер тикает с большой частотой, в прерывание вылетает каждые 2,2мкс

Код:
#include "stm32f407xx.h"

#define LED1_ON   GPIOA->BSRR=GPIO_BSRR_BS_6
#define LED1_OFF   GPIOA->BSRR=GPIO_BSRR_BR_6

   
void TIM5_IRQHandler(void)
   {
    TIM5->SR &= ~TIM_SR_UIF;     //сбросить флаг
   
   }


int main (void)
{
   
RCC->AHB1ENR|=RCC_AHB1ENR_GPIOAEN;
GPIOA->MODER &= ~GPIO_MODER_MODER6 ;
GPIOA->MODER |= GPIO_MODER_MODER6_0 ;
   
RCC->APB1ENR |= RCC_APB1ENR_TIM5EN;
TIM5->PSC   = 42000-1;
TIM5->ARR   = 500;
TIM5->DIER   = TIM_DIER_UIE;
TIM5->CR1   = TIM_CR1_CEN | TIM_CR1_ARPE;
  NVIC_EnableIRQ (TIM5_IRQn);
  __enable_irq();
   
   
   
    while(1)
    {
    }
   
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 01 сен 2019, 13:19 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 943
Сделай вот так
Код:
void TIM5_IRQHandler(void)
{
  TIM5->SR &= ~TIM_SR_UIF;     //сбросить флаг
  TIM5->SR;
}


Если другие прерывания таймера не планируешь использовать, то можно просто
Код:
void TIM5_IRQHandler(void)
{
  TIM5->SR = 0;
  TIM5->SR;
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 01 сен 2019, 14:24 
Заглядывает иногда

Зарегистрирован: 16 дек 2013, 16:38
Сообщения: 114
VladislavS писал(а):
Сделай вот так
Код:
void TIM5_IRQHandler(void)
{
  TIM5->SR &= ~TIM_SR_UIF;     //сбросить флаг
  TIM5->SR;
}


Сделал, но теперь в прерывание выходит в произвольное время - от 1,2 до 4,5 сек случайным образом


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 01 сен 2019, 14:42 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 943
engineer83 писал(а):
По итогу запуска симуляции в железе
Можно поинтересоваться что это за зверь, симуляция в железе? И каким образом частоту прерываний проверяешь?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 01 сен 2019, 14:49 
Заглядывает иногда

Зарегистрирован: 16 дек 2013, 16:38
Сообщения: 114
VladislavS писал(а):
engineer83 писал(а):
По итогу запуска симуляции в железе
Можно поинтересоваться что это за зверь, симуляция в железе? И каким образом частоту прерываний проверяешь?

Keil, ставлю точку останова на процедуре прерывания и запускаю отладку. Каждый раз время останова меняется


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 01 сен 2019, 15:01 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 943
Дёргай ногой в прерывании и смотри да хоть светодиодом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 01 сен 2019, 16:10 
Заглядывает иногда

Зарегистрирован: 26 апр 2019, 00:22
Сообщения: 33
engineer83 писал(а):
МК STM32F407VET6, частота клока 168МГц
А на какие частоты настроены шина APB1 и соответствующие ей таймеры? Именно от частоты таймеров APB1 должны рассчитываться делитель и регистр перезагрузки, а не от 168МГц.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 01 сен 2019, 16:21 
Заглядывает иногда

Зарегистрирован: 16 дек 2013, 16:38
Сообщения: 114
Атарасий писал(а):
А на какие частоты настроены шина APB1 и соответствующие ей таймеры? Именно от частоты таймеров APB1 должны рассчитываться делитель и регистр перезагрузки, а не от 168МГц.

частота APB1=42МГц
какие бы не были делитель и регистр, должна же быть хоть какая-то периодичность процессов. А здесь хаос.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 01 сен 2019, 16:55 
Заглядывает иногда

Зарегистрирован: 05 дек 2017, 18:17
Сообщения: 160
engineer83 писал(а):
Атарасий писал(а):
А на какие частоты настроены шина APB1 и соответствующие ей таймеры? Именно от частоты таймеров APB1 должны рассчитываться делитель и регистр перезагрузки, а не от 168МГц.

частота APB1=42МГц
какие бы не были делитель и регистр, должна же быть хоть какая-то периодичность процессов. А здесь хаос.


На таймер идет частота шины умноженная на 2. Т.е. если APB1 у вас 42Мгц, то на таймер идет 84.

Если вы хотите таймер на 0.5 секунды:
За секунду у вас таймер "щелкает" 84 000 000 раз.
Выбираем делитель PSC. Допустим "тормознём" его до 1000 раз в секунду. Делитель получается 84 000. Но PSC 16-битный, больше 65535 в него не влезет. Поэтому можно взять делитель допустим 42 000 и наш таймер будет "щелкать" 2000 раз в секунду.
Код:
TIM5->PSC = 42000 - 1;

У вас собственно так и получилось.
Теперь мы хотим, чтобы он срабатывал 1 раз в пол секунды. За секунду он щелкает 2000 раз, так что в ARR пишем 1000.
Код:
TIM5->ARR   = 1000 -1;

При этом, если вам нужна большая точность в периоде срабатывания, то можно уменьшать PSC и увеличивать ARR. Т.е. скажем можно PSC взять 2100, а ARR 20000.

Для теста выставьте какое-нибудь значение побольше, допустим раз в пару секунд и добавьте в прерывание дерганье ногой или какой-нибудь вывод в uart или еще что-то. Хоть счетчик DWT->CNT выводите.
Еще вроде были какие-то чудеса с первым срабатыванием таймера сразу после включения, но что-то не могу вспомнить с чем было связано. Он первый раз срабатывал сразу после включения, а дальше уже через заданный промежуток.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 01 сен 2019, 17:11 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 943
Sergey_spb писал(а):
Еще вроде были какие-то чудеса с первым срабатыванием таймера сразу после включения, но что-то не могу вспомнить с чем было связано.
Цитата:
PSC contains the value to be loaded in the active prescaler register at each update event
(including when the counter is cleared through UG bit of TIMx_EGR register or through
trigger controller when configured in “reset mode”).
Поэтому правильней включать таймер так
Код:
  TIM5->PSC = 42000-1;
  TIM5->ARR = 500;
  TIM5->EGR = TIM_EGR_UG;
  TIM5->SR =0;
  TIM5->CR1 = TIM_CR1_CEN

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


Последний раз редактировалось VladislavS 01 сен 2019, 17:12, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 01 сен 2019, 17:11 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1009
Sergey_spb писал(а):
Еще вроде были какие-то чудеса с первым срабатыванием таймера сразу после включения, но что-то не могу вспомнить с чем было связано. Он первый раз срабатывал сразу после включения, а дальше уже через заданный промежуток.

Нужно вручную Update генерить, тогда загрузятся актуальные значения из буферизированных регистров. Если этого не делать, то первый раз в PSC скорее всего будет 0 и переполнение наступит очень быстро, если делать, то дополнительно нужно очищать флаги, иначе сразу попадем в прерывание, плюс на многих сериях не работает код типа такого:
Код:
TIMx->EGR = TIM_EGR_UG;
TIMx->SR = 0;

Тут или минимум один NOP нужно вставить посередине, или добавлять проверку флага, иначе сброс не проходит. На разогнанном до 240MHz F4 нужно 3 NOP при минимальных делителях на шине.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 01 сен 2019, 17:19 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 943
Reflector писал(а):
плюс на многих сериях не работает код типа такого:
Код:
TIMx->EGR = TIM_EGR_UG;
TIMx->SR = 0;

Прикольно, не сталкивался. Но я не гоню чипы.

ЗЫ: Не сталкивался, но поиск подобных конструкций по проектам запустил. Так, на всякий случай. Думаю вот такая конструкция не будет проблемы иметь.
Код:
  TIM5->PSC = 42000-1; 
  TIM5->EGR = TIM_EGR_UG;
  TIM5->ARR = 500;
  TIM5->SR = 0;
  TIM5->CR1 = TIM_CR1_CEN


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 01 сен 2019, 17:41 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1009
VladislavS писал(а):
Прикольно, не сталкивался. Но я не гоню чипы.

Сталкиваются практически все, просто не замечают :) Гнать не обязательно, даже на F0 при 24MHz тоже без NOP работать не будет.

У ST в коде встречается временами такое:
Код:
/* Enable UEV by setting UG bit to Load buffer data into preload registers*/
TIM1->EGR |= TIM_EGR_UG;
/* wait until the RESET of UG bit*/
while((TIM1->EGR & TIM_EGR_UG) == SET){}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 01 сен 2019, 17:51 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 943
Reflector писал(а):
Гнать не обязательно, даже на F0 при 24MHz тоже без NOP работать не будет.
Дело не в скорости, а в разности частот шин и устройств. На маленькой частоте будет потактово всё то же самое, но в слоумоушен :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 01 сен 2019, 18:04 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1009
VladislavS писал(а):
Дело не в скорости, а в разности частот шин и устройств. На маленькой частоте будет потактово всё то же самое, но в слоумоушен :)

Как минимум есть еще латентность флеша которая растет с увеличением частоты и может влиять на время выполнения команд.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2777 ]  На страницу Пред.  1 ... 106, 107, 108, 109, 110, 111, 112  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: VladislavS


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB