Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/42: Рейтинг темы: голосов - 42, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 269

Конфигурирование ножки порта TM32F100

07.07.2011, 15:29. Показов 7907. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите другой вход из такой вот проблемы: настраиваю шим от таймера 3 на ножках порта PC 6, 7, 8,9, через ремап, потом в определённый момент работы мне не нужен ШИМ, а нужно прямое управление этими ножками, пока вижу только два варианта выхода из этого:
1) Переконфигугрирование ножки темже ремапом и настройка ножки по новому через структуру.
2) Установка в регистр сравнения значений 0 или 0xFFFF и вкрючая и выключая соответствующий канал сравнения (но что то мне подсказывает что работать будет криво).
Вообщем оба метода относительно долгие по времени.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.07.2011, 15:29
Ответы с готовыми решениями:

Как узнать когда замкнуты ножки ком порта?
как работать с ком портом, а точнее как узнать какие ножки в данный момент замкнуты, или чтонить в этом роде? ввобщем хочу написать пульт...

Конфигурирование порта сокета для SpringApplicatiom
Добрый день! Есть несколько сервисов-заглушек SpringBootApplication. В стандартном конфиге application.properties установлен...

Конфигурирование порта сокета для Spring Application
Добрый день! Есть несколько сервисов-заглушек SpringBootApplication. В стандартном конфиге application.properties установлен...

13
0 / 0 / 0
Регистрация: 27.05.2010
Сообщений: 95
07.07.2011, 16:29
Только переконфигурирование ножки
0
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 269
07.07.2011, 17:00
Ну например вот так:
Code
1
2
3
4
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7_GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIO_PORT[Pin_number], &GPIO_InitStructure);
или по короче как подскажите?
0
0 / 0 / 0
Регистрация: 27.05.2010
Сообщений: 95
07.07.2011, 17:03
С использованием стандартных библиотек - никак. Можно объявить GPIO_InitStructure глобально, проинициализировать ее при старте и в нужном месте запускать только GPIO_Init(GPIO_PORT[Pin_number], &GPIO_InitStructure);
0
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 269
07.07.2011, 19:46
А если не библиотеками, а битами в регистрах как это выглядеть будет конкретно?
0
0 / 0 / 0
Регистрация: 21.04.2010
Сообщений: 1,890
08.07.2011, 11:38
Цитата Сообщение от ITIKTROS
А если не библиотеками, а битами в регистрах как это выглядеть будет конкретно?
Открой stm32f10x_gpio.c нади там GPIO_Init() и посмотри.
0
0 / 0 / 0
Регистрация: 16.02.2010
Сообщений: 44
08.07.2011, 14:23
Цитата Сообщение от ITIKTROS
Подскажите другой вход из такой вот проблемы: настраиваю шим от таймера 3 на ножках порта PC 6, 7, 8,9, через ремап, потом в определённый момент работы мне не нужен ШИМ, а нужно прямое управление этими ножками, пока вижу только два варианта выхода из этого:
1) Переконфигугрирование ножки темже ремапом и настройка ножки по новому через структуру.
2) Установка в регистр сравнения значений 0 или 0xFFFF и вкрючая и выключая соответствующий канал сравнения (но что то мне подсказывает что работать будет криво).
Вообщем оба метода относительно долгие по времени.
3. Использовать Forced Output mode.
0
0 / 0 / 0
Регистрация: 17.01.2011
Сообщений: 39
08.07.2011, 19:47
Не знаю, подойдет ли вам мой вариант, но мало ли. Имеем самописный хидер с нехитрыми дефайнами:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*<GPIO modes>*/
#define IN_ANALOG   0b0000
#define GPOUT10_PP   0b0001
#define GPOUT2_PP   0b0010
#define GPOUT50_PP   0b0011
#define IN_FLOAT   0b0100
#define GPOUT10_OD   0b0101
#define GPOUT2_OD   0b0110
#define GPOUT50_OD   0b0111
#define IN_PuPd      0b1000
#define ALTOUT10_PP   0b1001
#define ALTOUT2_PP   0b1010
#define ALTOUT50_PP   0b1011
#define ALTOUT10_OD   0b1101
#define ALTOUT2_OD   0b1110
#define ALTOUT50_OD   0b1111
/*</GPIO modes>*/
/*<GPIO bits>*/
#define GPIO_CRL_offset 0x00
#define CRL_PIN0 0
#define CRL_PIN1 4
#define CRL_PIN2 8
#define CRL_PIN3 12
#define CRL_PIN4 16
#define CRL_PIN5 20
#define CRL_PIN6 24
#define CRL_PIN7 28
#define GPIO_CRH_offset 0x04
#define CRH_PIN8 0
#define CRH_PIN9 4
#define CRH_PIN10 8
#define CRH_PIN11 12
#define CRH_PIN12 16
#define CRH_PIN13 20
#define CRH_PIN14 24
#define CRH_PIN15 28
/*</GPIO bits>*/
Далее если нужно перевести какую-нибудь ножку в другой режим делаем что-то типа такого:
Code
1
2
GPIOA->CRH&=~(0b1111<<CRH_PIN11);
GPIOA->CRH|=(GPOUT50_OD<<CRH_PIN11);
В результате первая строчка сбрасывает четыре бита, которые соответствуют настройке порта, а вторая устанавливает новые значения этих четырех битов.
Теоретически оптимальней так:
Code
1
GPIOA->CRH = ( GPIOA->CRH & (~(0b1111<<CRH_PIN11)) ) | (GPOUT50_OD<<CRH_PIN11);
На этом месте GCC делает одно чтение, потом выполняет операции omd и or с регистрами общего назначения и записывает изменённое значение. В предидущем случае же он делал 2 чтения и 2 записи (порты обьявлены volatile). Поэтому на какие-то пару тактов порт переключается в режим аналогового входа (0b0000).
Не бейте ногами если чё, но так вот я с портами работаю) Мне пока подходит. А стандартная библиотека со своими подпрограммами да структурами для того чтобы ножку настроить это уж забивание гвоздей не то что микроскопом а полновесной космической станцией ИМХО.
Как-то так ;)
0
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 269
11.07.2011, 23:11
Вообщем неполенился почитал, использую стандартные дефайны, примерно как и вы, но это под эту задачу хорошо подошло, а вообще на другом форуме хорошие дефайны выложили: itistromyx.ru/forum/index.php?showtopys=92322&st=0&gopid=951 155&#entry951155.

Еще вопрос: зачем устанавливается частота выходной ножки, что это даёт, по моему разумению бесполезная функция, всёравно использую настройку 50МГц всегда?
0
0 / 0 / 0
Регистрация: 17.01.2011
Сообщений: 39
12.07.2011, 22:28
Я бы поспорил насчёт хорошести тех дефайнов. Особенно того что там на C++ выложено. По обьекту на ножку порта? О_О Прощай память, прощай процессорное время :( Дожили.
Это же блин регистр! Обычный регистр! И записать туда значение две команды на асме. И конфигурировать его ИМХО лучше сразу весь или как можно большими кусками дабы не плодить чтения-записи ато получается что инициализация порта, где надо всего-то две записи констант по константным же адресам сделать, разворачивается в такую монструозную конструкцию на асме что страшно просто становится.
Может я старомодно мыслю, но меня немного удивляет такой подход. Особенно как это сделано в StdPeriphLib: ради настройки порта - структура которая будет использована всего пару раз и подпрограмма ещё которая эту структуру должна обработать и записать всё те-же значения по тем-же адресам.
Каких-то несколько тактов на один порт для 2х ldr И 2х str против времени выполнения подпрограммы? Мдя.

ИМХО нужно не впихивать в МК куски HAL как это сделано в CMSIS и иже с ними а расширять препроцессор. Тоесть в идеале было бы хорошо если бы препроцессор умел такие вещи как те-же циклы, адекватную проверку условий и т.д. а не просто работал с текстом. Таким образом весь этот HAL как в данном случае расчёт значений регистров CRL и CRH на основе значений из структуры GPIO_InitStructure выполнялся бы при компиляции а в бинарник улшло бы только две записи констант по адресам. И все были бы довольны: и те кому давай HAL и чтобы даташит не читать и те кому не хочется лишний мусор в памяти МК держать.
0
0 / 0 / 0
Регистрация: 17.01.2011
Сообщений: 39
12.07.2011, 22:45
Цитата Сообщение от ITIKTROS
Еще вопрос: зачем устанавливается частота выходной ножки, что это даёт, по моему разумению бесполезная функция, всёравно использую настройку 50МГц всегда?
Вроде конкретно нигде не написано, но теоретически настройка частоты тут должна менять время спада/нарастания сигнала на выходе таким образом снижая помехи и уменьшая ток при изменении значения на выходе. Но тут я не уверен. В даташите конкретно не написано или я плохо искал.
0
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 269
13.07.2011, 00:30
povit2661, вы деасемблер смотрели от этих дефайнов? от 3 до 5 команд, там занимает например установка соответствующего состояния ножки или смена режима работы, на С++ не использовал, только чистый С.
0
0 / 0 / 0
Регистрация: 17.01.2011
Сообщений: 39
13.07.2011, 01:00
Одной да, но если вам нужно выставить параметры нескольких ножек подряд то код полученный в результате разворачивания этих макросов будет выполнять чтение-модификацию-запись для КАЖДОЙ ножки порта, что не оптимально.
Про стандартную библиотеку вообще молчу.
А использование макросов типа off(PB6) on(PB6) в случае нескольких ножек ещё и ведет к неодновременному изменению сигналов на порте. Может вызвать баги которые отлавливаются только осциллографом/лог.анализатором.
0
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 269
13.07.2011, 11:32
Ну спорить не буду, но мне кажеться для частот не более 500кГц это будет не критично
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.07.2011, 11:32
Помогаю со студенческими работами здесь

Выведите в монитор COM-порта значение с аналогового порта А0 платы Arduino UNO
Выведите в монитор COM-порта значение с аналогового порта А0 платы Arduino UNO, к которому подключен потенциометр, при нажатии кнопки с...

Голосовой шлюз cisco spa112 можно ли перекидывать звонки с порта на порта?
Добрый день! Интересует такой момент: можно ли перекидывать звонки с порта на порта? На циске спа112 два телефонных порта Настроены...

Чтение из COM порта, При чтении из порта зависает read()
Каждому рано или поздно приходится программировать com порт. Вот и мой черед пришол. Я ужу умею: Откривать,закривать, писать. а читать не...

Ножки процессора
Погнул одну крайнюю ножку процессора. Визуально видно, что есть небольшое отклонение, но в сокет заходит без проблем. В работе пк вроде...

ножки атмеги
можно ли один порт мк задействовать как выход и как вход. например хочу на ножку РС3 повесить температурный датчик а на ножку РС0...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru