реклама на сайте
подробности

 
 
> stm32f405rgt6, Проблема с управлением пина, Выходной Пин всегда на уровне 3.3в
BlackOps
сообщение Aug 4 2013, 21:00
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 618
Регистрация: 7-06-08
Из: USSR
Пользователь №: 38 121



Вот настройка порта А:
CODE

//=============================================================================
// GPIOA configuration
//=============================================================================

// enable GPIOA clock
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;

// Alternate Function
//GPIOA->MODER = 0; // clear moder register
GPIOA->MODER |=
(
GPIO_MODER_MODER15_0 | // General Purpose Output, SPI3_NSS

GPIO_MODER_MODER4_0 | // General Purpose Output, SPI1_NSS
GPIO_MODER_MODER5_1 | // Alternate Function, SPI1_SCK
GPIO_MODER_MODER6_1 | // Alternate Function, SPI1_MISO
GPIO_MODER_MODER7_1 | // Alternate Function, SPI1_MOSI

GPIO_MODER_MODER9_0 | // General Purpose Output
GPIO_MODER_MODER11_0 // General Purpose Output
);


// Output type
//GPIOA->OTYPER = 0x0; // clear OTYPER register
//GPIOA->OTYPER |= 0; // Push-Pull

// Speed type
//GPIOA->OSPEEDR = 0; // clear OSPEEDR register
GPIOA->OSPEEDR |=
(
GPIO_OSPEEDER_OSPEEDR15 | // SPI3_NSS 100MHz

GPIO_OSPEEDER_OSPEEDR4 | // SPI1 NSS, 100MHz
GPIO_OSPEEDER_OSPEEDR5 | // SPI1 SCK, 100MHz
GPIO_OSPEEDER_OSPEEDR6 | // SPI1 MISO 100MHz
GPIO_OSPEEDER_OSPEEDR7 // SPI1 MOSI 100MHz

//GPIO_OSPEEDER_OSPEEDR9 | // 100MHz
//GPIO_OSPEEDER_OSPEEDR10 | // 100MHz
//GPIO_OSPEEDER_OSPEEDR11 | // 100MHz
//GPIO_OSPEEDER_OSPEEDR12 // 100MHz
);



// Push/Pull
//GPIOA->PUPDR = 0; // clear PUPDR register
GPIOA->PUPDR |=
(
GPIO_PUPDR_PUPDR15_0 | // pull-up, NSS,SPI3

GPIO_PUPDR_PUPDR4_0 | // Pull-Up, NSS,SPI1

GPIO_PUPDR_PUPDR10_0 | // Pull-Up
GPIO_PUPDR_PUPDR9_1 | // Pull-Down
GPIO_PUPDR_PUPDR11_1 | // Pull-Down
GPIO_PUPDR_PUPDR12_0 // Pull-Up
);


// Alternate Function pins
GPIOA->AFR[1] = 0; // clear AFR_H register

GPIOA->AFR[0] = 0; // clear AFR_L register
GPIOA->AFR[0] |=
(
//(5 << ((4 - 0) << 2)) | // SPI1 NSS, AF5
(5 << ((5 - 0) << 2)) | // SPI1 SCK, AF5
(5 << ((6 - 0) << 2)) | // SPI1 MISO, AF5
(5 << ((7 - 0) << 2)) // SPI1 MOSI, AF5
);


А вот тут я выставляю 1 на пин, потом после нажатия кнопки выставляю 0 (пробовал разными методами, BSRRL/BSRRH тоже):
Код
GPIOA->ODR |= GPIO_ODR_ODR_9; // PA9 HIGH
GPIOA->ODR |= GPIO_ODR_ODR_11; // PA11 HIGH

// wait for CTRL_BUTTON1 press
while ( !(((GPIOB->IDR) & GPIO_IDR_IDR_12) == RESET)  );

GPIOA->ODR &= !GPIO_ODR_ODR_9; // PA9 LOW
GPIOA->ODR &= !GPIO_ODR_ODR_11; // PA11 LOW


Так вот пин9 в начале 3.3В, проверяю вольтметром, после нажатия кнопки он 0.
А вот пин11 всегда на уровне 3.3В.

Оба пина (9 и 11) имеют одинаковую разводку на плате, и последовательное сопротивление примерно 90 Ом между пином чипа и пином на плате куда подключается вольтметр (т.е. последовательно подключен и резистор).

Почему пин 11 зависает всегда на 3.3В а Пин 9 работает нормально?

как всегда пины перепутал, работает все короче.


--------------------
Нажми на кнопку - получишь результат, и твоя мечта осуществится
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 18:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01329 секунд с 7
ELECTRONIX ©2004-2016