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

prm

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

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

  • Посещение

Репутация

0 Обычный

Информация о prm

  • Звание
    Участник
    Участник
  1. Кто еще не совсем в теме ... К эклипсу есть замечательный плагин, позволяющий в пару кликов мышью настроить цветовую схему. Рекомендую всем :) http://eclipsecolorthemes.org/
  2. может тогда причина не в DMA, а в УАРТ? с другой периферией не пробовали?
  3. Понял. Я подобным образом работаю с DS18b20. Вот рабочий кусок кода(лишнее можно выбросить, я подстраховался): USART_Cmd(USART_DS18B20, DISABLE); //USART_DS18B20 USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART_DS18B20, &USART_InitStructure); // конфигурирую DMA DMA_InitTypeDef DMA_InitStructure; DMA_DeInit(USART_DS18B20_Rx_DMA_Ch); DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART_DS18B20_DR_Base; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)rx_data_buf; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = 1000; 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_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(USART_DS18B20_Rx_DMA_Ch, &DMA_InitStructure); DMA_DeInit(USART_DS18B20_Tx_DMA_Ch); DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART_DS18B20_DR_Base; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)tx_data_buf; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; DMA_InitStructure.DMA_BufferSize = cnt; 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_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(USART_DS18B20_Tx_DMA_Ch, &DMA_InitStructure); USART_ClearFlag(USART_DBG,USART_IT_TC); USART_Cmd(USART_DS18B20, ENABLE); USART_DMACmd(USART_DS18B20, USART_DMAReq_Tx | USART_DMAReq_Rx, ENABLE); DMA_ITConfig(USART_DS18B20_Tx_DMA_Ch, DMA_IT_TC | DMA_IT_TE, ENABLE); DMA_ITConfig(USART_DS18B20_Rx_DMA_Ch, DMA_IT_HT | DMA_IT_TC | DMA_IT_TE, DISABLE); // запускаю передачу DMA_Cmd(USART_DS18B20_Rx_DMA_Ch, ENABLE); DMA_Cmd(USART_DS18B20_Tx_DMA_Ch, ENABLE); // засыпаю до завершения передачи USART_Cmd(USART_DS18B20, DISABLE); DMA_Cmd(USART_DS18B20_Rx_DMA_Ch, DISABLE); DMA_Cmd(USART_DS18B20_Tx_DMA_Ch, DISABLE); DMA_ClearITPendingBit(DMA1_IT_GL2); DMA_ClearITPendingBit(DMA1_IT_GL3);
  4. Обычно описанные действия помогают. Может проще использовать DMA в режиме записи по кольцу, организовав тем самым подобие двойного буфера? В своем проекте использую FreeRTOS. Сделал отдельную задачу на прием информации по УАРТ. В обработчике прерывании от DMA в очередь событий (создаю отдельно) помещаю код возникшего события (буфер заполнен на половину, заполнен полностью, ошибка). В задаче приема вызываю xQueueReceive(..., ..., таймаут_ожидания_окончания_передачи). Если событие принято, обрабатываю данные буфера, запоминаю смещение (первая/вторая половина буфера, зависит от кода события). Если событие не принято (xQueueReceive завершилась по таймауту), определяю количество принятых байт с момента возникновения последнего события (знаю смещение в буфере, знаю сколько еще пришло DMA_GetCurrDataCounter(...)) и снова обрабатываю буфер. //============================================================================ /// Задача по приему данных от USART_DBG //============================================================================= void vDebugReceive(void *pvParameters) { const portTickType xTicksToWait = USART_DBG_RX_TIMEOUT_MS / portTICK_RATE_MS; uint8_t event_code; uint16_t last_data_cnt = USART_DBG_RX_BUF_SIZE; uint16_t cnt = 0; uint8_t offset = 0; //вечный цикл for(;;) { // ожидаю прихода события (данные считаны либо таймаут) if( xQueueReceive(dbg_rx_events, &event_code, xTicksToWait) == pdPASS ) { //получил событие switch(event_code) { case DBG_RX_HALF: { // заполнена первая половина приемного буфера for (; offset < (USART_DBG_RX_BUF_SIZE+1)/2; ++offset) xQueueSendToBack(dbg_rx_data, (const void*)&dbg_in_buf[offset],0); last_data_cnt = (USART_DBG_RX_BUF_SIZE+1)/2; break; } case DBG_RX_FULL: { // заполнена вторая половина приемного буфера for (; offset < USART_DBG_RX_BUF_SIZE; ++offset) xQueueSendToBack(dbg_rx_data, (const void*)&dbg_in_buf[offset],0); // смещение на начало буфера offset = 0; last_data_cnt = USART_DBG_RX_BUF_SIZE; break; } case DBG_RX_ERR: { // произошла ошибка при приеме данных. Заново включаем канал DMA DMA_Cmd(USART_DBG_Rx_DMA_Ch, ENABLE); offset = 0; break; } } } else { // проверяю, может пришла часть данных if ( last_data_cnt != DMA_GetCurrDataCounter(USART_DBG_Rx_DMA_Ch)) { // т.к. счетчик в DMA декрементируется, то вычитаем из last_data_cnt cnt = last_data_cnt - DMA_GetCurrDataCounter(USART_DBG_Rx_DMA_Ch); for (; cnt && offset < USART_DBG_RX_BUF_SIZE; ++offset, --cnt) xQueueSendToBack(dbg_rx_data,(const void*)&dbg_in_buf[offset],0); //ОБНУЛЯТЬ offset НЕЛЬЗЯ!!! Должно генерироваться прерывание по заполнению буфера } last_data_cnt = DMA_GetCurrDataCounter(USART_DBG_Rx_DMA_Ch); } } }
  5. PC +/- …

    А под линуксом хот-кеи Eclipse перенастраивали???
  6. Есть проект http://www.versaloon.com, почитав его форум можно найти информацию, как и чем перепрошить ST-Link, чтобы появилась поддержка openocd. Сам не делал, но судя по форуму, у людей все получилось.
  7. Можно начать с изучения имеющегося на рынке оборудования. Почитать руководства по эксплуатации на весовые индикаторы (WE2110, CI-6000, Flintec и др), в них ОЧЕНЬ МНОГО найдете новой и полезной для себя информации. Ну и куда без ГОСТ-ов. Например, "ГОСТ Р 53228 Весы неавтоматического действия". На первое время хватит :)
  8. Для полноты картины... В свое время на просторах интернета нашел файл (см. вложение) с описанием горячих кнопок эклипса. Мне он здорово помог сделать работу с программой еще более удобной.
  9. Использую Eclipse Helios C/C++. Дополнительно устанавливал плагины: ARM eclipse plugin AVR eclipse plugin Для системы контроля версий (Git): EGit eclipse plugin Рекомендую использовать EGit из репозитория(3-я ссылка) Ну и Qt Eclipse Integration for C++ (т.к. большую часть времени пишу проги на Qt) kgp это сборка ARM toolchain от klen, скачать можно отсюда: http://electronix.ru/forum/index.php?showt...st&p=832302 Red Suite особо не ковырял, скачал, поставил, выдрал скрипт линкера для своего проекта, и больше не использовал. Описанная в предыдущем посте связка работает отлично, плюс никаких ограничений. Про отладчики ничего не скажу - самому пользоваться не доводилось.
  10. У самого недавно были подобные вопросы. Тоже с этой же макетки начал кортексы осваивать :) 1. IgorKossak дал вполне хороший ответ. Вот ссылка http://electronix.ru/forum/index.php?showt...st&p=777699 С yagarto работать будет, но на мой взгляд лучше использовать сборки klen-а. Сам использую eclipse helios + ARM плагин + kgp . Из плюсов (а для кого и минусов :))) - не надо вручную править makefile, все настройки осуществляются в эклипсе. 2. Имеются и готовые сборки на основе эклипса. Я рассматривал CodeSourcery и Red Suite 3 (от Code Red). Первая платная, пробных версий не нашел. У второй имеется 90 дневная пробная версия и версия без ограничения использования по времени, но с лимитом на размер генерируемого файла прошивки. Кроме того, Red Suite генерирует файл скрипта для линкера, что очень хорошо при освоении ARM-ов. JTAG-ом пока не пользовался, обычно использую один из UART-ов в качестве отладочного порта.
  11. Похожая тема http://electronix.ru/forum/lofiversion/index.php/t74127.html
  12. Не в бровь, а в глаз!!! Долго искал, как к эклипсу компилятор для АРМ прикрутить, все как-то боком выходило... А здесь все доступно объяснено. СПАСИБО!!! :)
  13. Сам использую эклипс. Очень доволен. Теперь по делу. Для AVR у эклипса есть плагин AVR Eclipse Plugin. Удобная вещь.
  14. А если тупо взять готовый планшет (какой - нибудь из клонов ASUS Eee Pad) и в виде отдельного блочка прикрутить к нему АЦП. Времени съэкомите кучу, да и программу, возможно, портировать не потребуется - есть образцы с виндой на борту.
  15. Можно попробовать заскочить в какую-нибудь лавочку по ремонту сотовых, там с большой вероятностью возьмутся помочь.
×
×
  • Создать...