Перейти к содержанию
    

#Eugene

Участник
  • Постов

    19
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о #Eugene

  • Звание
    Участник
    Участник

Посетители профиля

6 986 просмотров профиля
  1. Товарищ, вы не в первый раз даёте бестолковые ответы. Сейчас зачем-то про кубодерство упомянули, хотя CubeMX я никогда не использовал. Впрочем - можно и кубом пользоваться, но проблем там придется решать гораздо больше. Конечно, при работе с вашим устройством не возникнет ситуации, когда пользователь закроет COM порт во время передачи данных от устройства на ПК (это сарказм, если не догадались). Кстати вариант USB VCP по приведенной в первом посте ссылке - вполне стабильно работает "из коробки", чего не скажешь про CubeMX и версию библиотеки от 2018 года с сайта ST.
  2. Понял, спасибо! Неожиданная особенность.
  3. jcxz, Что значит зачем? Это нормальная ситуация, которая встречается на практике и этот случай нужно правильно обработать. В библиотеке от ST эта ситуация приводит к блокировке на записи в буфер. Вопрос в том - как именно поступить в этом случае.
  4. Привет! Использую USB OTG на плате F4-Discovery в режиме виртуального COM порта ( https://stm32f4-discovery.net/2014/08/library-24-virtual-com-port-vcp-stm32f4xx/ ) Если попытаться что-то передать в сторону ПК, когда COM порт закрыт - программа зависает на записи в буфер. Вопрос: есть ли варианты убрать эту блокировку? Или только на RTOS переходить?
  5. Привет! При отправке данных через USART2, используя DMA1 транзакция срабатывает только один раз и перезапуск DMA не помогает. Что самое интересное - большинство примеров представляют из себя одиночный старт транзакции после резета, что на практике бесполезно. Кому-нибудь удалось это запустить? Буферы: #define UART_RX_BUFF_SIZE 128 #define UART_TX_BUFF_SIZE 1024 unsigned char uart_tx_buff[UART_TX_BUFF_SIZE]; unsigned char uart_rx_buff[UART_RX_BUFF_SIZE]; Настройки USART и DMA1: USART_InitTypeDef usart; usart.USART_BaudRate = 600000; usart.USART_Parity = USART_Parity_No; usart.USART_StopBits = USART_StopBits_1; usart.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; usart.USART_WordLength = USART_WordLength_8b; usart.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_Init(USART2, &usart); USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //NVIC_EnableIRQ(USART2_IRQn); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE); DMA_InitStructure.DMA_Channel = DMA_Channel_4; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) &(USART2->DR); DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t) uart_rx_buff; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; DMA_InitStructure.DMA_BufferSize = UART_RX_BUFF_SIZE; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull ; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_Init(DMA1_Stream5, &DMA_InitStructure); DMA_Cmd(DMA1_Stream5, ENABLE); DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t) uart_tx_buff; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; DMA_InitStructure.DMA_BufferSize = UART_TX_BUFF_SIZE; DMA_Init(DMA1_Stream6, &DMA_InitStructure); USART_DMACmd(USART2, USART_DMAReq_Rx | USART_DMAReq_Tx, ENABLE); USART_Cmd(USART2, ENABLE); Отправка через DMA1: void usart_write(unsigned char * data, int length){ for(int i = 0; i < length; i++) uart_tx_buff[i] = data[i]; DMA_ClearITPendingBit(DMA1_Stream6, DMA_IT_TC); DMA_Cmd(DMA1_Stream6, DISABLE); DMA1_Stream6->M0AR = (uint32_t) uart_tx_buff; DMA1_Stream6->NDTR = length; DMA_Cmd(DMA1_Stream6, ENABLE); } После первого запуска регистр DMA1_Stream6->NDTR равен нулю. После последующих запусков там не ноль -> транзакция не была запущена и в UART ничего не пришло.
  6. khlenar, Не факт, что проще. Этот проц загружен всего на 20% при обработке на 7MSPS. В особенности интересуют варианты экономии энергии, переводом процессора в спячку.
  7. jcxz, с внешним АЦП проще добиться требуемой разрядности, чем с внутренним. Параллельный выбран из-за того, что требуется на 10...20 MSPS работать, с последовательным это еще и к бОльшему потреблению приведет. Сейчас для экспериментов на 12 бит, планируется поставить на 14 бит.
  8. Да, читал этот документ. В случае с таймером для генерации VSYNC - какой лучше выбрать источник тактирования для него? Нужно от 3.5 до 20 MSPS, параллельный в самый раз.
  9. Привет! Использую АЦП с параллельным интерфейсом совместно с STM32F407VG. Как только во время работы DMA происходит запись в регистр GPIOD->ODR в результатах оцифровки появляются помехи. Из Errata нашел следующий пункт, где говорится о невозможности совместной работы DMA2 и GPIO: 1. Существуют ли варианты обхода этого ограничения? Дело в том, что после завершения DMA транзакции из DCMI в SRAM нужно сгенерировать импульс VSYNC, чтобы запустить следующую транзакцию. 2. Быть может, DCMI можно использовать без VSYNC? 3. Существуют ли процессоры с параллельным интерфейсом и поддержкой Sleep & Stop mode?
  10. С этим проблем нет, даже наличие питания на DB-9 не обязательно - припаяем, если нет. На тех модулях, что на фото такая опция есть.
  11. Куплю мост WiFi <> RS232 или RS485 похожей конструкции: разъем DB-9 встроен в модуль. Питание от 5 вольт через DB-9. Может есть у кого?
  12. alex_os, понятно. Скользящее окно с таким демодулятором тоже не нужно, т.е. просто разбиваем входные отсчеты на блоки по sps отсчетов и скармливаем демодулятору?
  13. Доброго времени суток. Мне нужно сделать CPFSK модем на микроконтроллере. Почитал про разные демодуляторы и выбрал вот такой: Столкнулся с такой задачей впервые и хочу узнать - правильно ли я понимаю как производится демодуляция и декодирование. Ответите на несколько вопросов? :rolleyes: Вопросы: 1) Опорные сигналы длиной SPS отсчетов? SPS - кол-во отсчетов на символ. 2) На вход этого демодулятора подается порция SPS отсчетов из буфера, потом отсчеты смещаются как на картинке и т.д. и т.п. В результате, если информационное сообщение выглядело так: 1 0 1, то получим на выходе демодулятора последовательность типа: 111111 0000000 1111111 ? 3) Вот таким методом: http://dspsys.org/dsparticles/32-vkfalg ищем преамбулу, чтобы определить начало пакета и считаем нули/еденицы, собираем байтики? Спасибо.
  14. Наконец то я разобрался. Чем больше R тем меньше ширина импульса и по этому при R = 2048 я их не замечал на экране осциллографа Так и должно быть? Странно как-то...
  15. Спасибо, разобрался. Загрузил только что в регистр R 100100000000000 (2048), кварц стоит на 3200 кГц, на выходе fR появился сигнал частотой 800 кГц, значит в регистр загрузилось не 2048, а 4, но почему? Загружаю вот так: void send(unsigned int data,unsigned int length) { int i; for(i=0;i!=length;i++) { wait if((data & (1<<i))!=0) { DATA=1; } else { DATA=0; } wait CLK=1; wait CLK=0; wait } } void main(void) { send(0b100100000000000,15); delay_us(500); ENB=1; delay_us(500); ENB=0; while(1); }
×
×
  • Создать...