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

 
 
> STM32 вход с пулапом
Jenya7
сообщение Sep 9 2013, 06:05
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Хочу отконфигурировать пин как вход с пуллапом.
Камень STM32F103.
CODE
void GpioInit(void)
{
//PORTC Settings
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; //GPIO portC clocking
GPIOC->CRL |= GPIO_CRL_CNF0_1; //PC0 input with pull-up/pull-down resistor
GPIOC->BSRR = GPIO_BSRR_BS0; //set pull-up on PC0
}


И потом проверяю.
CODE
int main(void)
{
GlobalInit();
UsartSendString("Start\r"); // to check we are still alive
while(1)
{

if(GPIOC->IDR & GPIO_IDR_IDR0==0)
{
delay_100us(); //debounce
if(GPIOC->IDR & GPIO_IDR_IDR0==0)
{
UsartSendString("Button 0\r");
}
}
}


Вроде все сделал правильно но не работает. На пине 0 вольт, хотя должно быть 3.3V.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Genadi Zawidowsk...
сообщение Sep 9 2013, 10:36
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Я конфигурировал.
see https://188.134.5.254/export/378/trunk/hardware.c, функция arm_hardware_pioa_inputs, например. Используется макрос arm_stm32f10x_hardware_pio_prog
Про приоритет операций в проверке состояния входного пина Вы зря не слушаете... Но к установке PullUp не относится.

Сообщение отредактировал Genadi Zawidowski - Sep 9 2013, 10:43
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Sep 9 2013, 12:24
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Genadi Zawidowski @ Sep 9 2013, 15:36) *
Я конфигурировал.
see https://188.134.5.254/export/378/trunk/hardware.c, функция arm_hardware_pioa_inputs, например. Используется макрос arm_stm32f10x_hardware_pio_prog
Про приоритет операций в проверке состояния входного пина Вы зря не слушаете... Но к установке PullUp не относится.

я слушаю - я не понимаю, в чем фишка sm.gif

а понял - скобки не поставил, как то пропустил по невнимательностию

Genadi Zawidowski,
если я иду на использование макроса
CODE
#define arm_stm32f10x_hardware_pio_prog(gpio, iomask, cnf, mode) \
do { \
const portholder_t lo = power4((iomask) >> 0); \
const portholder_t hi = power4((iomask) >> 8); \
(gpio)->CRL = ((gpio)->CRL & ~ ((GPIO_CRL_MODE0 | GPIO_CRL_CNF0) * lo)) | (((GPIO_CRL_MODE0_0 * (mode)) | (GPIO_CRL_CNF0_0 * (cnf))) * lo); \
(gpio)->CRH = ((gpio)->CRH & ~ ((GPIO_CRH_MODE8 | GPIO_CRH_CNF8) * hi)) | (((GPIO_CRH_MODE8_0 * (mode)) | (GPIO_CRH_CNF8_0 * (cnf))) * hi); \
} while (0)


то почему не воспользоваться стандартной библиотекой? я изначально отказался от всяких наворотов, хочу работать напрямую с регистрами, тем более в инициализации, где один раз написал и забыл. в атмеле работа напрямую с регистрами позволяла мне писать довольно эффективный код.

необходимый и достаточный код для входа с пулапом
CODE
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; //GPIO portC clocking
GPIOC->CRL = GPIO_CRL_CNF0_1; //PC0 input with pull-up/pull-down resistor
GPIOC->BSRR |= GPIO_BSRR_BS0; //set pull-up on PC0


найден эмпирическим путем sm.gif

Сообщение отредактировал Jenya7 - Sep 9 2013, 12:25
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Sep 9 2013, 13:11
Сообщение #4


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Не надо в BSRR писать по маске.
Просто присвоение быстрее:
Код
GPIOC->BSRR = GPIO_BSRR_BS0;  //set pull-up on PC0


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Sep 9 2013, 13:30
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(demiurg_spb @ Sep 9 2013, 18:11) *
Не надо в BSRR писать по маске.
Просто присвоение быстрее:
Код
GPIOC->BSRR = GPIO_BSRR_BS0;  //set pull-up on PC0

да но если другие пины выставлены в различные состояния? например PC1 выход с единицей на нем?
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 22:54
Рейтинг@Mail.ru


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