stm32 DMA + uart

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Встал на лапы
Сообщения: 118
Зарегистрирован: Ср фев 05, 2014 18:54:39

Сообщение jazz393 »

настроил DMA на отправку через UART1 , UART настроен правильно 100%.
Пытаюсь отправить массив из 16 байт, но при этом передается правильно только 1ый элемент, а дальше какой-то мусор
длина слова в памяти - 1 байт, длина слова в периферии тоже 1 байт, сам массив тоже u8 т.е. 1 байт, инкремент памяти включен, но ощущение что DMA просто хаотично закидывает что-то из флеш в DR, при этом если сделать массив u16 или u32, то мусор приобретает достаточно стабильный вид, т.е. повторяется хотя бы, а при u8 он постоянно разный и иногда кол-во передаваемых элементов не 16 а 14 или 15 .....

Код: Выделить всё

void init_dma()
	{
	RCC->AHBENR|=RCC_AHBENR_DMA1EN;
	DMA1_Channel4->CPAR = (uint32_t)&(USART1->DR); 
	DMA1_Channel4->CMAR = (uint32_t)(buffer); // адрес массива
	DMA1_Channel4->CNDTR=16;
	DMA1_Channel4->CCR &= ~(DMA_CCR4_MSIZE_0 | DMA_CCR4_MSIZE_1);
	DMA1_Channel4->CCR &= ~(DMA_CCR4_PSIZE_0 | DMA_CCR4_PSIZE_1);

	DMA1_Channel4->CCR|= DMA_CCR4_PL_0 | DMA_CCR4_PL_1 | DMA_CCR4_DIR;//  | DMA_CCR4_CIRC ;
	DMA1_Channel4->CCR|= DMA_CCR4_MINC;
	DMA1_Channel4->CCR|= DMA_CCR4_EN;
	}
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Проверил - stm32F103CB с этим же кодом все выдает прекрасно.
72МГц - 115200 бод.

USART инитится до этого кода , после инита USART делаю паузу .
Транзакция начинается сразу после

Код: Выделить всё

 DMA1_Channel4->CCR|= DMA_CCR4_EN;
Реклама
Встал на лапы
Сообщения: 118
Зарегистрирован: Ср фев 05, 2014 18:54:39

Сообщение jazz393 »

dosikus писал(а):Проверил - stm32F103CB с этим же кодом все выдает прекрасно.
72МГц - 115200 бод.USART инитится до этого кода , после инита USART делаю паузу .
Транзакция начинается сразу после

Код: Выделить всё

 DMA1_Channel4->CCR|= DMA_CCR4_EN;
хм...не представляю даже почему это так...и в отладчике то не посмотреть что там происходит...
Ответить

Вернуться в «ARM»