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

 
 
> STM32 отправка в USART по DMA в момент заполнения
Balabes
сообщение Aug 20 2014, 10:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 8-07-13
Пользователь №: 77 442



Здравствуйте!
Подскажите как реализовать отправку в усарт содержимое буффера как только в нем что то появится?
Допустим: есть uint8_t RXBuf, и как только в него записывается байт, надо переслать его по усарту.
Код
case 5:
{
        write_command_reg(0x05);
    STATE++;
    break;
}
case 6:
{
    if ( GPIO_ReadInputDataBit(GPIOA, IRQN) == 0) STATE++;
    break;
}
case 7:
{
    StatusReg = read_status_reg();
    if ((StatusReg & 0xD0) == 0xC0) STATE++;
    break;
}
case 8:
{
    RXBuf = read_data_reg();
    STATE++;
    break;
}
case 9:
{
    STATE = 5;
    break;
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Genadi Zawidowsk...
сообщение Aug 20 2014, 22:25
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Вот работающий код. Скорости и форматы передачи не здесь - настраиваются ДО вызова stream_initialize.
Скорость передачи по COM должна быть больше скорости заполнения.

CODE
#define DMAUSART1BUFFSIZE8 128

static uint_fast8_t txbuffphase;
static unsigned txbufflevel;
static uint8_t txbuff [2] [DMAUSART1BUFFSIZE8];

void stream_putchar(uint_fast8_t c)
{
txbuff [txbuffphase] [txbufflevel] = c;
if (++ txbufflevel >= DMAUSART1BUFFSIZE8)
{
DMA2->HIFCR = DMA_HIFCR_CTCIF7; // сбросил флаг от Stream7 - DMA готово начинать с начала
// Запуск передачи заполненного буфера
DMA2_Stream7->M0AR = (uint32_t) & txbuff [txbuffphase] [0];
DMA2_Stream7->CR |= DMA_SxCR_EN; // перезапуск DMA
// Буфер заполнился - переключаемся на следующий буфер
txbuffphase = ! txbuffphase;
txbufflevel = 0;
}
}

// Инициализация DMA по передаче USART1
void stream_initialize(void)
{

/* USART1_TX - Stream7, Channel4 */
/* DMA для передачи по USART1 */
RCC->AHB1ENR |= RCC_AHB1ENR_DMA2EN; // включил DMA2
__DSB();

DMA2_Stream7->PAR = (uint32_t) & USART1->DR;
DMA2_Stream7->FCR &= ~ DMA_SxFCR_DMDIS; // use direct mode
DMA2_Stream7->CR =
(0 * DMA_SxCR_MBURST_0) | // 0: single transfer
(0 * DMA_SxCR_PBURST_0) | // 0: single transfer
(4 * DMA_SxCR_CHSEL_0) | //канал 4
(1 * DMA_SxCR_DIR_0) | //направление - память - периферия
(1 * DMA_SxCR_MINC) | //инкремент памяти
(0 * DMA_SxCR_MSIZE_0) | //длина в памяти - 8 bit
(0 * DMA_SxCR_PSIZE_0) | //длина в USART_DR - 8 bit
(0 * DMA_SxCR_CIRC) | //циклический режим не требуется при DBM
(2 * DMA_SxCR_PL_0) |
(0 * DMA_SxCR_CT) | // M0AR selected
(0 * DMA_SxCR_DBM) | // double buffer mode seelcted
0;

DMA2_Stream7->NDTR = (DMA2_Stream7->NDTR & ~ DMA_SxNDT) |
(DMAUSART1BUFFSIZE8 * DMA_SxNDT_0) |
0;

USART1->CR3 |= USART_CR3_DMAT; /*!< DMA Enable Transmitter */


}


Сообщение отредактировал IgorKossak - Aug 21 2014, 07:58
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Balabes   STM32 отправка в USART по DMA в момент заполнения   Aug 20 2014, 10:41
- - scifi   Вот так, разве нет? Кодcase 8: { RXBuf = read...   Aug 20 2014, 11:20
- - Golikov A.   надо еще проверить что отправить можно и есть что ...   Aug 20 2014, 11:27
- - Balabes   хочется что бы контроллер этим не занимался и данн...   Aug 20 2014, 11:32
|- - Integro   Цитата(Balabes @ Aug 20 2014, 14:32) хоче...   Aug 20 2014, 15:14
- - Golikov A.   чтобы запустить ДМА грубо надо заполнить структуру...   Aug 20 2014, 15:17
- - Balabes   модем это FX919 - и пока пытаюсь реализовать так н...   Aug 21 2014, 05:09
- - Golikov A.   так у этого модема параллельная шина. В вашем проц...   Aug 21 2014, 06:21
- - Balabes   как видите вот так КодRXBuf = read_data_reg(...   Aug 21 2014, 07:03
- - Golikov A.   а точно read_data_reg возвращает не хрень? Может ...   Aug 21 2014, 07:44
- - Balabes   с чего бы ей 10 раз прислать что надо, а потом хре...   Aug 21 2014, 07:48
- - Golikov A.   USART_SendSymbol опубликуйте эту функцию... Есть ...   Aug 21 2014, 08:51
- - Balabes   void USART_SendSymbol(USART_TypeDef *USARTx, uint8...   Aug 21 2014, 09:40
- - Golikov A.   мда... библиотеки это круто. то есть вместо взять...   Aug 21 2014, 10:50
|- - Integro   Цитата(Golikov A. @ Aug 21 2014, 13:50) н...   Aug 21 2014, 12:33
- - Golikov A.   я конечно наизусть не помню все реализации уартов ...   Aug 21 2014, 14:51


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

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 08:28
Рейтинг@Mail.ru


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