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

 
 
> stm32f051 : не могу запустить uart., stm32f051 : не могу запустить uart
Onkel
сообщение Mar 1 2013, 13:32
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 708
Регистрация: 8-05-11
Из: Чг
Пользователь №: 64 861



hi all
Нашел лишь один образец работы usart в 32f051, но он напрямую не встает, пришлось разбираться до составляющих, получилось:
CODE
void InitUsart1(void)
{
RCC->AHBENR |= (1UL<<17); // PORT A clock ON
RCC->APB2ENR |= (1UL<<14); // UART1 clock ON
GPIOA->AFR[1] &= ~(1UL<<7); // set pinA9 as UART
GPIOA->AFR[1] |= (7UL<<4); // set pinA9 as UART
GPIOA->AFR[1] &= ~(1UL<<11); // set pinA10 as UART
GPIOA->AFR[1] |= (7UL<<8); // set pinA10 as UART

GPIOA->OSPEEDR |= (3UL << 2*9) ; // 50 MHz
GPIOA->OSPEEDR |= (3UL << 2*10) ; // 50 MHz

GPIOA->MODER |= (1UL << (2*9 +1 )); //
GPIOA->MODER &= ~(1UL << (2*9 ));
GPIOA->MODER |= (1UL << (2*10 +1 )); //
GPIOA->MODER &= ~(1UL << (2*10 ));

GPIOA->OTYPER &= ~(3UL<<9); // portA9 A10 push pull
GPIOA->PUPDR &= ~(5UL << 19); // pull up
GPIOA->PUPDR |= (5UL << 18); // pull up
USART1->BRR = 0x0683;
USART1->CR1 &= ~( 1UL<<12) ; // m-bit 8 bits

USART1->CR2 &= ~ (3UL << 12 ) ; //~USART_CR2_STOP; //1 stop bit

USART1->CR1 &= ~( 1UL<<10) ; // parity none

USART1->CR3 &= ~( 1UL<<9) ; // flow control

USART1->CR1 |= (3UL <<2); //Transmit enable 0x08 0x04

USART1->CR1 |= 1UL; //usart1 enable }


вывожу раз в 10 мс по tim6
while(!(USART1->ISR & (1<<6)));
USART1->TDR = 0xAA;

На ноге тх uart1 ничего нет.

Может, кто пример работы встречал uart на f051? В даташите написано, что портировать с f1xx код нельзя.

Сообщение отредактировал IgorKossak - Mar 1 2013, 22:03
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
Tahoe
сообщение Mar 1 2013, 17:24
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(Onkel @ Mar 1 2013, 17:32) *
На ноге тх uart1 ничего нет.

Код не смотрел, но для начала, самое элементарное:
- а что есть? как минимум, на ноге Tx должен быть высокий уровень
- AF? Remap? да и вообще, у STM32 по сто ног на периферию, неплохо бы указывать номер пина, на котором смотрится сигнал

UPD
посмотрел код, с пином почти понятно, но начинать все равно надо с уровня, на выходе UART в состоянии покоя всегда высокий уровень
Go to the top of the page
 
+Quote Post
Onkel
сообщение Mar 1 2013, 18:26
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 708
Регистрация: 8-05-11
Из: Чг
Пользователь №: 64 861



Цитата(Tahoe @ Mar 1 2013, 20:24) *
Код не смотрел, но для начала, самое элементарное:
- а что есть? как минимум, на ноге Tx должен быть высокий уровень
- AF? Remap? да и вообще, у STM32 по сто ног на периферию, неплохо бы указывать номер пина, на котором смотрится сигнал

UPD
посмотрел код, с пином почти понятно, но начинать все равно надо с уровня, на выходе UART в состоянии покоя всегда высокий уровень

usart 1 tx portA9, выставлен как Push pull out
если не делать этому порту pull up, то болтается, т.е. не 1 (как обычно на uart) - а очень похоже на z (помехи ловит ...), если ставлю порту pull up то 1.
Где-то видимо путаница с назначением, в даташите указано для portA pin 9 ставить 0111 (AF7) в регистре GPIOA_FRh.

пы сы нашел эмулятор ардуины на f051, но там вывод на usart 2, не могу пока продраться через хидеры и расковырять, но там GPIOA_AFR для тх usert2 (portA.2) стоит 0001, у меня 7 (0111). Пойду вкуривать, может где erratum есть или я неправильно понял.

пы пы сы
ну один свой лох нашел - для usart нужно alternate включать не AF7, а AF1. Но не выходит ваза пока.

пыпыпы сы - Ну действительно, GPIOA_AFR должен быть не AF7,а AF1.

Сообщение отредактировал Onkel - Mar 2 2013, 06:45
Go to the top of the page
 
+Quote Post

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

 


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


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