All streams
Search
Write a publication
Pull to refresh
7
0
Александр @Alekssandr

Электромонтер по ремонту электрооборудования

Send message

Keenetic Hopper SE арт. KN-3812

Keenetic Hopper арт. KN-3811

Вот новые мощные модели на arm с USB3. Vless работает на 500мб точно.

Спасибо за наводку с UART idle, пожалуй это самый оптимальный способ получения данных при заранее не известной длины сообщения. Построил приём в цикличном режиме dma, работает идеально?

Случайно отклонил комментарий по поводу:

	do{
  ...
	} while(0U);

Здесь происходить сброс флага чтением регистров DR и RXNE перед включением запроса DMA. Этот кусок кода я взял из библиотеки HAL, когда изучал как она устроена.

А какие регистры в STM32 не имеют 32 бита?

Да, можно и так, как бы если использовать volatile для структуры, действие спецификатора будет распространяться на все содержимое структуры (нам это и нужно). Если этого не нужно, то можно применить спецификатор volatile к отдельным элементам структуры.

Спасибо, действительно ошибся со сбросом флага.

Ваш вариант конечно выполниться гораздо быстрее, всего 3 инструкции.

 74       	DMA2->HIFCR = (DMA_HIFCR_CDMEIF5|DMA_HIFCR_CHTIF5|DMA_HIFCR_CTCIF5|DMA_HIFCR_CTEIF5);
08026682:   ldr     r3, [pc, #84]   ; (0x80266d8 <UART1_Received_DMA+140>)
08026684:   mov.w   r2, #3840       ; 0xf00
08026688:   str     r2, [r3, #12]

С битовыми полями на одну операцию 4 инструкции + если операции производить по очереди, в данном случае 4 то 4*4 = 16 инструкций. Что гораздо медленнее.

 67       	rDMA2->sHIFCR.CHTIF5  = 1; // Clear Half-transfer interrupt flags
08026652:   ldr     r2, [pc, #132]  ; (0x80266d8 <UART1_Received_DMA+140>)
08026654:   ldr     r3, [r2, #12]
08026656:   orr.w   r3, r3, #1024   ; 0x400
0802665a:   str     r3, [r2, #12]

Согласен, я дополню статью с исходниками.

В CMSIS всё это есть, но не в том виде как это представлено в статье.

Видимо чтоб цикл for не завис в бесконечности при не штатной ситуации.

Information

Rating
Does not participate
Location
Сургут, Тюменская обл. и Ханты-Мансийский АО, Россия
Date of birth
Registered
Activity

Specialization

Embedded Software Engineer
Intern
From 1,000 ₽
Java