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

 
 
 
Reply to this topicStart new topic
> Настройка ножки RX
Xeon
сообщение Oct 21 2012, 15:24
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 140
Регистрация: 21-04-11
Пользователь №: 64 524



Всем привет!) В общем на stm32f407 (discovery) пытаюсь зависти usart вот как делаю:

Код
void UsartInit(void)
{
    // enable USART2
    RCC->APB1ENR |= RCC_APB1ENR_USART2EN;
    
    // enable GPIOA
    RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
    
    // configure GPIOA
    // for TX
    GPIOA->MODER |= GPIO_MODER_MODER2_1;
    GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR2_1;
    GPIOA->AFR[0] |= 0x00000700;
    // for RX
    GPIOA->MODER |= GPIO_MODER_MODER3_1;
    GPIOA->AFR[0] |= 0x00007000;
    
    // enable USART2 interrupts
    NVIC->ISER[1] |= 0x00000040;
    
    // configure usart
    USART2->BRR = 0x000002f0; // 56000 baud
    USART2->CR2 = USART_CR2_CLKEN;
    USART2->CR1 = USART_CR1_UE | USART_CR1_TE | USART_CR1_RE
        | USART_CR1_RXNEIE;
}


Результат следующий: проверял - при окончание передачи (TC) прерывание работает норм и байтики швырябтся в терминалку, эдакий спам... а вот когда с терменалки швыряю в проц, то ему пофиг, при этом я конечно отрубал прерывания по TC. Я грешу на то что както неправельно настраеваю сам порт RX... Подскажите плиз...

PS Всякие StdPeriph Driver не хочу использовать, так как на мой взгляд изучать контроллер нужно работая с регистрами напрямую, так больше граблей, а значит и пониманий... rolleyes.gif
Go to the top of the page
 
+Quote Post
spectral1989
сообщение Oct 22 2012, 05:02
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 76
Регистрация: 5-04-12
Из: Томск
Пользователь №: 71 210



Цитата
PS Всякие StdPeriph Driver не хочу использовать, так как на мой взгляд изучать контроллер нужно работая с регистрами напрямую, так больше граблей, а значит и пониманий...
нет ничего плохого в использовании инструментов. это как рубить дрова топором или кухонным ножом. результат один и тот же, а количество усилий необходимое для достижения цели разное. смысл написанного при применении таких конструкций:
Код
  /* Configure USARTy Rx as input floating */
  GPIO_InitStructure.GPIO_Pin = USART_RxPin;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(USARTy_GPIO, &GPIO_InitStructure);

не меняется. зато экономится куча времени при написании программ и отлове багов в "магических цифрах", а так же появляется кроссплатформенность. попробуйте, вам понравитсяsm.gif

З.Ы. как вы определяете, что процу пофиг? момент ожидание - реальность не понятен. и не вижу у вас обработчика прерываний от USART
Go to the top of the page
 
+Quote Post
Xeon
сообщение Oct 22 2012, 07:31
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 140
Регистрация: 21-04-11
Пользователь №: 64 524



Цитата(spectral1989 @ Oct 22 2012, 09:02) *
зато экономится куча времени при написании программ и отлове багов в "магических цифрах", а так же появляется кроссплатформенность. попробуйте, вам понравитсяsm.gif

З.Ы. как вы определяете, что процу пофиг? момент ожидание - реальность не понятен. и не вижу у вас обработчика прерываний от USART


Уверен что понравится rolleyes.gif Вот только хочется понять все стороны и нюансы при работе с данными контроллерами. Как разберусь со всеми детальками... так сразу на StdPeriph Driver радоваться жизни...
Обработчик прерывания он есть, тут я ток привел как настраиваю всё... Что ему пофиг определяю, следующим образом: у меня str32f4discovery, соответственно st-link, запускаю проект в отладчике (тут keil), внутрях прерывания для usart2 смотрю, если это прерывание по TC, то швыряться байтиками во все стороны (прерывание по TC я отключил, дабы не висеть всё время в прерывание по данному ивенту), если прерывание по RXNE, то к принятому байтеку +1 и обратно в usart. Плюс ко всему поставил breakpoin в начале прерывания. Когда шлю байтик в discovery, то по идее должно сработать прерывание, а там breakpoint и на нём остановиться, а это не происходит.
Вот ещё, что наверно следует сказать: проект у меня зашивается в SRAM (брал пример со SRAM и его изменял).
Go to the top of the page
 
+Quote Post
Xeon
сообщение Oct 23 2012, 08:01
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 140
Регистрация: 21-04-11
Пользователь №: 64 524




Мдям... грешил на st-link, типа он флаг для RXNE прерывания сбрасывает... для этого зашивал во флеш, отрубал его нафиг... и ничего.
Наверно надо создать второй проект воспользоваться библиотекой StdPeriph Driver и после искать 10 отличей дабы понять в чём проблема...
Go to the top of the page
 
+Quote Post
spectral1989
сообщение Oct 24 2012, 04:15
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 76
Регистрация: 5-04-12
Из: Томск
Пользователь №: 71 210



Код
    GPIOA->MODER |= GPIO_MODER_MODER3_1;
    GPIOA->AFR[0] |= 0x00007000;
    
    // enable USART2 interrupts
    NVIC->ISER[1] |= 0x00000040;

в этих трех строчках скорее всего ошибка. проверяйте правильность номера вектора и включение порта RX. он должен находиться в режиме "Floating input"
Go to the top of the page
 
+Quote Post

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

 


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


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