Перейти к содержанию
    

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

Подскажите другой вход из такой вот проблемы: настраиваю шим от таймера 3 на ножках порта PC 6, 7, 8,9, через ремап, потом в определённый момент работы мне не нужен ШИМ, а нужно прямое управление этими ножками, пока вижу только два варианта выхода из этого:

1) Переконфигугрирование ножки темже ремапом и настройка ножки по новому через структуру.

2) Установка в регистр сравнения значений 0 или 0xFFFF и вкрючая и выключая соответствующий канал сравнения (но что то мне подсказывает что работать будет криво).

Вообщем оба метода относительно долгие по времени.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Remap-то зачем трогать? Просто меняете режим работы ноги с альтернативного выхода на пушпульный выход. Это пара команд.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну например вот так:

Код:

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);

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Ясно как. Отказаться от GPIO_Init(). Программировать регистры напрямую. В руководстве по МК все регистры описаны.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Если вы пишете на C++, то посмотрите вот сюда. Это удобная обёртка для работы с ножками. Если на простом си, то вот:

Это так называемые макросы им. Волкова. Пользоваться так:

// Объявляем ножку:
#define PC6 C, 6, L     // порт "C", нога номер 6, активный уровень - низкий.
#define PC7 C, 7, H     // порт "C", нога номер 6, активный уровень - высокий

// Конфигурируем ножку:
pmode(PC6, PIN_CFG_OPP_50MHZ);    // выход
pmode(PC7, PIN_CFG_AI);    // альтернативный вход

// Используем ножку:
on(PC6);   // переводим в активный уровень (в низкий в данном случае)
off(PC7);   // переводим в неактивный уровень (высокий)

//и так далее.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так а разница между: on(PC6) и off(PC6) например тогда какая, если там активный или нет уровень на выходе определяется самым первым дефайном, где объявляем ножку?

Я так понял что это условность что приймем за активный а что нет, поэтому ипользовать впринципе без разницы on или off, или я не так понял?

Здесь мне кажеться правильно так коментай:

off(PC7); // переводим в неактивный уровень (в данном случае низкий)

Изменено пользователем ELEKTROS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

off(PC7); // переводим в неактивный уровень (в данном случае низкий)

Да, конечно. Я перепутал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, достаточно просто и в регистры лезть не надо. А такой вопрос не по теме, может знаете почему используются сплошь битовые маски, хотя память сегментированая и можно напрямую писать биты. Или компилятор сделает не по битовым маскам, а как положено когда в асемблер перебьёт?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Извините, я не понял, о чём речь. Что значит "память сегментированная"?

Битовые маски оттого, что в одном регистре конфигурации (например, CRL) хранятся настройки сразу восьми ножек микроконтроллера. Поэтому для того, чтобы настроить одну ножку, не трогая другие, приходится применять битовые маски.

А вообще, по первой ссылке, которую я приводил, вариант более правильный, посмотрите как там сделано. Там и масок поменьше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, достаточно просто и в регистры лезть не надо...

Рискну предложить посмотреть на мой вариант конфигурирования битов порта. Здесь, рядом, недалеко... :)

http://electronix.ru/forum/index.php?showt...st&p=918437

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну сегментированная, т.е. каждый бит имеет свой адрес, например в referens manual на эту серию контроллеров приводят даже формулу как расчитать адрес конкретного бита, т.е. не нужны битовые маски вовсе в таком случае, меньше команд тратиться, странно что вы об этом не слышали, или я не так выразился.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это называется bit-band:)

Собственно говоря, в варианте C++, который я привёл первым, bit-band используется в паре-тройке мест. Но особого выигрыша он не даёт. Особенно в конфигурировании ног. Ибо там не один бит, и маска всяко быстрее выходит.

А сишный вариант я оказывается загрузил старый. Вот поновее, тут всё сделано как надо: gpio.h.zip

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...