Easyelectronics.ru

Электроника для всех
Текущее время: 27 ноя 2020, 11:30

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



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: Конфигурирование ножки порта TM32F100
СообщениеДобавлено: 08 июл 2011, 15:16 
Старожил

Зарегистрирован: 24 июн 2011, 14:05
Сообщения: 316
Откуда: Новочеркасск
Подскажите другой вход из такой вот проблемы: настраиваю шим от таймера 3 на ножках порта PC 6, 7, 8,9, через ремап, потом в определённый момент работы мне не нужен ШИМ, а нужно прямое управление этими ножками, пока вижу только два варианта выхода из этого:
1) Переконфигугрирование ножки темже ремапом и настройка ножки по новому через структуру.
2) Установка в регистр сравнения значений 0 или 0xFFFF и вкрючая и выключая соответствующий канал сравнения (но что то мне подсказывает что работать будет криво).
Вообщем оба метода относительно долгие по времени.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конфигурирование ножки порта TM32F100
СообщениеДобавлено: 08 июл 2011, 16:16 
Заглядывает иногда

Зарегистрирован: 01 июн 2010, 11:04
Сообщения: 139
Только переконфигурирование ножки


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конфигурирование ножки порта TM32F100
СообщениеДобавлено: 08 июл 2011, 16:47 
Старожил

Зарегистрирован: 24 июн 2011, 14:05
Сообщения: 316
Откуда: Новочеркасск
Ну например вот так:
Код:
  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);

или по короче как подскажите?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конфигурирование ножки порта TM32F100
СообщениеДобавлено: 08 июл 2011, 16:50 
Заглядывает иногда

Зарегистрирован: 01 июн 2010, 11:04
Сообщения: 139
С использованием стандартных библиотек - никак. Можно объявить GPIO_InitStructure глобально, проинициализировать ее при старте и в нужном месте запускать только GPIO_Init(GPIO_PORT[Pin_number], &GPIO_InitStructure);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конфигурирование ножки порта TM32F100
СообщениеДобавлено: 08 июл 2011, 19:33 
Старожил

Зарегистрирован: 24 июн 2011, 14:05
Сообщения: 316
Откуда: Новочеркасск
А если не библиотеками, а битами в регистрах как это выглядеть будет конкретно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конфигурирование ножки порта TM32F100
СообщениеДобавлено: 09 июл 2011, 11:25 
Старожил

Зарегистрирован: 25 апр 2010, 10:13
Сообщения: 1927
Откуда: Томск
ELEKTROS писал(а):
А если не библиотеками, а битами в регистрах как это выглядеть будет конкретно?

Открой stm32f10x_gpio.c нади там GPIO_Init() и посмотри.

_________________
Какое небо голубое....(с) лиса Алиса


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конфигурирование ножки порта TM32F100
СообщениеДобавлено: 09 июл 2011, 14:10 
Заглядывает иногда

Зарегистрирован: 28 янв 2010, 19:00
Сообщения: 48
ELEKTROS писал(а):
Подскажите другой вход из такой вот проблемы: настраиваю шим от таймера 3 на ножках порта PC 6, 7, 8,9, через ремап, потом в определённый момент работы мне не нужен ШИМ, а нужно прямое управление этими ножками, пока вижу только два варианта выхода из этого:
1) Переконфигугрирование ножки темже ремапом и настройка ножки по новому через структуру.
2) Установка в регистр сравнения значений 0 или 0xFFFF и вкрючая и выключая соответствующий канал сравнения (но что то мне подсказывает что работать будет криво).
Вообщем оба метода относительно долгие по времени.


3. Использовать Forced Output mode.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конфигурирование ножки порта TM32F100
СообщениеДобавлено: 09 июл 2011, 19:34 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 22 янв 2011, 03:23
Сообщения: 39
Откуда: Украина/Одесса
Не знаю, подойдет ли вам мой вариант, но мало ли. Имеем самописный хидер с нехитрыми дефайнами:
Код:
/*<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>*/


Далее если нужно перевести какую-нибудь ножку в другой режим делаем что-то типа такого:
Код:
GPIOA->CRH&=~(0b1111<<CRH_PIN11);
GPIOA->CRH|=(GPOUT50_OD<<CRH_PIN11);

В результате первая строчка сбрасывает четыре бита, которые соответствуют настройке порта, а вторая устанавливает новые значения этих четырех битов.
Теоретически оптимальней так:
Код:
GPIOA->CRH = ( GPIOA->CRH & (~(0b1111<<CRH_PIN11)) ) | (GPOUT50_OD<<CRH_PIN11);

На этом месте GCC делает одно чтение, потом выполняет операции and и or с регистрами общего назначения и записывает изменённое значение. В предидущем случае же он делал 2 чтения и 2 записи (порты обьявлены volatile). Поэтому на какие-то пару тактов порт переключается в режим аналогового входа (0b0000).
Не бейте ногами если чё, но так вот я с портами работаю) Мне пока подходит. А стандартная библиотека со своими подпрограммами да структурами для того чтобы ножку настроить это уж забивание гвоздей не то что микроскопом а полновесной космической станцией ИМХО.
Как-то так ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конфигурирование ножки порта TM32F100
СообщениеДобавлено: 12 июл 2011, 22:58 
Старожил

Зарегистрирован: 24 июн 2011, 14:05
Сообщения: 316
Откуда: Новочеркасск
Вообщем неполенился почитал, использую стандартные дефайны, примерно как и вы, но это под эту задачу хорошо подошло, а вообще на другом форуме хорошие дефайны выложили: electronix.ru/forum/index.php?showtopic=92322&st=0&gopid=951155&#entry951155.

Еще вопрос: зачем устанавливается частота выходной ножки, что это даёт, по моему разумению бесполезная функция, всёравно использую настройку 50МГц всегда?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конфигурирование ножки порта TM32F100
СообщениеДобавлено: 13 июл 2011, 22:15 
Заглядывает иногда
Аватара пользователя

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

ИМХО нужно не впихивать в МК куски HAL как это сделано в CMSIS и иже с ними а расширять препроцессор. Тоесть в идеале было бы хорошо если бы препроцессор умел такие вещи как те-же циклы, адекватную проверку условий и т.д. а не просто работал с текстом. Таким образом весь этот HAL как в данном случае расчёт значений регистров CRL и CRH на основе значений из структуры GPIO_InitStructure выполнялся бы при компиляции а в бинарник улшло бы только две записи констант по адресам. И все были бы довольны: и те кому давай HAL и чтобы даташит не читать и те кому не хочется лишний мусор в памяти МК держать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конфигурирование ножки порта TM32F100
СообщениеДобавлено: 13 июл 2011, 22:32 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 22 янв 2011, 03:23
Сообщения: 39
Откуда: Украина/Одесса
ELEKTROS писал(а):
Еще вопрос: зачем устанавливается частота выходной ножки, что это даёт, по моему разумению бесполезная функция, всёравно использую настройку 50МГц всегда?


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конфигурирование ножки порта TM32F100
СообщениеДобавлено: 14 июл 2011, 00:17 
Старожил

Зарегистрирован: 24 июн 2011, 14:05
Сообщения: 316
Откуда: Новочеркасск
pavel2661, вы деасемблер смотрели от этих дефайнов? от 3 до 5 команд, там занимает например установка соответствующего состояния ножки или смена режима работы, на С++ не использовал, только чистый С.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конфигурирование ножки порта TM32F100
СообщениеДобавлено: 14 июл 2011, 00:47 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 22 янв 2011, 03:23
Сообщения: 39
Откуда: Украина/Одесса
Одной да, но если вам нужно выставить параметры нескольких ножек подряд то код полученный в результате разворачивания этих макросов будет выполнять чтение-модификацию-запись для КАЖДОЙ ножки порта, что не оптимально.
Про стандартную библиотеку вообще молчу.
А использование макросов типа off(PB6) on(PB6) в случае нескольких ножек ещё и ведет к неодновременному изменению сигналов на порте. Может вызвать баги которые отлавливаются только осциллографом/лог.анализатором.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конфигурирование ножки порта TM32F100
СообщениеДобавлено: 14 июл 2011, 11:19 
Старожил

Зарегистрирован: 24 июн 2011, 14:05
Сообщения: 316
Откуда: Новочеркасск
Ну спорить не буду, но мне кажеться для частот не более 500кГц это будет не критично


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 


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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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

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