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

 
 
> 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
Ответов
Lagman
сообщение May 14 2016, 08:44
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Димон Безпарольн...
сообщение May 14 2016, 17:28
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Lagman
сообщение May 14 2016, 19:12
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Цитата(Димон Безпарольный @ May 14 2016, 20:28) *
Только SPI модуль ими не хочет вертеть. Как только я включаю Alternate Function, все выводы переключаются в третье состояние.

Опишите что Вы хотите получить в принципе, как конфигурируете, в CubeMX, модуль SPI и выводы, и что потом с ними хотите сделать в System Workbench.
Go to the top of the page
 
+Quote Post
Димон Безпарольн...
сообщение May 14 2016, 19:40
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Lagman
сообщение May 14 2016, 21:03
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Цитата(Димон Безпарольный @ May 14 2016, 22:40) *
Я хочу с ним сделать в Кейле.
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.

Т.е. используя Куб и проект который он сгенерировал с использованием HAL, Вы пытаетесь организовать передачу данных игнорируя функции которые заложены для этого в HAL?
Go to the top of the page
 
+Quote Post
Димон Безпарольн...
сообщение May 15 2016, 16:04
Сообщение #7


Знающий
****

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



Цитата(Lagman @ May 15 2016, 00:03) *
Т.е. используя Куб и проект который он сгенерировал с использованием HAL, Вы пытаетесь организовать передачу данных игнорируя функции которые заложены для этого в HAL?

К черту куб и ХАЛ. С тех пор как я увидел что сгенертровал куб, я перестал доверять обоим. Буду вертеть регистрамт пока не пойму в чем дело. Куб генерит нерабочий код. В этом я уже убедился по UART. Написал все ручками с нуля и заработало.

В данном случае сгенерированный кубом код не работает также как и мой. Только нырять в дебри ХАЛА мне лень.

Кстати, те кто программирует камни не понимая что происходит внутри в корне неправы. Я таких программистов на работе спрашивал. Слово "регистр" приводит их в ужас. Толку от таких ноль. Только гонор и поучительный тон.

Сообщение отредактировал Димон Безпарольный - May 16 2016, 05:25
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
- - Димон Безпарольный   Чертов Куб. Пытался 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


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

 


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


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