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

Arlleex

Участник
  • Публикаций

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

  • Посещение

Репутация

0 Обычный

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

  • Звание
    Местный

Контакты

  • Сайт
    http://
  • ICQ
    0

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

2 268 просмотров профиля
  1. Надёжность EFM32 и их АЦП

    Даже чтобы захватить полный динамический диапазон АЦП 2,5/4096 ≈ 0,00061В. С учетом собственных шумов выкиньте смело пару младших разрядов и получите эффективную разрядность. Не уверен, что на STM32 Вы обеспечите такой шаг и линейность. Да, врочем, и на EFM32, ИМХО, хотя с ними я не работал. И полоса сигналов не озвучена, способ оцифровки. Думаю Вам надо смотреть в сторону MSP430 с сигма-дельта АЦП.
  2. Знатокам SGPIO LPC4337

    А разве в этом МК нет настройки приоритета доступа CPU и DMA?
  3. Использование #define значения в ASM KEIL

    1. В ключах Assembler Keil можно прописать --cpreproc. Теперь можно прям в file.s писать #include "Settings.h" и делать DCD MY_DEFINE. 2. Не прописывая ключей в file.s пишем GBLA MY_DEFINE, и можно теперь использовать это имя ниже. MY_DEFINE, например, это #define MY_DEFINE 100.
  4. CAN FD

    Спасибо за ответ! Скорость там все-таки будет не более 125кбит/с, но драйверы были выбраны жестко и не мной. Поэтому и интересовала совместимость.
  5. STM32F107+WiFi по Ethernet

    Можно. Но не понятно, что Вам нужно. Возьмите домашний Wi-Fi роутер. Возможно такое подключение? Возможно. Возьмите модуль WF121, например. Возможно подключить по Ethernet? Возможно.
  6. Почему? Именно по сравнению: как только заданный период прошёл (счётчик таймера сравнялся с указанным значением сравнения), формируется прерывание, в котором регистр сравнения перенастраивается на следующий интервал, а лапка дергается в соответствующую сторону :laughing: А захват - это защёлкивание текущего значения таймера по какому-либо событию, как я понимаю эту всю кухню. Хотя, кстати, да, можно (скорее нужно) делать по захвату. Дёрнулась лапка - захватили значение таймера и проконтролировали рамки прихода ожидаемого фронта...
  7. Не знаю, зачем выделять на это целый UART... Я сделал на таймере в режиме сравнения. Благодаря этому можно использовать любую ножку свободную на МК. Обработчик таймера: #define T1 4 #define T2 7 #define T3 51 #define T4 59 #define T5 89 #define T6 409 #define T7 499 // TypeOperation - тип запрашиваемой операции: // ONE_WIRE_INIT - формирование импульса сброса; // ONE_WIRE_GET_TIME_SLOT - формирование тайм-слота чтения; // ONE_WIRE_SET_TIME_SLOT_0 - формирование тайм-слота записи лог. 0; // ONE_WIRE_SET_TIME_SLOT_0 - формирование тайм-слота записи лог. 1. // // ResultOperation - результат чтения тайм-слота (только при чтении). // // StatusOperation - флаг завершенности работы автомата. // // Перед использованием автомата необходимо указать тип операции и включить // таймер TIMER_START(). Затем дождаться завершения работы автомата. void TIM2_IRQHandler(void) { if(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET) { static unsigned char FSMState = 0; switch(TypeOperation) { // автомат формирования импульса сброса case ONE_WIRE_INIT: { switch(FSMState) { case 0: TIM2->ARR = T7; RESET_LINE(WIRE); break; case 1: TIM2->ARR = T5; SET_LINE(WIRE); break; case 2: TIM2->ARR = T6; ResultOperation = GET_LINE(WIRE); break; case 3: TIMER_STOP(); TIM2->ARR = T1; StatusOperation = 1; break; } FSMState = (FSMState + 1) & 0x3; break; } // автомат формирования тайм-слота чтения case ONE_WIRE_GET_TIME_SLOT: { switch(FSMState) { case 0: TIM2->ARR = T1; RESET_LINE(WIRE); break; case 1: TIM2->ARR = T2; SET_LINE(WIRE); break; case 2: TIM2->ARR = T3; ResultOperation = GET_LINE(WIRE); break; case 3: TIMER_STOP(); TIM2->ARR = T1; StatusOperation = 1; break; } FSMState = (FSMState + 1) & 0x3; break; } // автомат формирования тайм-слота записи case ONE_WIRE_SET_TIME_SLOT_0: case ONE_WIRE_SET_TIME_SLOT_1: { switch(FSMState) { case 0: TIM2->ARR = (TypeOperation == HW_ONE_WIRE_SET_TIME_SLOT_0) ? T4 : T1; RESET_LINE(GPIO_ONE_WIRE); break; case 1: TIM2->ARR = (TypeOperation == HW_ONE_WIRE_SET_TIME_SLOT_0) ? T1 : T4; SET_LINE(GPIO_ONE_WIRE); break; case 2: TIMER_STOP(); TIM2->ARR = T1; ++FSMState; StatusOperation = 1; break; } FSMState = (FSMState + 1) & 0x3; break; } } TIM_ClearITPendingBit(TIM2, TIM_IT_Update); } } } Кстати, попутно тут хочу узнать, как красиво организовать счётчик, который считает до, например, 5 и сбрасывается в 0 без условия if(). Ну то есть вычитая, сдвигая... Интересно можно ли так сделать. Для ровных битовых чисел, как в коде выше, как видно, я битовой маской обнуляю. А вот интересно, как быть с числами, не являющихся степенями 2.
  8. В догонку хочу поинтересоваться. Обычно если мне нужна локальная сеть, я беру МК с Ethernet MAC и работаю с ним. Но эта тема натолкнула на давно интересующий меня вопрос: можно ли как-то перенаправлять данные из COM-порта ПК в сетевые сообщения... Не знаю как правильно выразиться. Ну, допустим, хочу веб-морду из браузера для девайса, а Ethernet-а нет. UART только торчит. Нужно же как-то сказать ОС, что вот такой-то COM-порт это полноценная сетевая карточка. Пусть звучит наивно, конечно, но вопрос чисто спортивного интереса (из разряда "поиграться на выходных"). Вернее, я знаю, что это сделать можно. Но как? Windows 7, XP, браузер Chrome, Mozilla, Opera, да разные.
  9. STM32F429 Discovery / uGFX

    Ну покажите артефакты тогда. У меня артефакты были при некачественом питании SDRAM.
  10. STM32F429 Discovery / uGFX

    Как было уже озвучено - все упирается в пропускную способность шины. И никакая двойная буферизация не поможет - даже статичная картинка все равно вычитывается из памяти и отрисовывается с отображением прямо на пиксели. Я поднимал частоту и делал другой формат: не RGB888, а ARGB565. Никаких мерцаний на дисплее 800x480.
  11. LwIP: работа в нескольких подсетях

    Есть девайс. Он находится в одной подсети с ПК 192.168.172.X/24. Но также этот девайс должен уметь работать с другими девайсами, находящимися в других подсетях. Когда было только две подсети, я использовал gateway как адрес второй подсети. Сейчас добавилась ещё одна подсеть, и нужно делать либо статический роут, либо добавлять gateway. А вот есть ли штатные средства LwIP для этого? Или ручками править стек?
  12. stm32f4 + Chan's FatFS

    Мне все-таки нужна консультация, чем отличается SD от SDIO, т.к. даже в даташитах иногда пишут SD/SDIO Card interface, что подразумевает, что это все-таки разные шины. Если не трудно, объясните, пожалуйста, разницу.
  13. Прием по USART

    Чему равен? Есть уверенность, что отправляющий UART не напихивает в регистр без продыху?
  14. Прием по USART

    А, не туда посмотрел. Работать будет, но все равно не ясен смысл еще одного аргумента (количества передаваемых символов). Почему не USART_SendBuf(USART2, "MBE\r"); Вам об этом еще выше писали. А Вы все "да у меня только одно прерывание срабатывает"... Я Вас не зря попросил регистр статуса целиком в переменную загнать и под отладчиком глянуть. Процессор на какой частоте работает и на какой скорости UART обмен ведет?