Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как заставить все пины портов STM8L152C6 работать
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
Wyatchek
Мигать светодиодами я научился, но наткнулся на то, что не все пины порта С отреагировали на мои команды. Как определить какие пины портов (хочу иметь на вывод при токе 5мА максимально возможное число ног) можно использовать на вывод? Либо какие настройки для этого требуются? Вот текст моей программы:

#include "iostm8l152c6.h"
//Задержка 1
void SomeDelay1()
{
for (unsigned long delay_count=0; delay_count<3000; delay_count++);
};
//Задержка 2
void SomeDelay2()
{
for (unsigned long delay_count=0; delay_count<60000; delay_count++);
};
int main( void )
{
PC_DDR_bit.DDR0 = 1; //Настраиваем 0й пин порта C на выход
PC_CR1_bit.C10 = 1; //Переключаем его в режим push-pull
PC_DDR_bit.DDR1 = 1; //Настраиваем 1й пин порта C на выход
PC_CR1_bit.C11 = 1;
PC_DDR_bit.DDR2 = 1; //Настраиваем 2й пин порта C на выход
PC_CR1_bit.C12 = 1;
PC_DDR_bit.DDR3 = 1; //Настраиваем 3й пин порта C на выход
PC_CR1_bit.C13 = 1;
PC_DDR_bit.DDR4 = 1; //Настраиваем 4й пин порта C на выход
PC_CR1_bit.C14 = 1;
PC_DDR_bit.DDR5 = 1; //Настраиваем 5й пин порта C на выход
PC_CR1_bit.C15 = 1;
PC_DDR_bit.DDR6 = 1; //Настраиваем 6й пин порта C на выход
PC_CR1_bit.C16 = 1;
PC_DDR_bit.DDR7 = 1; //Настраиваем 7й пин порта C на выход
PC_CR1_bit.C17 = 1;

while (1) //В цикле будем переключать светодиоды
{
PC_ODR_bit.ODR0 = 1; //Переключаем пин 0 в высокий уровень - светодиод горит
SomeDelay1(); //Задержка в 1
PC_ODR_bit.ODR0 = 0; //Пин 0 в низкий уровень - светодиод тухнет
PC_ODR_bit.ODR1 = 1; //Переключаем пин 1 в высокий уровень - светодиод горит
SomeDelay1(); //Задержка в 1
PC_ODR_bit.ODR1 = 0; //Пин 1 в низкий уровень - светодиод тухнет
PC_ODR_bit.ODR2 = 1; //Переключаем пин 2 в высокий уровень - светодиод горит
SomeDelay1(); //Задержка в 1
PC_ODR_bit.ODR2 = 0; //Пин 2 в низкий уровень - светодиод тухнет
PC_ODR_bit.ODR3 = 1; //Переключаем пин 3 в высокий уровень - светодиод горит
SomeDelay1(); //Задержка в 1
PC_ODR_bit.ODR3 = 0; //Пин 3 в низкий уровень - светодиод тухнет
PC_ODR_bit.ODR4 = 1; //Переключаем пин 4 в высокий уровень - светодиод горит
SomeDelay1(); //Задержка в 1
PC_ODR_bit.ODR4 = 0; //Пин 4 в низкий уровень - светодиод тухнет
PC_ODR_bit.ODR5 = 1; //Переключаем пин 5 в высокий уровень - светодиод горит
SomeDelay1(); //Задержка в 1
PC_ODR_bit.ODR5 = 0; //Пин 5 в низкий уровень - светодиод тухнет
PC_ODR_bit.ODR6 = 1; //Переключаем пин 6 в высокий уровень - светодиод горит
SomeDelay1(); //Задержка в 1
PC_ODR_bit.ODR6 = 0; //Пин 6 в низкий уровень - светодиод тухнет
PC_ODR_bit.ODR7 = 1; //Переключаем пин 7 в высокий уровень - светодиод горит
SomeDelay1(); //Задержка в 1
PC_ODR_bit.ODR7 = 0; //Пин 7 в низкий уровень - светодиод тухнет
SomeDelay2();
};

return 0;
}

Экспериментально я установил, что с помощью этой программки я смогу управлять только С4, С5, С6, С7, В1, В2, В3, В4, В5, В6, В7, D1, D2, D3, D4, D5, D6, D7, E1, E2, E3, E4, E5, E6, E7, A2, A3, A4, A5, A6, A7. Итого мне доступны 31 линия порта на вывод. Это предел?
Хочу управлять всеми сорока пинами этих пяти портов. Что нужно изменить в настройках?
Gavrussia
Сразу можно отметить: С0 и С1 - не имеют возможности работы в режиме Push-pull они только Open-Drain, Соответственно их нужно подтянуть чтобы мигать светодиодами.
Wyatchek
Цитата(Gavrussia @ Nov 7 2013, 06:12) *
Сразу можно отметить: С0 и С1 - не имеют возможности работы в режиме Push-pull они только Open-Drain, Соответственно их нужно подтянуть чтобы мигать светодиодами.


Спасибо! Уже легче. Может еще и по остальным не реагирующим пинам кто подскажет.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.