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

 
 
> STM32L4 прерывания от UART. Закипел.
Димон Безпарольн...
сообщение May 11 2016, 08:05
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Пишу код под Nucleo L476. Кубом. И вручную. Результат тот же. Поднял UART1. UART работает. Но прерываний нет. Ни в коде от Куба ни в моем коде.
Вручную настраивал так:
Код
    USART1->CR1 =    1<<7 |                        //Bit 7 TXEIE: interrupt enable
                    1<<6 |                        //Bit 6 TCIE: Transmission complete interrupt enable
                    1<<5 |                        //Bit 5 RXNEIE: RXNE interrupt enable
                    1<<3 |                        //Bit 3 TE: Transmitter enable
                    1<<2 |                        //Bit 2 RE: Receiver enable
                    1<<0;                         //Bit 0 UE: USART enable
    USART1->CR2 =    1<<11;                         //Bit 11 CLKEN: Clock enable
    USART1->BRR =     0x271;                        //Tx/Rx baud =     f CK / BRR.  Oversampling by 16


Если выполнить макрос, разрешающий 37-е прерывание:
Код
NVIC->ISER[(((uint32_t)(int32_t)37) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)37) & 0x1FUL));


То в моем варианте все виснет. Точно такой же макрос с параметром 37 есть в коде от Куба. Но он не вешает систему. Прерываний просто нет. И да, прерывания от SYSTIC работают в обоих случаях.
Мож кто подскажет в чем дело или примерчик рабочий... Хотя под L476 я мало чего нахожу в Сети.


Сообщение отредактировал Димон Безпарольный - May 11 2016, 08:06
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Димон Безпарольн...
сообщение May 13 2016, 13:02
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Чертов Куб. Пытался SPI поднять. Поднял блин. В коде не нашел где конфигурируются пины SPI.

Здесь:
Код
  hspi2.Instance = SPI2;
  hspi2.Init.Mode = SPI_MODE_MASTER;
  hspi2.Init.Direction = SPI_DIRECTION_2LINES;
  hspi2.Init.DataSize = SPI_DATASIZE_9BIT;
  hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi2.Init.NSS = SPI_NSS_HARD_OUTPUT;
  hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
  hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi2.Init.CRCPolynomial = 7;
  hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
  HAL_SPI_Init(&hspi2);


нет.
В MX_GPIO_Init тоже нет.
Go to the top of the page
 
+Quote Post
Aleksandr Barano...
сообщение May 13 2016, 14:10
Сообщение #3


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

Группа: Участник
Сообщений: 169
Регистрация: 31-08-05
Из: New York
Пользователь №: 8 118



Цитата(Димон Безпарольный @ May 13 2016, 09:02) *
Чертов Куб. Пытался SPI поднять. Поднял блин. В коде не нашел где конфигурируются пины SPI.


А так не получится?
Код
   //PB10: SPI2_CLK, PB14: SPI2_MISO, PB15: SPI2_MOSI
  GPIO_InitStructure.Pin = GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15;
  GPIO_InitStructure.Alternate = GPIO_AF5_SPI2;
  GPIO_InitStructure.Mode  = GPIO_MODE_AF_PP;
  GPIO_InitStructure.Speed = GPIO_SPEED_MEDIUM,
  GPIO_InitStructure.Pull  = GPIO_NOPULL,
  GPIO_Init(GPIOB, &GPIO_InitStructure);


PS. Вот, специально куб запустил для эксперимента:

Код
void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi){
  GPIO_InitTypeDef GPIO_InitStruct;
  if(hspi->Instance==SPI1)
  {
    /* Peripheral clock enable */
    __SPI1_CLK_ENABLE();
  
  /**SPI1 GPIO Configuration  
  PA5   ------> SPI1_SCK
  PA6   ------> SPI1_MISO
  PA7   ------> SPI1_MOSI
  */
    GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  }
}

void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi){
  if(hspi->Instance==SPI1)
  {
    /* Peripheral clock disable */
    __SPI1_CLK_DISABLE();
  
  /**SPI1 GPIO Configuration  
  PA5   ------> SPI1_SCK
  PA6   ------> SPI1_MISO
  PA7   ------> SPI1_MOSI
  */
    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);

  }
}


Сообщение отредактировал Aleksandr Baranov - May 13 2016, 14:16


--------------------
ASB
Go to the top of the page
 
+Quote Post
Димон Безпарольн...
сообщение May 13 2016, 14:57
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Цитата(Aleksandr Baranov @ May 13 2016, 17:10) *
А так не получится?
Код
   //PB10: SPI2_CLK, PB14: SPI2_MISO, PB15: SPI2_MOSI
  GPIO_InitStructure.Pin = GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15;
  GPIO_InitStructure.Alternate = GPIO_AF5_SPI2;
  GPIO_InitStructure.Mode  = GPIO_MODE_AF_PP;
  GPIO_InitStructure.Speed = GPIO_SPEED_MEDIUM,
  GPIO_InitStructure.Pull  = GPIO_NOPULL,
  GPIO_Init(GPIOB, &GPIO_InitStructure);


PS. Вот, специально куб запустил для эксперимента:

У меня нет функции HAL_SPI_MspDeInit. Только пустой ее вариант со слабым связыванием.

Не получается почему - то даже вот так:

Код
  GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_12;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  

  GPIO_InitStruct.Pin = GPIO_PIN_3;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);


Выводы остаются почему - то висячими. Я нихрена не понимаю. Но если их назначть как выходные (01), то ими можно повертеть. Только SPI блок ими вертеть не хочет.
Я и сам пробовал - результат тоот же!

Код
    RCC->APB1ENR1 |= 1<<14;                    //Тактирование SPI2 стр. 228
    for (i = 0; i < 30000; i++ ){};
    RCC->AHB2ENR |= RCC_AHB2ENR_GPIOBEN;    //Разрешить тактирование GPIOB
    for (i = 0; i < 30000; i++ ){};
    RCC->AHB2ENR |= RCC_AHB2ENR_GPIOCEN;    //Разрешить тактирование GPIOC
    for (i = 0; i < 30000; i++ ){};
    GPIOB->MODER =     (2<<20)|                //PB10 - альтернативная функция SPI2_SCK
                    (2<<24)|                //PB12 - альтернативная функция SPI2_NSS
                    (1<<26);                 //PB13 - Программный CS push pull режим
    GPIOC->MODER =     (2<<6);                    //PC3 - альтернативная функция SPI2_MOSI
    GPIOB->AFR[1] = 5<<8|                    //Альтернативная функция 5 для PB10 стр. 268
                    5<<16;                    //Альтернативная функция 5 для PB12
    GPIOC->AFR[0] = 5<<12;                    //Альтернативная функция 5 для PC3

//PB10 = SPI2_SCK = AF5
//PB12 = SPI2_NSS = AF5
//PB13 = Soft NSS output push pull.
//PC3 = SPI2_MOSI = AF5

    SPI2->CR1 = 0<<0|    //Bit 0 CPHA: Clock phase
                0<<1|    //Bit1 CPOL: Clock polarity
                1<<2|    //Bit 2 MSTR: Master selection
                7<<3|    //Bits 5:3 BR[2:0]: Baud rate control 000b=2,001b=4,010b=8,011b=16,100b=32,101b=64,110b=128,111b=256
                1<<6|    //Bit 6 SPE: SPI enable
                0<<7|    //Bit 7 LSBFIRST: Frame format 0-MSB First
                0<<8|    //Bit 8 SSI: Internal slave select
                0<<9|    //Bit 9 SSM: Software slave management
                0<<10|    //Bit 10 RXONLY: Receive only mode enabled
                0<<11|    //Bit 11 CRCL: CRC length
                0<<12|    //Bit 12 CRCNEXT: Transmit CRC next
                0<<13|    //Bit 13 CRCEN: Hardware CRC calculation enable
                1<<14|    //Bit 14 BIDIOE: Output enable in bidirectional mode
                0<<15;    //Bit 15 BIDIMODE: Bidirectional data mode enable
    SPI2->CR2 = 0<<0|    //RXDMAEN: Rx buffer DMA enable
                0<<1|    //Bit 1 TXDMAEN: Tx buffer DMA enable
                1<<2|    //Bit 2 SSOE: SS output enable
                1<<3|    //Bit 3 NSSP: NSS pulse management
                0<<4|    //Bit 4 FRF: Frame format 0: SPI Motorola mode, 1 SPI TI mode
                0<<5|    //Bit 5 ERRIE: Error interrupt enable
                0<<6|    //Bit 6 RXNEIE: RX buffer not empty interrupt enable
                0<<7|    //Bit 7 TXEIE: Tx buffer empty interrupt enable
                8<<8|    //Bits 11:8 DS [3:0]: Data size. 8 - 9бит
                0<<12|    //Bit 12 FRXTH: FIFO reception threshold
                0<<13|    //Bit 13 LDMA_RX: Last DMA transfer for reception
                0<<14;    //Bit 14 LDMA_TX: Last DMA transfer for transmission


Сообщение отредактировал Димон Безпарольный - May 13 2016, 15:29
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Димон Безпарольный   STM32L4 прерывания от UART. Закипел.   May 11 2016, 08:05
- - Сергей Борщ   QUOTE (Димон Безпарольный @ May 11 2016, 11...   May 11 2016, 08:28
|- - Димон Безпарольный   Цитата(Сергей Борщ @ May 11 2016, 11:28) ...   May 11 2016, 08:57
|- - Сергей Борщ   QUOTE (Димон Безпарольный @ May 11 2016, 11...   May 11 2016, 09:15
||- - Димон Безпарольный   Цитата(Сергей Борщ @ May 11 2016, 12:15) ...   May 11 2016, 09:43
||- - KnightIgor   Цитата(Димон Безпарольный @ May 11 2016, 10...   May 12 2016, 09:35
|- - scifi   Цитата(Димон Безпарольный @ May 11 2016, 11...   May 11 2016, 09:38
- - Lagman   А такая команда отправляет буфер? КодHAL_UART_Tran...   May 11 2016, 20:31
|- - Димон Безпарольный   Цитата(Lagman @ May 11 2016, 23:31) А так...   May 11 2016, 22:09
- - x893   То есть они весь мир обманули с примером UART_TwoB...   May 12 2016, 06:42
- - ViKo   Забейте на Куб. Он не для работы. А для демонстрац...   May 12 2016, 09:03
|- - Димон Безпарольный   Цитата(ViKo @ May 12 2016, 12:03) Забейте...   May 12 2016, 11:18
|- - Tanya   Цитата(Димон Безпарольный @ May 12 2016, 14...   May 12 2016, 13:50
||- - Димон Безпарольный   Цитата(Tanya @ May 12 2016, 16:50) Работа...   May 12 2016, 14:41
||- - Tanya   Цитата(Димон Безпарольный @ May 12 2016, 17...   May 12 2016, 16:09
|- - MrYuran   Цитата(Димон Безпарольный @ May 12 2016, 14...   May 12 2016, 15:48
|- - Димон Безпарольный   Цитата(MrYuran @ May 12 2016, 18:48) Вот ...   May 12 2016, 16:47
||- - x893   Цитата(Димон Безпарольный @ May 12 2016, 19...   May 12 2016, 18:13
||- - scifi   Цитата(x893 @ May 12 2016, 21:13) Овладел...   May 12 2016, 18:20
||- - Димон Безпарольный   Цитата(x893 @ May 12 2016, 21:13) Овладел...   May 12 2016, 18:23
||- - x893   Цитата(Димон Безпарольный @ May 12 2016, 21...   May 12 2016, 19:51
|- - AlexKLm   Цитата(MrYuran @ May 12 2016, 18:48) Вот ...   Apr 11 2017, 10:10
|- - jcxz   Цитата(AlexKLm @ Apr 11 2017, 12:10) vsnp...   Apr 11 2017, 10:54
|- - SSerge   Цитата(jcxz @ Apr 11 2017, 17:54) Вместо ...   Apr 11 2017, 14:23
|- - jcxz   Цитата(SSerge @ Apr 11 2017, 16:23) А Вы ...   Apr 11 2017, 15:00
- - Димон Безпарольный   В общем в Кейле это работает: Кодstruct __FILE {i...   May 12 2016, 20:38
- - Lagman   Не знаю что у вас там за проблемы, но если использ...   May 14 2016, 07:59
- - x893   Нормально Куб генерирует всё. Надо птички/галки ст...   May 14 2016, 08:12
- - Lagman   Может еще вот это мешает. Некоторые контроллеры им...   May 14 2016, 08:44
|- - Димон Безпарольный   Цитата(Lagman @ May 14 2016, 11:44) Для S...   May 14 2016, 17:28
|- - Lagman   Цитата(Димон Безпарольный @ May 14 2016, 20...   May 14 2016, 19:12
|- - Димон Безпарольный   Цитата(Lagman @ May 14 2016, 22:12) Опиши...   May 14 2016, 19:40
|- - Lagman   Цитата(Димон Безпарольный @ May 14 2016, 22...   May 14 2016, 21:03
|- - Димон Безпарольный   Цитата(Lagman @ May 15 2016, 00:03) Т.е. ...   May 15 2016, 16:04
- - SSerge   Цитата(Димон Безпарольный @ May 11 2016, 15...   May 14 2016, 09:25
- - Димон Безпарольный   Бит 2 не ставится! Читаю значение i=SPI2->C...   May 14 2016, 18:36
- - Димон Безпарольный   Я утверждал что Куб генерит нерабочий код. Вот он ...   May 16 2016, 08:44
- - Lagman   CODEvoid HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) ...   May 16 2016, 15:20
- - Димон Безпарольный   Заработало. Ну и каша! Чтобы запрограммироват...   May 17 2016, 12:14
- - Димон Безпарольный   Вот некоторый опыт работы с Кубом: КодКуб в 90% г...   Jun 11 2016, 20:08
- - x893   Как то сложно у вас всё. И кубом и SPL и регистрам...   Jun 11 2016, 20:16
- - Димон Безпарольный   Камешки наверно разные. Для одних все отлажено, дл...   Jun 11 2016, 20:27
- - Genadi Zawidowski   ЦитатаПередаю один байт - вываоивается 16 циклов Э...   Jun 11 2016, 21:07
- - romas2010   Ребят,при всем уважении к автору поста,но это все ...   Jun 11 2016, 21:56
- - Димон Безпарольный   UART я давно уже оседлал. Проблем нет. Да, неправи...   Jun 12 2016, 07:10
- - SasaVitebsk   Судя по последним темам. Раньше начинали с AVR или...   Apr 11 2017, 13:03
- - AlexKLm   Вот первый результат, когда удача улыбнулась: __...   Apr 11 2017, 19:06


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

 


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


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