Страница 378 из 446
Re: STM32 новичку в ARM что к чему
Добавлено: Пн мар 21, 2022 22:55:29
uldemir
Ага. Примерно так?
потом в высокоуровневом делаю
и получаю вызов в
о, и код уже раскрашен....
Re: STM32 новичку в ARM что к чему
Добавлено: Пн мар 21, 2022 23:43:16
COKPOWEHEU
А кто это прерывание вызовет?
Что значит "кто"? У вас же прерывание по таймеру каждые 2.5 мс, вот таймер и вызовет. Просто пока данных нет,прерывание запрещено, и обработчик вызываться не будет.
Re: STM32 новичку в ARM что к чему
Добавлено: Вт мар 22, 2022 07:54:50
uldemir
Кхе,там у меня нет прерываний. Два канала сравнения таймера объединённые по ИЛИ (c использованием Peripheral Reflex System) пинают АЦП который снимает два набора данных с фотосенсоров без подсветки и с подсветкой. А третий канал данных включает и выключает эту подсветку. Всё самостоятельно, без прерываний. Ну и АЦП делает запросы ПДП чтобы скинуть результат. И вот только тут есть прерывание по окончании трансфера.
А, я могу добавить прерывание по переполнению таймера. Мне это в голову не пришло, так как переполнение происходит между этими двумя измерениями. А, если как вы говорите разрешать и запрещать, тогда, действительно, ямогу его отложить. Ок, пусть будет это ПланБ, если с PendSV у меня что-то не понравится.
Re: STM32 новичку в ARM что к чему
Добавлено: Вт мар 22, 2022 09:47:39
COKPOWEHEU
возникла мысль, а не вызывать ли её по прерыванию. Причем приоритет задать самый низкий, чтобы не мешать другим прерываниямх.
Кхе,там у меня нет прерываний.
Так есть прерывания или нет?
В любом случае можно и просто рандомный флаг прерывания выставлять вручную. Ну не знаю, I2C неиспользуемого например.
С другой стороны, если у вас опрос относительно медленный, может проще опрашивать в основном цикле флаг DMA или какой-нибудь программный.
Re: STM32 новичку в ARM что к чему
Добавлено: Чт апр 07, 2022 21:35:37
uldemir
Продолжение глупого вопроса не по stm32, а по вообще ARM. А как называется функция, которая обслуживает PendSV прерывание?
В EFM32GG12 я назвал её PendSV_Handler и всё прекрасно работает.
Код: Выделить всё
void PendSVInit(void) {
NVIC_SetPriority(PendSV_IRQn, PendSV_IRQ_priority);
}
void PendSV_Handler(void) {
profiler();
}
Но теперь пытаюсь это перенести на Cypress PSoC cy8c5268 и вместо этой функции я вылетаю в IntDefaultHandler:
Спойлер
Код: Выделить всё
/*******************************************************************************
* Function Name: IntDefaultHandler
****************************************************************************//**
*
* This function is called for all interrupts, other than a reset that gets
* called before the system is setup.
*
* Theory:
* Any value other than zero is acceptable.
*
*******************************************************************************/
CY_ISR(IntDefaultHandler)
{
/***************************************************************************
* We must not get here. If we do, a serious problem occurs, so go into
* an infinite loop.
***************************************************************************/
Может кто знает как сделать, чтобы оно тут работало?
Re: STM32 новичку в ARM что к чему
Добавлено: Чт апр 07, 2022 21:50:37
VladislavS
Открываем startup-файл, ищем там таблицу векторов прерываний и смотрим/прописываем там нужный.
Re: STM32 новичку в ARM что к чему
Добавлено: Пт апр 08, 2022 16:52:50
uldemir
В стартап лезть грязными ручками? я - боюсь. или что-то поломаю, или при пересборке железной части PSoC Creator вернет всё на место.
Вообще то, ожидал ответа типа, что установка приоритета сделана не правильно. Несмотря на то что NVIC_SetPriority из СиликонЛабовского SDK обрабатывает PendSV_IRQn (который -2), Инфинеоновский с таким работать не умеет (надо будет еще Code Compose Studio глянуть, как там эта функция устроена). И если у всех нормальных SDK, что у SL, ST, TI все векторы прерываний назначены уже на WEAK функции и линкер сам сделает всё что надо, то кипарис/инфинеон - нет. Хотяяяяя... это, наверное, тоже связано с хардварной частью кристалла. Ведь, модуль могут назвать как угодно.
Re: STM32 новичку в ARM что к чему
Добавлено: Сб май 07, 2022 23:32:25
koeltrad
Почему например для регистра MODER значение 00 означает Input и в то же время reset state?
00: Input (reset state)
Вход это ведь не то же самое что и сброшенное состояние когда входное сопротивление должно быть большим.
Re: STM32 новичку в ARM что к чему
Добавлено: Вс май 08, 2022 04:17:43
КРАМ
Тоже самое. Состояний пина может быть только два. Это когда драйвер выхода подключен и когда он отключен. Первое из них - низкоомный импеданс, а второе - высокоомный. Отключать вход от пина нет никакого смысла. Немного сложнее ситуация с аналоговой функцией пина, если она имеется, но непринципиально. Смысл остается тем же.
Re: STM32 новичку в ARM что к чему
Добавлено: Вс май 08, 2022 06:36:43
НовыйДень
Reset state - это указание, что это состояние битов в регистре будет по умолчанию после сброса микроконтролера. Посмотрите упоминание про Reset values регистра MODER.
То есть, после сброса микроконтроллера в регистре MODER будут нули и вывод будет находиться в состоянии Input. Режим цифрового входа - это и есть высокоомное состояние, но с включенным триггером шмитта. Поэтому в некоторых сериях (L-серия) после сброса пины находятся в состоянии Analog Input с отключенными триггерами, уменьшая ток потребления.
По схеме, аналоговый вход подключен всегда. А цифровой вход - через триггер шмитта. Этим триггером как раз и управляет регистр MODER с комбинациями [00] и [11]. И для уменьшения тока потребления, особенно в режимах низкого потребления рекомендуется переводить неиспользуемые входы в режим Analog Input, отключая входные триггеры. На практике довольно хорошо заметно по току потребления.

Re: STM32 новичку в ARM что к чему
Добавлено: Пн май 09, 2022 20:11:16
koeltrad
Обязательно ли явно задавать состояние регистра, если в сброшенном состоянии, состояние регистра уже такое как мне надо?
Например регистр OTYPER в сброшенном состоянии имеет 00, то же самое Pull Push
Всё работает даже если явно не задавать GPIOD->OTYPER=0;
Наверное просто для уверенности и для порядка надо это писать?
Re: STM32 новичку в ARM что к чему
Добавлено: Пн май 09, 2022 20:13:31
VladislavS
Не надо.
Re: STM32 новичку в ARM что к чему
Добавлено: Пн май 09, 2022 23:15:07
koeltrad
Где(по какому адресу) находятся регистры общего назначения в STM32F407?
На блок диаграмме не нахожу эти регистры.
Или это регистры процессора arm. И я что то не то написал?
https://developer.arm.com/documentation ... er-summary
Ок, это регистры arm процессора. Из которых r0-r12 являются регистрами общего назначения.
Остальные предназначены для хранения определённых данных.
Какой программой можно посмотреть содержимое этих регистров?
С помощью Keil можно, но почти все регистры не заполнены там почему то.
STM32CubeProgrammer, но не всегда показывает
STM32 ST-LINK Utility
Re: STM32 новичку в ARM что к чему
Добавлено: Вт май 10, 2022 08:07:33
КРАМ
[uquote="koeltrad",url="/forum/viewtopic.php?p=4229351#p4229351"]Или это регистры процессора arm.[/uquote]
Да, это РОНы ядра ARM.
[uquote="koeltrad",url="/forum/viewtopic.php?p=4229351#p4229351"]Какой программой можно посмотреть содержимое этих регистров?
С помощью Keil можно, но почти все регистры не заполнены там почему то.[/uquote]
Вы что то не то смотрите. Правда под рукой нет железа, поэтому приведу скрин в симуляторе Кейла:

Re: STM32 новичку в ARM что к чему
Добавлено: Вт май 10, 2022 08:32:14
НовыйДень
Запустите отладку микроконтроллера и посмотрите вот тут:
Они, в принципе, вам не нужны. Доступ к ним - через ассемблерные инструкции типа
add r0, r0, r1 и об этом заботится компилятор языка Сию Поэтому не парьтесь. Хотя, для общего понимания - через эти регистры ядро микроконтроллера выполняет все арифметико-логические действия. Загружает из SRAM числа, выполняет с ними чего-то и записывает обратно в SRAM или в регистры периферии.
Re: STM32 новичку в ARM что к чему
Добавлено: Вт май 10, 2022 08:39:17
koeltrad
У меня скрин был при запуске программы.
Надо было шагать по программе чтоб значения изменялись. Step
Re: STM32 новичку в ARM что к чему
Добавлено: Вт май 10, 2022 08:43:16
КРАМ
[uquote="koeltrad",url="/forum/viewtopic.php?p=4229431#p4229431"]У меня скрин был при запуске[/uquote]
А с какого перепуга РОНы при запуске будут что то кроме нулей содержать?
Можно шагами, а можно брейкпойнт поставить где-нибудь и до него стартануть.
И что у вас за странный код? Вы знаете что такое CMSIS? Зачем вы пользуетесь абсолютными адресами вместо имен регистров?
Re: STM32 новичку в ARM что к чему
Добавлено: Вт май 10, 2022 08:55:02
НовыйДень
Да не, запустите CubeIDE, создайте проект с микроконтроллером F407, скомпилируйте и запустите в режиме отладки (кнопка F11). Рабочая область переключится в режим отладки (Debug) и сбоку должна появиться вкладка Registers, поищите её среди прочих вкладок. Если что, то ее можно найти в меню Window->Show View->Registers.
Содержимое регистров r0 - r12 после сброса в общем случае неизвестно:
Регистры заполненными оказываются еще и потому, что до входа в main, и вообще, до первой сишной строчки выполняется весьма много действий, скрытых от нелюбопытного глаза пользователя. Если найти ассемблерный файл startup_stm... и в нем поставить брекпоинт на строчке Reset_Handler:, то можно попасть как раз в самое-самое начало работы.
Re: STM32 новичку в ARM что к чему
Добавлено: Вт май 10, 2022 09:17:20
КРАМ
[uquote="НовыйДень",url="/forum/viewtopic.php?p=4229437#p4229437"]Да не[/uquote]
Да да...
Несложно понять, что у ТС нет железа и он смотрит в симуляторе. Именно поэтому наблюдает не рандомные значения РОНов, а нулевые. Симулятор, в отличии от железа, ИМЕЕТ начальные значения РОНов равными нулю.
В приведенных им скринах я комментировал скрин Кейла, где нет стрелки-указателя PC в листинге Си. Это какгбэ намекаэ нам на то, что в настройках стартом выбран не main, а старт-ап асм-код.
Re: STM32 новичку в ARM что к чему
Добавлено: Вт май 10, 2022 15:33:30
koeltrad
КРАМ писал(а):А с какого перепуга РОНы при запуске будут что то кроме нулей содержать?
НовыйДень писал(а):
Регистры заполненными оказываются еще и потому, что до входа в main, и вообще, до первой сишной строчки выполняется весьма много действий, скрытых от нелюбопытного глаза пользователя.
У меня максимально маленький код, поэтому наверное нули в регистрах при старте.
Код: Выделить всё
#include "main.h"
int main(void)
{
//RCC
*((uint32_t*)(0x40023830))|=1<<3;
//ospeedr
*((uint32_t*)(0x40020C08))=0;
//moder
*((uint32_t*)(0x40020C00))|=1<<24;
GPIOD->ODR|=1<<12;
while (1)
{
}
}
КРАМ писал(а):
И что у вас за странный код? Вы знаете что такое CMSIS? Зачем вы пользуетесь абсолютными адресами вместо имен регистров?
Я пытаюсь понять что за командами CMSIS происходит.
КРАМ писал(а):
Несложно понять, что у ТС нет железа и он смотрит в симуляторе. Именно поэтому наблюдает не рандомные значения РОНов, а нулевые.
Недавно купил STM32F407 Discovery, уже есть железо.
Подержанную за 20 уе.
Раньше столько новые стоили кажется.