|
STM32L4 прерывания от UART. Закипел. |
|
|
|
May 11 2016, 08:05
|
Знающий
   
Группа: Участник
Сообщений: 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
|
|
|
|
|
 |
Ответов
|
May 13 2016, 13:02
|
Знающий
   
Группа: Участник
Сообщений: 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 тоже нет.
|
|
|
|
|
May 13 2016, 14:10
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
May 13 2016, 14:57
|
Знающий
   
Группа: Участник
Сообщений: 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
|
|
|
|
Сообщений в этой теме
Димон Безпарольный 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|