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

 
 
> UART2 на STM32F100C4 сплошные глюки :')
Bob176
сообщение Aug 28 2012, 07:50
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 23-01-09
Пользователь №: 43 870




Не могу понять в чём дело.. процессор STM32F100C4 инициализирую при помощи файла STM32_Init.c
пытаюсь принять и передать байты по прерываниям...

принимать удаётся, только все принятые данные почему то смещены на 0х80
т.е. если передается
1 то принимаю 129 (0х81)
2 то принимаю 130 (0х82)
и Т.Д.

а вот передать через прерывание вообще не получается...
точнее .. если не через прерывания, то байт передаётся.. правда данные искажены..
если ставлю галочку в мастере TXE Interrupt Enable , по вообще всё виснет

помогите разобраться



инициализирую теперь так:
Код
                    void USART_configuration(void)
{
  //Включение тактирования
  RCC->APB2ENR |=   RCC_APB2ENR_IOPAEN;                //Тактирование GPIO
  RCC->APB2ENR |=   RCC_APB2ENR_AFIOEN;                //Тактирование альтернативных функций GPIO
  RCC->APB1ENR |=   RCC_APB1ENR_USART2EN;              //Тактирование USART2
  //Конфигурирование PORTA.2 для TX; PORTA.3 для RX
      GPIOA->CRL   &= ~(0xFFUL  << 8);                      // Clear PA2, PA3
      GPIOA->CRL   |=  (0x0BUL  << 8);                      // USART2 Tx (PA2)  alternate output push-pull
      GPIOA->CRL   |=  (0x04UL  << 12);                     // USART2 Rx (PA3)  input floating

  //Задание режима работы
  USART2->BRR   =   0x0341;                            //Cкорость обмена 9600 бод
  USART2->CR1  &=  ~USART_CR1_M;                       //8 бит данных
  USART2->CR2  &=  ~USART_CR2_STOP;                    //Предочистка числа стоп-битов
  USART2->CR2  |=   USART_CR2_STOP_0;                  //Количество стоп-битов: 2
  //Управление работой
  USART2->CR1  |=   USART_CR1_UE;                      //Включение модуля USART2
  USART2->CR1  |=   USART_CR1_TE;                      //Включение передатчика
  USART2->CR1  |=   USART_CR1_RE;                      //Включение приемника
  //Разрешить прерывания
  //NVIC_EnableIRQ (USART2_IRQn);                        //Прерывания USART2
  // USART2->CR1  |= USART_CR1_TCIE;                      //Прерывание по завершении передачи
  USART2->CR1  |= USART_CR1_RXNEIE;                    //Прерывание по завершении приема
NVIC->ISER[1]  = (1 << (USART2_IRQn & 0x1F));   // enable interrupt

  USART_ITConfig(USART2, USART_IT_TC, DISABLE);
  USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);


прерывание

Код
           void USART2_IRQHandler(void)
{                  
  volatile unsigned int IIR;
    
       IIR = USART2->SR;

if(IIR & USART_IT_RXNE)  
   {
   USART2->SR &= ~USART_IT_RXNE;              // clear interrupt
    
        if(usart2.rxcnt>(BUF_SZ-2))    usart2.rxcnt=0;
              
    usart2.buffer[usart2.rxcnt++] =  USART_ReceiveData (USART2);

                  
        usart2.delay=0;

if(usart2.rxcnt>7)usart2.rxgap=1;       // принял всю посылку
    }


ф-я маin

Код
stm32_Init ();       // STM32 setup

USART_configuration();
while (1)
  {      
    if(usart2.rxgap==1)                        
      {        
        //   if (usart2.buffer[0]==129)
          // {      
                GPIOB->BSRR = GPIO_Pin_1; // передача        
    
//       rx_Data=usart2.buffer[1];


        //USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);
        // USART_ITConfig(USART2, USART_IT_TC, ENABLE);
            Delay(100);
    
            USART_SendData(USART2, 1);

               
       usart2.rxcnt=0;
       usart2.rxtimer=0;
       usart2.delay=0;
       usart2.rxgap=0;
   GPIOB->BRR = GPIO_Pin_1;
      }


приём остался таким же
1 то принимаю 129 (0х81)
2 то принимаю 130 (0х82)
и Т.Д.

а при передаче байта отправляется мусор !!!

и тоже если в конфигурации разрешить
USART2->CR1 |= USART_CR1_TCIE; //Прерывание по завершении передачи
то уже ничего не принимает ... похоже висит.


посоветуйте, что проверить? как ещё настроить?

осциллографом смотрел, битики при передаче бегут rolleyes.gif до ST485 доходят crying.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SSerge
сообщение Aug 28 2012, 09:49
Сообщение #2


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

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Зря Вы в обработчике прерываний USART_IT_RXNE используете, эти ..... его очень оригинально определили.
И он нифига не совпадает ни с USART_SR_RXNE ни с USART_FLAG_RXNE.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
Bob176
сообщение Aug 29 2012, 21:05
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 23-01-09
Пользователь №: 43 870



Цитата(SSerge @ Aug 28 2012, 12:49) *
Зря Вы в обработчике прерываний USART_IT_RXNE используете, эти ..... его очень оригинально определили.
И он нифига не совпадает ни с USART_SR_RXNE ни с USART_FLAG_RXNE.


спасибо, SSerge теперь не зависает, хотя передача пока так и не работает crying.gif

.. разбираюсь дальше...


ну вот laughing.gif уже лучше!!!

данные передаются только ..... как и прежде

передаю 1 - принимаю 129 (0х81)
передаю 2 - принимаю 130 (0х82)
передаю 3 - принимаю 131 (0х83)
...

при передаче
передаю несколько байт значения 129 а принимает терминал то как 129 (0x81), то как 1 (0x80) !!!

что подскажете?

Сообщение отредактировал Bob176 - Aug 29 2012, 21:07
Go to the top of the page
 
+Quote Post
vlad_new
сообщение Aug 29 2012, 23:02
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Цитата(Bob176 @ Aug 30 2012, 01:05) *
данные передаются только ..... как и прежде

передаю 1 - принимаю 129 (0х81)
передаю 2 - принимаю 130 (0х82)
передаю 3 - принимаю 131 (0х83)
...

при передаче
передаю несколько байт значения 129 а принимает терминал то как 129 (0x81), то как 1 (0x80) !!!

что подскажете?


USART2->CR2 |= USART_CR2_STOP_0; //Количество стоп-битов: 2
Как то странно выглядет. Может все же ..._STOP_2 ?
Хотя в ST-эшной библиотеке на F0 все еще прикольней выглядет:
#define USART_StopBits_2 ((uint32_t)USART_CR2_STOP_1)
sm.gif



Сообщение отредактировал vlad_new - Aug 29 2012, 23:39
Go to the top of the page
 
+Quote Post
Bob176
сообщение Aug 30 2012, 06:36
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 23-01-09
Пользователь №: 43 870



Цитата(vlad_new @ Aug 30 2012, 02:02) *
#define USART_StopBits_2 ((uint32_t)USART_CR2_STOP_1)

biggrin.gif biggrin.gif biggrin.gif

вечером проверю, хотя... думаю дело не в этом. Надо посмотреть подтяжку у TX & RX
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Bob176   UART2 на STM32F100C4 сплошные глюки :')   Aug 28 2012, 07:50
- - hatchet   Попробуйте настроить UART через стандартную stm...   Aug 28 2012, 08:26
|- - Bob176   мнда... и всё же паритет!!! всем...   Aug 30 2012, 18:18
- - PoReX   Вы там случаем контролем четности не балуетесь? А ...   Aug 28 2012, 13:31
|- - Bob176   Цитата(PoReX @ Aug 28 2012, 17:31) Вы там...   Aug 28 2012, 13:49
- - Bob176   Ну что же помоему до меня дошло я тактирую...   Aug 29 2012, 05:28
|- - scifi   Цитата(Bob176 @ Aug 29 2012, 09:28) я так...   Aug 29 2012, 05:42
||- - Bob176   Цитата(scifi @ Aug 29 2012, 08:42) Тактир...   Aug 29 2012, 08:32
||- - scifi   Цитата(Bob176 @ Aug 29 2012, 12:32) может...   Aug 29 2012, 09:16
||- - Bob176   Цитата(scifi @ Aug 29 2012, 12:16) Пожалу...   Aug 29 2012, 11:59
||- - scifi   Цитата(Bob176 @ Aug 29 2012, 15:59) может...   Aug 29 2012, 12:33
||- - Bob176   Цитата(scifi @ Aug 29 2012, 15:33) У меня...   Aug 29 2012, 13:21
|- - _Pasha   Цитата(Bob176 @ Aug 29 2012, 08:28) у мен...   Aug 29 2012, 06:24
- - spectral1989   какой терминал и все ли там правильно стоит? baudr...   Aug 29 2012, 06:03
- - ViKo   Для scifi У вас в коде есть строчка (void)USART_D...   Aug 29 2012, 12:50
|- - scifi   Цитата(ViKo @ Aug 29 2012, 16:50) У вас в...   Aug 29 2012, 13:40
|- - ViKo   Цитата(scifi @ Aug 29 2012, 16:40) Кратко...   Aug 29 2012, 14:39
- - sidy   Т.е. если Вы находитесь в режиме передачи, но что-...   Aug 29 2012, 14:20
|- - scifi   Цитата(sidy @ Aug 29 2012, 18:20) Т.е. ес...   Aug 29 2012, 14:26
- - Bob176   ещё одна проблемка нарисовалась... до скорости ...   Sep 17 2012, 18:59
- - Сергей Борщ   QUOTE (Bob176 @ Sep 17 2012, 21:59) где к...   Sep 17 2012, 19:04
- - _Pasha   Цитата(Bob176 @ Sep 17 2012, 21:59) до ск...   Sep 17 2012, 19:06
|- - Bob176   Цитата(_Pasha @ Sep 17 2012, 23:06) импул...   Sep 18 2012, 10:06
|- - DmitryM   Цитата(Bob176 @ Sep 18 2012, 14:06) оптоп...   Sep 18 2012, 10:16
|- - Bob176   Цитата(DmitryM @ Sep 18 2012, 14:16) А ск...   Sep 18 2012, 11:05
|- - MBR   Цитата(Bob176 @ Sep 18 2012, 15:05) мне и...   Sep 18 2012, 11:34
||- - Bob176   Цитата(MBR @ Sep 18 2012, 15:34) Ну, не х...   Sep 18 2012, 12:20
||- - scifi   Цитата(Bob176 @ Sep 18 2012, 16:20) или н...   Sep 18 2012, 12:44
|||- - Bob176   Цитата(scifi @ Sep 18 2012, 16:44) Есть и...   Sep 19 2012, 11:12
|||- - DmitryM   Цитата(Bob176 @ Sep 19 2012, 15:12) В дан...   Sep 19 2012, 13:19
|||- - Bob176   Цитата(DmitryM @ Sep 19 2012, 17:19) А в ...   Sep 19 2012, 16:15
|||- - Bob176   ну всё, разобрался! передавал один ли...   Sep 19 2012, 17:46
||- - MBR   Цитата(Bob176 @ Sep 18 2012, 16:20) в нач...   Sep 18 2012, 12:56
|- - DmitryM   Цитата(Bob176 @ Sep 18 2012, 15:05) оптоп...   Sep 18 2012, 16:44
- - MBR   Цитата(Bob176 @ Sep 17 2012, 22:59) может...   Sep 18 2012, 10:39


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

 


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


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