www.open-tager.ru http://www.open-tager.ru/forum/ |
|
АРМейский лазертаг http://www.open-tager.ru/forum/viewtopic.php?f=5&t=2171 |
Страница 13 из 34 |
Автор: | Gruffi [ 26 окт 2013, 22:05 ] |
Заголовок сообщения: | Re: АРМейский лазертаг |
ВовВовыч писал(а): Я к своему DSO 203 в добавку тоже заказал,ибо на мониторе действительно некоторые вещи смотреть гораздо удобнее)) Пока в пути,ждём-с) А как отзывы, кто пользовался по осциллографу? Нормальные? А тоже присматриваюсь и пока не могу определиться... |
Автор: | Pingvin [ 27 окт 2013, 07:47 ] |
Заголовок сообщения: | Re: АРМейский лазертаг |
ВовВовыч писал(а): Кстати,8-ми канальный лоджик стоит ещё дешевле))А нам-то по хорошему 16 и не особо нужно. Я к своему DSO 203 в добавку тоже заказал,ибо на мониторе действительно некоторые вещи смотреть гораздо удобнее)) Пока в пути,ждём-с) Пы.Сы,По размеру похожи,а вот по шагу ног нужно поднимать левел пайщика)) На фотке на плате Ардуино не 32 Атмега! 32-я точь в точь как ARM на фотке справа. |
Автор: | Pingvin [ 27 окт 2013, 09:28 ] |
Заголовок сообщения: | Re: АРМейский лазертаг |
Gruffi писал(а): Pingvin писал(а): И что у нас с системой тактирования? Как настраивается? Здесь не так как у atmega . По умолчанию практически все тактирование отключено и надо каждый раз ручками подключать тактирование портов и другой периферии. В принципе, если мигать научились , то с этим Вы уже разобрались. Внутренний тактовый генератор на 8МГц настраивается не сложно: Код: RCC->CR|=RCC_CR_HSION; // Включить генератор HSI. while(!(RCC->CR & RCC_CR_HSIRDY)) {} // Ожидание готовности HSI. RCC->CFGR &=~RCC_CFGR_SW; // Очистить биты SW0, SW1. RCC->CFGR |= RCC_CFGR_SW_HSI; // Выбрать HSI для тактирования SW0=1 В кокосе определена такая функция в файле system_stm32fxx.c Код: static void SetSysClock(void) { /******************************************************************************/ /* PLL (clocked by HSE) used as System clock source */ /******************************************************************************/ __IO uint32_t StartUpCounter = 0, HSEStatus = 0; /* Enable HSE */ RCC->CR |= ((uint32_t)RCC_CR_HSEON); /* Wait till HSE is ready and if Time out is reached exit */ do { HSEStatus = RCC->CR & RCC_CR_HSERDY; StartUpCounter++; } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); if ((RCC->CR & RCC_CR_HSERDY) != RESET) { HSEStatus = (uint32_t)0x01; } else { HSEStatus = (uint32_t)0x00; } if (HSEStatus == (uint32_t)0x01) { /* Enable high performance mode, System frequency up to 168 MHz */ RCC->APB1ENR |= RCC_APB1ENR_PWREN; PWR->CR |= PWR_CR_PMODE; /* HCLK = SYSCLK / 1*/ RCC->CFGR |= RCC_CFGR_HPRE_DIV1; /* PCLK2 = HCLK / 2*/ RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; /* PCLK1 = HCLK / 4*/ RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; /* Configure the main PLL */ RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); /* Enable the main PLL */ RCC->CR |= RCC_CR_PLLON; /* Wait till the main PLL is ready */ while((RCC->CR & RCC_CR_PLLRDY) == 0) { } /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ FLASH->ACR = FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS; /* Select the main PLL as system clock source */ RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); RCC->CFGR |= RCC_CFGR_SW_PLL; /* Wait till the main PLL is used as system clock source */ while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); { } } else { /* If HSE fails to start-up, the application will have wrong clock configuration. User can add here some code to deal with this error */ } /******************************************************************************/ /* I2S clock configuration */ /******************************************************************************/ /* PLLI2S clock used as I2S clock source */ RCC->CFGR &= ~RCC_CFGR_I2SSRC; /* Configure PLLI2S */ RCC->PLLI2SCFGR = (PLLI2S_N << 6) | (PLLI2S_R << 28); /* Enable PLLI2S */ RCC->CR |= ((uint32_t)RCC_CR_PLLI2SON); /* Wait till PLLI2S is ready */ while((RCC->CR & RCC_CR_PLLI2SRDY) == 0) { } } Только здесь Код: RCC->CR |= ((uint32_t)RCC_CR_HSEON); А у Вас Код: RCC->CR|=RCC_CR_HSION; // Включить генератор HSI. Опечатка? |
Автор: | Pingvin [ 27 окт 2013, 10:10 ] |
Заголовок сообщения: | Re: АРМейский лазертаг |
Настроил в FreeRTOS-ке систему тактирования! Диодики мигают как и прописано - 1 Гц и 1,5 Гц. Шаблон готов! Теперь это основа для любого моего проекта на ARM! Лепота!!! А вот с примерами - засада! Все примеры рассчитаны на пропритарные среды разработки и под кокосом многие не собираются, с том числе и пример с записью звука на флешку. А я губешки раскатал на халяву! Но нас это не остановит! |
Автор: | Pingvin [ 27 окт 2013, 13:44 ] | ||
Заголовок сообщения: | Re: АРМейский лазертаг | ||
Примерчик набросал использования FreeRTOS- 4 светодиода мигают с различной частотой. http://www.youtube.com/watch?v=a9Rkjg0sSQU&feature=youtu.be Вот содержимое файла main.с Код: #include "stm32f4xx.h" #include "stm32f4xx_conf.h" #include "stm32f4_discovery.h" #include "FreeRTOS.h" #include "task.h" void vTaskLED5(void *pvParameters); void vTaskLED6(void *pvParameters); void vTaskLED3(void *pvParameters); void vTaskLED4(void *pvParameters); int main(void) { STM32F4_Discovery_LEDInit(LED3); STM32F4_Discovery_LEDInit(LED4); STM32F4_Discovery_LEDInit(LED6); STM32F4_Discovery_LEDInit(LED5); xTaskCreate( vTaskLED5, ( signed char * ) "LED5", configMINIMAL_STACK_SIZE, NULL, 2, ( xTaskHandle * ) NULL); xTaskCreate( vTaskLED6, ( signed char * ) "LED6", configMINIMAL_STACK_SIZE, NULL, 2, ( xTaskHandle * ) NULL); xTaskCreate( vTaskLED3, ( signed char * ) "LED3", configMINIMAL_STACK_SIZE, NULL, 2, ( xTaskHandle * ) NULL); xTaskCreate( vTaskLED4, ( signed char * ) "LED4", configMINIMAL_STACK_SIZE, NULL, 2, ( xTaskHandle * ) NULL); vTaskStartScheduler(); } void vTaskLED5(void *pvParameters) { for (;;) { STM32F4_Discovery_LEDOn(LED5); vTaskDelay(50); STM32F4_Discovery_LEDOff(LED5); vTaskDelay(50); } } void vTaskLED6(void *pvParameters) { for (;;) { STM32F4_Discovery_LEDOn(LED6); vTaskDelay(32); STM32F4_Discovery_LEDOff(LED6); vTaskDelay(32); } } void vTaskLED3(void *pvParameters) { for (;;) { STM32F4_Discovery_LEDOn(LED3); vTaskDelay(60); STM32F4_Discovery_LEDOff(LED3); vTaskDelay(60); } } void vTaskLED4(void *pvParameters) { for (;;) { STM32F4_Discovery_LEDOn(LED4); vTaskDelay(70); STM32F4_Discovery_LEDOff(LED4); vTaskDelay(70); } } Попробуйте реализовать это "штатными средствами" - сравним код!
|
Автор: | Gruffi [ 27 окт 2013, 23:47 ] |
Заголовок сообщения: | Re: АРМейский лазертаг |
Pingvin писал(а): Gruffi писал(а): Pingvin писал(а): И что у нас с системой тактирования? Как настраивается? Здесь не так как у atmega . По умолчанию практически все тактирование отключено и надо каждый раз ручками подключать тактирование портов и другой периферии. В принципе, если мигать научились , то с этим Вы уже разобрались. Внутренний тактовый генератор на 8МГц настраивается не сложно: Код: RCC->CR|=RCC_CR_HSION; // Включить генератор HSI. while(!(RCC->CR & RCC_CR_HSIRDY)) {} // Ожидание готовности HSI. RCC->CFGR &=~RCC_CFGR_SW; // Очистить биты SW0, SW1. RCC->CFGR |= RCC_CFGR_SW_HSI; // Выбрать HSI для тактирования SW0=1 В кокосе определена такая функция в файле system_stm32fxx.c Код: static void SetSysClock(void) { /******************************************************************************/ /* PLL (clocked by HSE) used as System clock source */ /******************************************************************************/ __IO uint32_t StartUpCounter = 0, HSEStatus = 0; /* Enable HSE */ RCC->CR |= ((uint32_t)RCC_CR_HSEON); /* Wait till HSE is ready and if Time out is reached exit */ do { HSEStatus = RCC->CR & RCC_CR_HSERDY; StartUpCounter++; } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); if ((RCC->CR & RCC_CR_HSERDY) != RESET) { HSEStatus = (uint32_t)0x01; } else { HSEStatus = (uint32_t)0x00; } if (HSEStatus == (uint32_t)0x01) { /* Enable high performance mode, System frequency up to 168 MHz */ RCC->APB1ENR |= RCC_APB1ENR_PWREN; PWR->CR |= PWR_CR_PMODE; /* HCLK = SYSCLK / 1*/ RCC->CFGR |= RCC_CFGR_HPRE_DIV1; /* PCLK2 = HCLK / 2*/ RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; /* PCLK1 = HCLK / 4*/ RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; /* Configure the main PLL */ RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); /* Enable the main PLL */ RCC->CR |= RCC_CR_PLLON; /* Wait till the main PLL is ready */ while((RCC->CR & RCC_CR_PLLRDY) == 0) { } /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ FLASH->ACR = FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS; /* Select the main PLL as system clock source */ RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); RCC->CFGR |= RCC_CFGR_SW_PLL; /* Wait till the main PLL is used as system clock source */ while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); { } } else { /* If HSE fails to start-up, the application will have wrong clock configuration. User can add here some code to deal with this error */ } /******************************************************************************/ /* I2S clock configuration */ /******************************************************************************/ /* PLLI2S clock used as I2S clock source */ RCC->CFGR &= ~RCC_CFGR_I2SSRC; /* Configure PLLI2S */ RCC->PLLI2SCFGR = (PLLI2S_N << 6) | (PLLI2S_R << 28); /* Enable PLLI2S */ RCC->CR |= ((uint32_t)RCC_CR_PLLI2SON); /* Wait till PLLI2S is ready */ while((RCC->CR & RCC_CR_PLLI2SRDY) == 0) { } } Только здесь Код: RCC->CR |= ((uint32_t)RCC_CR_HSEON); А у Вас Код: RCC->CR|=RCC_CR_HSION; // Включить генератор HSI. Опечатка? HSI - это внутренний генератор HSE - внешний генератор (кварц) Можно использовать SetSysClock(), я просто показал как руками не используя библиотек. В функции кроме запуска кварца настраивается служба, которая следит за работой кварца и если он отказывает, то переключает тактирование на внутренний источник (8МГц). |
Автор: | Gruffi [ 28 окт 2013, 00:40 ] |
Заголовок сообщения: | Re: АРМейский лазертаг |
Pingvin писал(а): Попробуйте реализовать это "штатными средствами" - сравним код! Сейчас не на чем экспериментировать, но в принципе код был бы не намного больше . Я бы запустил один таймер и по прерыванию увеличивал бы счетчик, а в основном цикле проверял заданные промежутки настроек светодиодов. Но флеша съел бы точно на 6 кил меньше . Эта не та задача на которой нужно проверять . У нас ребята сейчас уже испытывают gps-трекер и там как раз используют FreeRTOS и без нее там точно не обойтись, но уже жалуются что проца со 128кб мало. Сейчас оптимизируют, как могут, чтобы выжать еще немного памяти. Только они используют не stm, а nxp. Скоро мне понадобится как раз ось, хотя могу и без нее сделать проект, но пощупать хочется, вот заодно и пощупаю |
Автор: | Pingvin [ 28 окт 2013, 05:59 ] |
Заголовок сообщения: | Re: АРМейский лазертаг |
Gruffi писал(а): Pingvin писал(а): Попробуйте реализовать это "штатными средствами" - сравним код! Сейчас не на чем экспериментировать, но в принципе код был бы не намного больше . Я бы запустил один таймер и по прерыванию увеличивал бы счетчик, а в основном цикле проверял заданные промежутки настроек светодиодов. Но флеша съел бы точно на 6 кил меньше . Эта не та задача на которой нужно проверять . У нас ребята сейчас уже испытывают gps-трекер и там как раз используют FreeRTOS и без нее там точно не обойтись, но уже жалуются что проца со 128кб мало. Сейчас оптимизируют, как могут, чтобы выжать еще немного памяти. Только они используют не stm, а nxp. Скоро мне понадобится как раз ось, хотя могу и без нее сделать проект, но пощупать хочется, вот заодно и пощупаю Я бы тоже сделал, как Вы предлагаете без оси. Конечно, всего лишь пример, но и то проще написать 4 потока по нескольку строк каждый, чем анализировать несколько значений. А частоту поменять? А вот попробуйте, например, поработать с модемом по UART, где нужно дождаться ответа, и при этом нужно ещё кое какие дела делать одновременно (реагировать на нажатие кнопок), без многопоточности! Задолбаетесь! Вырисовывается концепция нового девайса. Меняются приоритеты - сначала SD карта. Флешка, конечно, круто, но габаритная. На карте, помимо звуковых файлов, будет лежать файл со всеми настройками тага, например tag.conf А то я поначалу переживал, что нет внутреннего eeprom у ARM, а сейчас понял, и без него можно обойтись. |
Автор: | mail_robot [ 28 окт 2013, 06:34 ] |
Заголовок сообщения: | Re: АРМейский лазертаг |
прежде чем уповать на многопоточность, неплохо было бы разобраться в механизме ее реализации для данной конкретной оси а то получится как с форматированием дискетки под win95 |
Автор: | Pingvin [ 28 окт 2013, 06:52 ] |
Заголовок сообщения: | Re: АРМейский лазертаг |
mail_robot писал(а): прежде чем уповать на многопоточность, неплохо было бы разобраться в механизме ее реализации для данной конкретной оси а то получится как с форматированием дискетки под win95 Как то тоже об этом подумал. Но все равно - Спасибо! P.S. Все-таки интересно стало? |
Страница 13 из 34 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |