STM32 новичку в ARM что к чему
Re: STM32 новичку в ARM что к чему
В стартап лезть грязными ручками? я - боюсь. или что-то поломаю, или при пересборке железной части PSoC Creator вернет всё на место.
Вообще то, ожидал ответа типа, что установка приоритета сделана не правильно. Несмотря на то что NVIC_SetPriority из СиликонЛабовского SDK обрабатывает PendSV_IRQn (который -2), Инфинеоновский с таким работать не умеет (надо будет еще Code Compose Studio глянуть, как там эта функция устроена). И если у всех нормальных SDK, что у SL, ST, TI все векторы прерываний назначены уже на WEAK функции и линкер сам сделает всё что надо, то кипарис/инфинеон - нет. Хотяяяяя... это, наверное, тоже связано с хардварной частью кристалла. Ведь, модуль могут назвать как угодно.
Вообще то, ожидал ответа типа, что установка приоритета сделана не правильно. Несмотря на то что NVIC_SetPriority из СиликонЛабовского SDK обрабатывает PendSV_IRQn (который -2), Инфинеоновский с таким работать не умеет (надо будет еще Code Compose Studio глянуть, как там эта функция устроена). И если у всех нормальных SDK, что у SL, ST, TI все векторы прерываний назначены уже на WEAK функции и линкер сам сделает всё что надо, то кипарис/инфинеон - нет. Хотяяяяя... это, наверное, тоже связано с хардварной частью кристалла. Ведь, модуль могут назвать как угодно.
Re: STM32 новичку в ARM что к чему
Почему например для регистра MODER значение 00 означает Input и в то же время reset state?
00: Input (reset state)
Вход это ведь не то же самое что и сброшенное состояние когда входное сопротивление должно быть большим.
00: Input (reset state)
Вход это ведь не то же самое что и сброшенное состояние когда входное сопротивление должно быть большим.
- КРАМ
- Друг Кота
- Сообщения: 25122
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: STM32 новичку в ARM что к чему
Тоже самое. Состояний пина может быть только два. Это когда драйвер выхода подключен и когда он отключен. Первое из них - низкоомный импеданс, а второе - высокоомный. Отключать вход от пина нет никакого смысла. Немного сложнее ситуация с аналоговой функцией пина, если она имеется, но непринципиально. Смысл остается тем же.
Re: STM32 новичку в ARM что к чему
Reset state - это указание, что это состояние битов в регистре будет по умолчанию после сброса микроконтролера. Посмотрите упоминание про Reset values регистра MODER.
То есть, после сброса микроконтроллера в регистре MODER будут нули и вывод будет находиться в состоянии Input. Режим цифрового входа - это и есть высокоомное состояние, но с включенным триггером шмитта. Поэтому в некоторых сериях (L-серия) после сброса пины находятся в состоянии Analog Input с отключенными триггерами, уменьшая ток потребления.
По схеме, аналоговый вход подключен всегда. А цифровой вход - через триггер шмитта. Этим триггером как раз и управляет регистр MODER с комбинациями [00] и [11]. И для уменьшения тока потребления, особенно в режимах низкого потребления рекомендуется переводить неиспользуемые входы в режим Analog Input, отключая входные триггеры. На практике довольно хорошо заметно по току потребления.

То есть, после сброса микроконтроллера в регистре MODER будут нули и вывод будет находиться в состоянии Input. Режим цифрового входа - это и есть высокоомное состояние, но с включенным триггером шмитта. Поэтому в некоторых сериях (L-серия) после сброса пины находятся в состоянии Analog Input с отключенными триггерами, уменьшая ток потребления.
По схеме, аналоговый вход подключен всегда. А цифровой вход - через триггер шмитта. Этим триггером как раз и управляет регистр MODER с комбинациями [00] и [11]. И для уменьшения тока потребления, особенно в режимах низкого потребления рекомендуется переводить неиспользуемые входы в режим Analog Input, отключая входные триггеры. На практике довольно хорошо заметно по току потребления.
Re: STM32 новичку в ARM что к чему
Обязательно ли явно задавать состояние регистра, если в сброшенном состоянии, состояние регистра уже такое как мне надо?
Например регистр OTYPER в сброшенном состоянии имеет 00, то же самое Pull Push
Всё работает даже если явно не задавать GPIOD->OTYPER=0;
Наверное просто для уверенности и для порядка надо это писать?
Например регистр OTYPER в сброшенном состоянии имеет 00, то же самое Pull Push
Всё работает даже если явно не задавать GPIOD->OTYPER=0;
Наверное просто для уверенности и для порядка надо это писать?
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
Не надо.
Re: STM32 новичку в ARM что к чему
Где(по какому адресу) находятся регистры общего назначения в STM32F407?
На блок диаграмме не нахожу эти регистры. Или это регистры процессора arm. И я что то не то написал?
https://developer.arm.com/documentation ... er-summary
Ок, это регистры arm процессора. Из которых r0-r12 являются регистрами общего назначения.
Остальные предназначены для хранения определённых данных.
Какой программой можно посмотреть содержимое этих регистров?
С помощью Keil можно, но почти все регистры не заполнены там почему то. STM32CubeProgrammer, но не всегда показывает STM32 ST-LINK Utility
На блок диаграмме не нахожу эти регистры. Или это регистры процессора arm. И я что то не то написал?
https://developer.arm.com/documentation ... er-summary
Ок, это регистры arm процессора. Из которых r0-r12 являются регистрами общего назначения.
Остальные предназначены для хранения определённых данных.
Какой программой можно посмотреть содержимое этих регистров?
С помощью Keil можно, но почти все регистры не заполнены там почему то. STM32CubeProgrammer, но не всегда показывает STM32 ST-LINK Utility
- КРАМ
- Друг Кота
- Сообщения: 25122
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: STM32 новичку в ARM что к чему
[uquote="koeltrad",url="/forum/viewtopic.php?p=4229351#p4229351"]Или это регистры процессора arm.[/uquote]
Да, это РОНы ядра ARM.
[uquote="koeltrad",url="/forum/viewtopic.php?p=4229351#p4229351"]Какой программой можно посмотреть содержимое этих регистров?
С помощью Keil можно, но почти все регистры не заполнены там почему то.[/uquote]
Вы что то не то смотрите. Правда под рукой нет железа, поэтому приведу скрин в симуляторе Кейла:

Да, это РОНы ядра ARM.
[uquote="koeltrad",url="/forum/viewtopic.php?p=4229351#p4229351"]Какой программой можно посмотреть содержимое этих регистров?
С помощью Keil можно, но почти все регистры не заполнены там почему то.[/uquote]
Вы что то не то смотрите. Правда под рукой нет железа, поэтому приведу скрин в симуляторе Кейла:
Re: STM32 новичку в ARM что к чему
Запустите отладку микроконтроллера и посмотрите вот тут:

Они, в принципе, вам не нужны. Доступ к ним - через ассемблерные инструкции типа add r0, r0, r1 и об этом заботится компилятор языка Сию Поэтому не парьтесь. Хотя, для общего понимания - через эти регистры ядро микроконтроллера выполняет все арифметико-логические действия. Загружает из SRAM числа, выполняет с ними чего-то и записывает обратно в SRAM или в регистры периферии.
Они, в принципе, вам не нужны. Доступ к ним - через ассемблерные инструкции типа add r0, r0, r1 и об этом заботится компилятор языка Сию Поэтому не парьтесь. Хотя, для общего понимания - через эти регистры ядро микроконтроллера выполняет все арифметико-логические действия. Загружает из SRAM числа, выполняет с ними чего-то и записывает обратно в SRAM или в регистры периферии.
Re: STM32 новичку в ARM что к чему
У меня скрин был при запуске программы.
Надо было шагать по программе чтоб значения изменялись. Step
Надо было шагать по программе чтоб значения изменялись. Step
- КРАМ
- Друг Кота
- Сообщения: 25122
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: STM32 новичку в ARM что к чему
[uquote="koeltrad",url="/forum/viewtopic.php?p=4229431#p4229431"]У меня скрин был при запуске[/uquote]
А с какого перепуга РОНы при запуске будут что то кроме нулей содержать?
Можно шагами, а можно брейкпойнт поставить где-нибудь и до него стартануть.
И что у вас за странный код? Вы знаете что такое CMSIS? Зачем вы пользуетесь абсолютными адресами вместо имен регистров?
А с какого перепуга РОНы при запуске будут что то кроме нулей содержать?
Можно шагами, а можно брейкпойнт поставить где-нибудь и до него стартануть.
И что у вас за странный код? Вы знаете что такое CMSIS? Зачем вы пользуетесь абсолютными адресами вместо имен регистров?
Re: STM32 новичку в ARM что к чему
Да не, запустите CubeIDE, создайте проект с микроконтроллером F407, скомпилируйте и запустите в режиме отладки (кнопка F11). Рабочая область переключится в режим отладки (Debug) и сбоку должна появиться вкладка Registers, поищите её среди прочих вкладок. Если что, то ее можно найти в меню Window->Show View->Registers.
Содержимое регистров r0 - r12 после сброса в общем случае неизвестно:

Регистры заполненными оказываются еще и потому, что до входа в main, и вообще, до первой сишной строчки выполняется весьма много действий, скрытых от нелюбопытного глаза пользователя. Если найти ассемблерный файл startup_stm... и в нем поставить брекпоинт на строчке Reset_Handler:, то можно попасть как раз в самое-самое начало работы.
Содержимое регистров r0 - r12 после сброса в общем случае неизвестно:
Регистры заполненными оказываются еще и потому, что до входа в main, и вообще, до первой сишной строчки выполняется весьма много действий, скрытых от нелюбопытного глаза пользователя. Если найти ассемблерный файл startup_stm... и в нем поставить брекпоинт на строчке Reset_Handler:, то можно попасть как раз в самое-самое начало работы.
- КРАМ
- Друг Кота
- Сообщения: 25122
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: STM32 новичку в ARM что к чему
[uquote="НовыйДень",url="/forum/viewtopic.php?p=4229437#p4229437"]Да не[/uquote]
Да да...
Несложно понять, что у ТС нет железа и он смотрит в симуляторе. Именно поэтому наблюдает не рандомные значения РОНов, а нулевые. Симулятор, в отличии от железа, ИМЕЕТ начальные значения РОНов равными нулю.
В приведенных им скринах я комментировал скрин Кейла, где нет стрелки-указателя PC в листинге Си. Это какгбэ намекаэ нам на то, что в настройках стартом выбран не main, а старт-ап асм-код.
Да да...
Несложно понять, что у ТС нет железа и он смотрит в симуляторе. Именно поэтому наблюдает не рандомные значения РОНов, а нулевые. Симулятор, в отличии от железа, ИМЕЕТ начальные значения РОНов равными нулю.
В приведенных им скринах я комментировал скрин Кейла, где нет стрелки-указателя PC в листинге Си. Это какгбэ намекаэ нам на то, что в настройках стартом выбран не main, а старт-ап асм-код.
Re: STM32 новичку в ARM что к чему
КРАМ писал(а):А с какого перепуга РОНы при запуске будут что то кроме нулей содержать?
У меня максимально маленький код, поэтому наверное нули в регистрах при старте.НовыйДень писал(а): Регистры заполненными оказываются еще и потому, что до входа в 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 уе.
Раньше столько новые стоили кажется.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
[uquote="koeltrad",url="/forum/viewtopic.php?p=4229609#p4229609"]Я пытаюсь понять что за командами CMSIS происходит.[/uquote]Для этого достаточно посмотреть как это сделано в CMSIS. Ваш же код неправильный!
Re: STM32 новичку в ARM что к чему
Почему неправильный? Светодиод на пине 12, порте D зажигается.
Тактирование включил, скорость выставил, На выход пин настроил.
ODR высокий уровень на пине настроил.
Тактирование включил, скорость выставил, На выход пин настроил.
ODR высокий уровень на пине настроил.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
volatile
- КРАМ
- Друг Кота
- Сообщения: 25122
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: STM32 новичку в ARM что к чему
[uquote="koeltrad",url="/forum/viewtopic.php?p=4229609#p4229609"]Я пытаюсь понять что за командами CMSIS происходит.[/uquote]
В CMSIS нет никаких "команд". Применительно к адресам регистров имеет место быть простое ОПРЕДЕЛЕНИЕ КОНСТАНТ, которое позволяет препроцессору компилятора тупо заменить магические адреса на именованные константы. То есть на имена регистров из даташита. Поскольку регистры периферии организованы в структуры с базовым адресом домена и смещением, то вполне разумно было определить доступ к регистрам как указатель на структуру. Это никак не влияет на размер кода.
Добавлено after 4 minutes 44 seconds:
[uquote="koeltrad",url="/forum/viewtopic.php?p=4229609#p4229609"]уже есть железо.[/uquote]
Дело не в том, что у вас есть, а чем вы реально пользуетесь в дебаге. Есть смутное подозрение, что вы не подключились к ST-link-у девборды в среде, а продолжаете использовать симулятор.
В CMSIS нет никаких "команд". Применительно к адресам регистров имеет место быть простое ОПРЕДЕЛЕНИЕ КОНСТАНТ, которое позволяет препроцессору компилятора тупо заменить магические адреса на именованные константы. То есть на имена регистров из даташита. Поскольку регистры периферии организованы в структуры с базовым адресом домена и смещением, то вполне разумно было определить доступ к регистрам как указатель на структуру. Это никак не влияет на размер кода.
Добавлено after 4 minutes 44 seconds:
[uquote="koeltrad",url="/forum/viewtopic.php?p=4229609#p4229609"]уже есть железо.[/uquote]
Дело не в том, что у вас есть, а чем вы реально пользуетесь в дебаге. Есть смутное подозрение, что вы не подключились к ST-link-у девборды в среде, а продолжаете использовать симулятор.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
[uquote="КРАМ",url="/forum/viewtopic.php?p=4229646#p4229646"]В CMSIS нет никаких "команд".[/uquote]Вообще говоря, есть. В CMSIS определено достаточно много команд процессора. Тот же NOP, например.
Re: STM32 новичку в ARM что к чему
[uquote="VladislavS",url="/forum/viewtopic.php?p=4229644#p4229644"]volatile[/uquote]
А нужен ли в моём коде volatile?
У меня нет циклов где компилятор может оптимизировать код.
А нужен ли в моём коде volatile?
У меня нет циклов где компилятор может оптимизировать код.
Я выключил в настройках Update Target before Debugging может из за этого.КРАМ писал(а):Есть смутное подозрение, что вы не подключились к ST-link-у девборды в среде, а продолжаете использовать симулятор.