|
0 / 0 / 0
Регистрация: 03.05.2012
Сообщений: 33
|
||||||||||||||||
STM32F4 USART Tx + DMA02.12.2012, 17:52. Показов 28483. Ответов 7
Метки нет (Все метки)
Доброго времени суток!
Инициализация ДМА:
Вопрос следующий... Когда при инициализации ДМА пишу: DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; ничего не передается. А в случае DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; Передача происходит, но как понимаете, много-много раз, что совсем не нужно... ДМА на прием:
Оба USORT(2,3) работают без ДМА адекватно и без проблем. Проблема с передачей по ДМА. В чем может быть проблема и как исправить?
0
|
||||||||||||||||
| 02.12.2012, 17:52 | |
|
Ответы с готовыми решениями:
7
Stm32f4 HAL DMA USART STM32F4 + USB FLASH + DMA + USART + CAN + DSP + FreeRTOS ? USART + DMA |
|
0 / 0 / 0
Регистрация: 10.03.2012
Сообщений: 1,110
|
|
| 02.12.2012, 18:56 | |
|
у меня работал этот пример. Переклепал под Кайль.
http://www.mykrosontroller.net/topys/251293 Autor: Moritz M. (avrprogger) Datum: 24.04.2012 21:12
0
|
|
|
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 34
|
|||||||||||||||||||||
| 05.12.2012, 01:21 | |||||||||||||||||||||
|
Естественно. Вы сначала инициализируете DMA, показываете откуда брать данные и куда их класть, и тут же включаете. Он ничего не выводит т.к. буфер пуст. Попробуйте сначала заполнить буфер, а уже потом включить его передачу. Вот рабочий код:
Инициализация USORT2:
0
|
|||||||||||||||||||||
|
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 24
|
|||||||||||
| 23.04.2013, 00:16 | |||||||||||
Плата STM32F4Dyscovery В обычном режиме все принимается! Помогите кто знает пожалуйста!
0
|
|||||||||||
|
Piryphiry
|
|
| 04.05.2013, 21:13 | |
|
Помогите плииз, не могу уйти в прерывание ни по одному событию, хотя флаги выставляются HTIF1 TCIF. Проект для STM32T-Dyscovery
#include "stm32l1xx.h" #include "stm32l1xx_gpio.h" #define ADC1_DR_ADDRESS 0x40012458 #define MEMORY_ARRAY_ADDRESS 0x20000000; #define Led_Port GPIOB #define Led_Blue GPIO_Pin_6 #define Led_Green GPIO_Pin_7 #define Led_High(a,b) a -> BSRRL = b #define Led_Low(a,b) a -> BSRRH = b void SetNVIC(void); void adc_init(void); void dma_init(void); void InitUART(void); void DMA1_Channel1_IRQHomdler(void); void Delay(uint32_t time); int main() { SetNVIC(); adc_init(); dma_init(); InitUART(); ADC1->CR2 |= ADC_CR2_SWSTART; DMA1_Channel1->CCR |= DMA_CCR1_EN; while(1) { Led_High(Led_Port,Led_Blue); Delay(0x1FFFF); Led_Low(Led_Port,Led_Blue); Delay(0x1FFFF); Led_High(Led_Port,Led_Green); Delay(0x1FFFF); Led_Low(Led_Port,Led_Green); Delay(0x1FFFF); } } void adc_init(void) { RCC->AHBENR |= RCC_AHBENR_GPIOAEN; RCC->AHBENR |= RCC_AHBENR_GPIOBEN; GPIOA->MODER |= GPIO_MODER_MODER15; GPIOA->PUPDR &= ~GPIO_PUPDR_PUPDR5; GPIOB->MODER |= GPIO_MODER_MODER6_0; GPIOB->OTYPER &= ~GPIO_OTYPER_OT_6; GPIOA->PUPDR &= ~GPIO_PUPDR_PUPDR6; GPIOB->MODER |= GPIO_MODER_MODER7_0; GPIOB->OTYPER &= ~GPIO_OTYPER_OT_7; GPIOA->PUPDR &= ~GPIO_PUPDR_PUPDR7; RCC->CR |= RCC_CR_HSION; while(!(RCC->CR&RCC_CR_HSIRDY)); RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; ADC1->SQR1 &= ~ADC_SQR1_L; ADC1->SQR5 |= (ADC_SQR5_SQ1_0 | ADC_SQR5_SQ1_2); ADC1->CR1 |= ADC_CR1_SCAN; ADC1->CR2 |= ADC_CR2_CONT; ADC1->CR2 |= ADC_CR2_DELS_0; ADC1->CR1 &= ~ADC_CR1_RES; ADC1->CR2 &= ~ADC_CR2_ALIGN; ADC1->CR2 |= ADC_CR2_DMA; ADC1->CR2 |= ADC_CR2_ADON; while(!(ADC1->SR&ADC_SR_ADONS)); } void dma_init(void) { RCC->AHBENR |= RCC_AHBENR_DMA1EN; DMA1_Channel1->CPOR |= ADC1_DR_ADDRESS; DMA1_Channel1->CMAR |= MEMORY_ARRAY_ADDRESS; DMA1_Channel1->CCR &= ~DMA_CCR1_DIR; DMA1_Channel1->CNDTR = 10; DMA1_Channel1->CCR &= ~DMA_CCR1_PINC; DMA1_Channel1->CCR |= DMA_CCR1_MINC; DMA1_Channel1->CCR |= DMA_CCR1_PSIZE_0; DMA1_Channel1->CCR |= DMA_CCR1_MSIZE_0; DMA1_Channel1->CCR |= DMA_CCR1_PL; DMA1_Channel1->CCR |= DMA_CCR1_TCIE; DMA1_Channel1->CCR |= DMA_CCR1_HTIE; DMA1->IFCR |= DMA_IFCR_CGIF1; } void SetNVIC(void) { NVIC_EnableIRQ(DMA2_Channel1_IRQn); NVIC_SetPriority(DMA2_Channel1_IRQn,1); } void InitUART() { RCC->CR |= RCC_CR_HSION; while(!(RCC_CR_HSIRDY)); RCC->CFGR |= RCC_CFGR_SW_HSI; RCC->CR &= ~RCC_CR_MSION; RCC->AHBENR |= RCC_AHBENR_GPIOAEN; GPIOA->MODER |= GPIO_MODER_MODER9_1; GPIOA->OTYPER &= ~GPIO_OTYPER_OT_9; GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR9); GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR9; GPIOA->AFR[1] |= (0x7<<4); RCC->APB2ENR |= RCC_APB2ENR_USORT1EN; USORT1->CR1 |= USORT_CR1_UE; USORT1->CR1 &= ~USORT_CR1_M; USORT1->CR2 &= ~USORT_CR2_STOP; USORT1->BRR = 0x683; USORT1->CR1 |= USORT_CR1_TE; } void Delay(uint32_t time) { while(time>>0) { --time; } } void DMA1_Channel1_IRQHomdler(void) { if (DMA1->ISR & DMA_ISR_HTIF1) { Led_High(Led_Port,Led_Blue); Delay(0x1FFFF); Led_Low(Led_Port,Led_Blue); Delay(0x1FFFF); Led_High(Led_Port,Led_Green); Delay(0x1FFFF); Led_Low(Led_Port,Led_Green); Delay(0x1FFFF); } if (DMA1->ISR & DMA_ISR_TCIF1) { Led_High(Led_Port,Led_Green); Delay(0x1FFFF); Led_Low(Led_Port,Led_Green); Delay(0x1FFFF); } } |
|
|
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
|
||
| 05.05.2013, 18:04 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 08.02.2012
Сообщений: 50
|
||||||||||||||||
| 21.10.2013, 22:29 | ||||||||||||||||
|
Доброе время суток.
Потребовалось передавать данные в USORT через DMA (половина буфера пишется, вторая отправляется) При проверке получил странные результаты, DMA работает только с первой половиной буфера, хотя прерывания DMA_IT_HTIF7 и DMA_IT_TCIF7 работают. Если убрать DMA_Cmd(DMA2_Stream7, DISABLE); из ветки DMA_IT_HTIF7 то передается весь буфер main
0
|
||||||||||||||||
|
0 / 0 / 0
Регистрация: 08.02.2012
Сообщений: 50
|
|
| 22.10.2013, 21:58 | |
|
?
0
|
|
| 22.10.2013, 21:58 | |
|
Помогаю со студенческими работами здесь
8
usart rx dma Usart Dma cmsis STM32F030C8 USART+DMA RX TX USART DMA IDLE DMA и USART STM32f3discovery Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|