|
@@ -1,3 +1,66 @@
|
|
|
+https://hubstub.ru/stm32/65-stm32-gpio-ili-porty-vvoda-vyvoda.html
|
|
|
+stm32f1xx
|
|
|
+
|
|
|
+//Полагаем что выводы после сброса в режиме плавающего входа
|
|
|
+
|
|
|
+//разрешаем тактирование порта A
|
|
|
+RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
|
|
|
+
|
|
|
+//вход с подтяжкой к +
|
|
|
+GPIOA->CRL &= ~GPIO_CRL_CNF0;
|
|
|
+GPIOA->CRL |= GPIO_CRL_CNF0_1;
|
|
|
+GPIOA->ODR |= GPIO_ODR_ODR0;
|
|
|
+
|
|
|
+//вход с подтяжкой к -
|
|
|
+GPIOA->CRL &= ~GPIO_CRL_CNF1;
|
|
|
+GPIOA->CRL |= GPIO_CRL_CNF1_1;
|
|
|
+GPIOA->ODR &= ~GPIO_ODR_ODR1;
|
|
|
+
|
|
|
+//аналоговый режим
|
|
|
+GPIOA->CRL &= ~GPIO_CRL_CNF2;
|
|
|
+
|
|
|
+//выход с открытым стоком 2MHz
|
|
|
+GPIOA->CRL &= ~GPIO_CRL_CNF3;
|
|
|
+GPIOA->CRL |= GPIO_CRL_CNF3_0;
|
|
|
+GPIOA->CRL |= GPIO_CRL_MODE3_1;
|
|
|
+
|
|
|
+//двухтактный выход 10MHz
|
|
|
+GPIOA->CRL &= ~GPIO_CRL_CNF4;
|
|
|
+GPIOA->CRL |= GPIO_CRL_MODE4_0;
|
|
|
+
|
|
|
+//альтернативная ф-ция, двухтактный выход, 50 MHz
|
|
|
+GPIOA->CRL &= ~GPIO_CRL_CNF5;
|
|
|
+GPIOA->CRL |= GPIO_CRL_CNF5_1;
|
|
|
+GPIOA->CRL |= GPIO_CRL_MODE5;
|
|
|
+
|
|
|
+//альтернативная ф-ция, выход с открытым стоком, 50 MHz
|
|
|
+GPIOA->CRL |= GPIO_CRL_CNF6;
|
|
|
+GPIOA->CRL |= GPIO_CRL_MODE6;
|
|
|
+
|
|
|
+
|
|
|
+//проверяем значение нулевого вывода порта А
|
|
|
+if (GPIOА->IDR & GPIO_IDR_IDR0)
|
|
|
+
|
|
|
+
|
|
|
+//если вывод в режиме входа то активируется подтяжка к питанию
|
|
|
+GPIOA->ODR |= GPIO_ODR_ODR0;
|
|
|
+//или к земле
|
|
|
+GPIOA->ODR &= ~GPIO_ODR_ODR0;
|
|
|
+//если в режиме выхода, то на нём установится соответствующий лог.уровень
|
|
|
+//например так можно установить все выходы порта в 1
|
|
|
+GPIOA->ODR = 0xFFFF;
|
|
|
+
|
|
|
+
|
|
|
+//сбросить нулевой бит порта А
|
|
|
+GPIOA->BRR = GPIO_BRR_BR0;
|
|
|
+
|
|
|
+
|
|
|
+//сбросить нулевой бит
|
|
|
+GPIOA->BSRR = GPIO_BSRR_BR0;
|
|
|
+//установить нулевой бит
|
|
|
+GPIOA->BSRR = GPIO_BSRR_BS0;
|
|
|
+
|
|
|
+-=-=-
|
|
|
Как проверить состояние пина порта?
|
|
|
Скажем 4 пина порта С?
|
|
|
|