dosikus, рекомендую вам прочитать правила форума В частности эти пунктыСпойлер
Цитата:
2. Форум - место для приятного и полезного общения. Поэтому вежливость и уважительное отношение к собеседнику является совершенно необходимым требованием для посещения нашего форума. Даже в том случае, если заданный вопрос кажется вам неверотяно тупым, вспомните себя начинающего - скорее всего, ваши вопросы были еще тупее. Каждый посетитель нашего Форума - гость, которому мы всегда рады, однако помните, что и у гостей есть некоторые обязанности.
2.3 Недопустимо появление в сообщениях оскорблений в адрес посетителей форума, а также любой пропаганды противоправных действий. Ненормативная лексика допускается в очень ограниченных объемах.
И 2-й и 8-й таймеры имеют как внешний вход тактирования, так и канальные входы Input Capture (захвата). Однако 9-й и 12-й не тактируются снаружи, но имеют входы захвата. Есть basic-таймеры, у которых нет ни внешнего тактирования, ни модулей захвата/ШИМ. Смотрите референсный мануал на семейство и там все описания на все имеющиеся на борту таймеры имеются. Однако, в маловыводных корпусах SSOP20/LQFP32 могут отсутствовать ряд входов имеющихся по референсному мануалу. Но это связано именно с недостатком пинов.
Скажите, нужно ли еще что-то делать для прошивки STM32F030 (в LQFP32) по UART через ноги PA9, PA10? Я сажаю BOOT на +3,3В, пытаюсь приконнектится Flash Loader'ом, но он выдает ошибки - МК не отвечает, неопознанный МК и т. п. Естественно, попробовал разные режимы с эхо и без. Из особенностей - ком-порт у меня "воздушный" через bluetooth-модуль HC-06, но до этого связь МК через модуль с компом проверялась и работала. Бит четносности в настройках модуля установил.
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Мне не совсем понятно, что будет если у одного таймера задействую несколько счетных каналов, регистр CNT то один. Разобрался. 1 контакт TIM2_CH1_ETR(хоть и называется CH1 - он для всего таймера TIM2)
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Невозможно задействовать одновременно несколько каналов, кроме как "исключающее ИЛИ" на 1, 2 и 3. Но и тогда выходной сигнал с логической функции будет только один. Вы выбираете переключателями тот источник счета, который Вам нужен.
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
Добавлено: Пн фев 06, 2017 11:40:18
Сверлит текстолит когтями
Карма: 5
Рейтинг сообщений: 19
Зарегистрирован: Вт фев 01, 2011 17:56:40 Сообщений: 1270 Откуда: г. Жуковка, Брянская обл.
Рейтинг сообщения:0
Здравствуйте. После STM32F103 разбираюсь с SPI STM32F030, он немного другой. Запустил, все пишет, читает, но в 16-битном режиме посылает байты в обратном порядке! Т.е. если я пишу в DR 0xF800, он шлет сначала 0x00 а потом 0xF8! Почему? Вот инициализация:
UPDATE. Разобрался сам, экспериментально Оказывется, есть несколько моментов. Если установлен 8-bit режим, то записывать в DR надо именно 8 бит, т.е. после компиляции должна получится команда strb, иначе модуль spi передаст эти 16 бит как два байта в обратной последовательности, т.е. сначала те 8 бит, а потом нули. Но этот режим не 16-и битный. Чтобы переключиться на 16 битный надо установить DS биты согласно 16 битам и, если будет выполняться прием данных, то и бит FRXTH в 0.
UPDATE2. Код выше работает, я просто не учел другие места в программе, где используется 16-битный режим.
На время отложил ПИКи и 51-е в сторону, чтобы понюхать, что народ нашел в этих зверюшках по имени STM32. Заказал дешевенькую платку на "народном" 103-м чипе и ST-Link, а пока они в пути, начал понемногу осваивать документы, попутно пописывая тестовый базовый проект в Keil+CMSIS. Естественно возникают вопросы по ходу чтения. Например такой: для чего нужен bit-banding GPIO при наличии BSRR и BRR (с ODR все понятно)?
Или такой: для чего нужен стартап файл? Вернее ясно, что в нем прописаны всякие хэндлеры и прочее, но почему все это прописано не в хедерах? Почему старт программы начинается не с main{}, а в этом файле со строк
System init закомментировал я сам, т.к. все это прописываю вручную сам. Можно ли этот Reset_Handler прописать в основном исходнике, а если да, то что можно сделать с остальным?
P.S. Прописал его в исходник, удалил стартап. Проект скомпилировался, но выдал предупреждение: ".\Objects\Test.axf: Warning: L6320W: Ignoring --first command. Cannot find argument '__Vectors'." Выходит, без стартапа никак?
Добавлено after 9 minutes 49 seconds: Вернул стартап, но вышеуказанные строки заменил на
Код:
IMPORT Reset_Handler [WEAK]
В исходнике при этом
Код:
void Reset_Handler (void) { main(); }
Компиляцию проходит чисто, симуляция шагает правильно. Будем считать, что иначе никак.
Пока остался вопрос с бит-бандингом.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
В стартапе не только переход на майн и таблица прерываний, там и настройка стека и кучи и др. Битбэндинг есть не везде, а там где он есть, он распространяется не только на порты, а и на ОЗУ, и на другую периферию, где нет регистров BSRR и BR.
Я в курсе про области, на которые распространяется бит-бандинг. Я спрашивал о том, есть ли смысл использовать его именно для портов при наличии "битовых" регистров BSRR и BRR. Т.е. есть ли какой-то выигрыш в длине кода или он в обоих случаях одинаковый?
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
Добавлено: Чт фев 09, 2017 08:08:31
Сверлит текстолит когтями
Карма: 5
Рейтинг сообщений: 19
Зарегистрирован: Вт фев 01, 2011 17:56:40 Сообщений: 1270 Откуда: г. Жуковка, Брянская обл.
Рейтинг сообщения:0
Вроде разобрался с SPI на STM32F030, но с чтением возникло непонятное поведение: на шине смотрю анализатором - всегда идут с дисплея ili9341 по MISO: 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00. В функции чтения записываю и читаю по 1 байту (все в режиме 8 бит), всего 4 вызова функции - и получаю каждый раз разное: то все 0xFF, то FF,FC,00,00, не пойму с этим RXFIFO, как он работает?
Код функции: Спойлер
Код:
u8 spi_rw_byte( u8 byte ) { u8 r_byte;
SPI1->CR2 &= ~SPI_CR2_DS_3; // 8 bit while ( !( SPI1->SR & SPI_SR_TXE ) ); *(u8*) & (SPI1->DR) = byte; while ( !( SPI1->SR & SPI_SR_RXNE ) ); r_byte = *(u8*) & SPI1->DR; while ( SPI1->SR & SPI_SR_BSY );
UPDATE. И тут удалось разобраться. Получается вот что. При чтении из DR выдается не то, что, как думается, пришло одновременно с передачей, а самое старое значение в буфере. Поэтому, чтобы прочитать правильное значение, нужно перед транзакцией запись-чтение очистить буфер приёма. В мануале говорится только о выключении-включении spi модуля, но, очевидно, путь долгий это. Можно пойти иначе - очищать буфер чтением из него ненужных принятых значений (такая функция есть в HAL - HAL_SPIEx_FlushRxFifo), пока он не станет пустой, на что указывают биты FRLVL регистра статуса SR. Таким образом: Спойлер
подскажите что делать! не могу вернуться из подпрограммы сразу попадаю в HardFault. стек не переполняется но адрес возврата каким то образом затирается
Завис на прерываниях. Я привык (избалован наверное) к тому, что у каждой периферии/модуля есть свой бит разрешения прерывания, флаг срабатывания, бит, включающий глобальное прерывание, иногда приоритеты бывают. И выставив или обнулив конкретный бит в конкретном регистре, всем этим хозяйством можно управлять напрямую. Тут же у меня возникло впечатление, что прерывание (точнее конкретно NVIC) конфигурируют через системные функции типа NVIC_EnableIRQ(xyz) и прочее в том же духе. А напрямую никак? Для чего тогда кучка ИСЕРов, ИСПРов и иже с ними без указания какой бит за что отвечает? Для чего, скажем, нужна NVIC_EnableIRQ(SysTick_IRQn), если есть SysTick->CTRL |= SysTick_CTRL_TICKINT ?
Я не пользуюсь "слепыми" конфигураторами, мне нужно видеть логическую цепочку, где-что-как разрешается и от чего зависит, пусть даже это занимает больше времени. Вот в системе прерывания АРМов я пока не могу уловить эту цепочку. Читаю RM и PM на Cortex-M3.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Для чего, скажем, нужна NVIC_EnableIRQ(SysTick_IRQn), если есть SysTick->CTRL |= SysTick_CTRL_TICKINT ?
Задумка в том, что если прерывание не разрешено в NVIC, то в момент, когда это прерывание случается, не будет вызываться обработчик, хотя все остальные действия (взведение флагов, пробуждение и т.п.) выполняться будут.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения