|
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 14 2016, 08:44
|
Знающий
   
Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245

|
Может еще вот это мешает. Некоторые контроллеры имеют функции блокировки изменения конфигурации пинов, для RX например чтобы включить альтернативные функции на ногу, то надо записать определенные битики в определенный регистр, после чего можно переконфигурировать выводы. Для STM32F0 например есть такой регистр "GPIO port configuration lock register". И если вы хотите, после того как Куб сгенерировал код для проекта, в ходе работы поменять функции для пина тогда надо искать как это работает в этом семействе, потому что для F0 написано что если залочить то тогда только до перезагрузки, а Куб может генерирует так что лочит их при инициализации (посмотрел в простом проекте, по умолчанию не лочит). Для L4 в даташите тоже есть такие строчки: Цитата 7.3.6 GPIO locking mechanism It is possible to freeze the GPIO control registers by applying a specific write sequence to the GPIOx_LCKR register. The frozen registers are GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, GPIOx_PUPDR, GPIOx_AFRL and GPIOx_AFRH. В HAL есть такая функция HAL_GPIO_LockPin
|
|
|
|
|
May 14 2016, 17:28
|
Знающий
   
Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247

|
Цитата(Lagman @ May 14 2016, 11:44)  Для STM32F0 например есть такой регистр "GPIO port configuration lock register". И если вы хотите, после того как Куб сгенерировал код для проекта, в ходе работы поменять функции для пина тогда надо искать как это работает в этом семействе, потому что для F0 написано что если залочить то тогда только до перезагрузки, а Куб может генерирует так что лочит их при инициализации (посмотрел в простом проекте, по умолчанию не лочит). Для L4 в даташите тоже есть такие строчки:
В HAL есть такая функция HAL_GPIO_LockPin Есть такой регистр: Цитата the value of this port bit can no longer be modified until the next MCU reset or peripheral reset. Но я спокойно назначаю эти выводы как выходные и также спокойно ими верчу. Только SPI модуль ими не хочет вертеть. Как только я включаю Alternate Function, все выводы переключаются в третье состояние. Цитата(SSerge @ May 14 2016, 12:25)  А зачем во время инициализации разрешать прерывания TXEIE и TCIE ? Зачем прерывание если нечего передавать? Когда потребуется что-то передавать, вот тогда и разрешите TXEIE, а когда возникнет желание узнать что все передаваемые данные, до последнего бита ушли и передавать больше нечего, вот тогда во время записи последнего байта в DR и следует разрешить TCIE. Это если всё руками делать, а если положиться на Куб, то он прерываниями сам рулит.
А CLKEN зачем? CLKEN не нужен. Точно. И с прерываниями Вы правы на все 100. Нужно было срочно сваять кольцевые буфера, printf, плавучку. Не обратил внимание. Цитата(x893 @ May 14 2016, 11:12)  Нормально Куб генерирует всё. Надо птички/галки ставить где надо. И под прерывания генерит. Один минус чуть больше кода получается, но это можно потом пооптимизировать. Вот как раз галочку на прерывание от USART я и поставил. Но прерывания были запрещены. Лажа этот куб. Ручками быстрее получилось.
Сообщение отредактировал Димон Безпарольный - May 14 2016, 17:33
|
|
|
|
|
May 14 2016, 19:40
|
Знающий
   
Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247

|
Цитата(Lagman @ May 14 2016, 22:12)  Опишите что Вы хотите получить в принципе, как конфигурируете, в CubeMX, модуль SPI и выводы, и что потом с ними хотите сделать в System Workbench. Я хочу с ним сделать в Кейле. SPI2. Мастер только, без прерываний, 9 бит, Clock phase = 0, Clock polarity = 0. Внутренний генератор HSE, частота процессора 80МГц(PLL), PA5 - на вывод для мигалки. Скорость SPI не важна. Процессор STM32L476RG Куб конфигурирует SPI выводы так: //PB10 = SPI2_SCK = AF5 //PB12 = SPI2_NSS = AF5 //PC3 = SPI2_MOSI = AF5 Не могу выставить биты 2(MSTR: Master selection) и 6(SPE: SPI enable) - их сбрасывает проклятый MODF даже после первого обращения к SPI - записи в CR1. Код SPI2->CR1 = 0<<0| //Bit 0 CPHA: Clock phase 0<<1| //Bit1 CPOL: Clock polarity 1<<2| //Bit 2 MSTR: Master selection 0<<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 0<<14| //Bit 14 BIDIOE: Output enable in bidirectional mode 0<<15; //Bit 15 BIDIMODE: Bidirectional data mode enable Короче как только разрешаю мастер, сразу выставляется modf. Или по - другому. Можно не разрешать SPI, тогда мастер ставится. Чего - то перестарались господа - навертели хрен знает чего в камень. Почему может ставится этот бит? В документации сказано: Цитата Mode fault occurs when the master device has its internal NSS signal (NSS pin in NSS hardware mode, or SSI bit in NSS software mode) pulled low. This automatically sets the MODF bit. Но выходы на плате я поверял - они в третьем состоянии.
Сообщение отредактировал Димон Безпарольный - May 14 2016, 20:39
|
|
|
|
|
May 15 2016, 16:04
|
Знающий
   
Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247

|
Цитата(Lagman @ May 15 2016, 00:03)  Т.е. используя Куб и проект который он сгенерировал с использованием HAL, Вы пытаетесь организовать передачу данных игнорируя функции которые заложены для этого в HAL? К черту куб и ХАЛ. С тех пор как я увидел что сгенертровал куб, я перестал доверять обоим. Буду вертеть регистрамт пока не пойму в чем дело. Куб генерит нерабочий код. В этом я уже убедился по UART. Написал все ручками с нуля и заработало. В данном случае сгенерированный кубом код не работает также как и мой. Только нырять в дебри ХАЛА мне лень. Кстати, те кто программирует камни не понимая что происходит внутри в корне неправы. Я таких программистов на работе спрашивал. Слово "регистр" приводит их в ужас. Толку от таких ноль. Только гонор и поучительный тон.
Сообщение отредактировал Димон Безпарольный - May 16 2016, 05:25
|
|
|
|
Сообщений в этой теме
Димон Безпарольный 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 Димон Безпарольный Чертов Куб. Пытался SPI поднять. Поднял блин. В ко... May 13 2016, 13:02 Aleksandr Baranov Цитата(Димон Безпарольный @ May 13 2016, 09... May 13 2016, 14:10  Димон Безпарольный Цитата(Aleksandr Baranov @ May 13 2016, 17... May 13 2016, 14:57 Lagman Не знаю что у вас там за проблемы, но если использ... May 14 2016, 07:59 x893 Нормально Куб генерирует всё. Надо птички/галки ст... May 14 2016, 08:12 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
|
|
|