Пример Serial Echo (UART) с использованием event на ChibiOS, STM32

Изменения в halconf.h

#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
#define HAL_USE_SERIAL              TRUE
#endif
#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
#define SERIAL_DEFAULT_BITRATE      115200 // set baudrate here
#endif

Изменения в mcuconf.h

#define STM32_SERIAL_USE_USART1             TRUE

Код программы:

#include <ch.h>
#include <hal.h>
#include <stm32f10x.h>

static WORKING_AREA(waSerEcho, 128);
static msg_t thSerEcho(void *arg)
{
   (void)arg;
   chRegSetThreadName("SerEcho");
   EventListener elSerData;
   flagsmask_t flags;
   chEvtRegisterMask((EventSource *)chnGetEventSource(&SD1), &elSerData, EVENT_MASK(1));

   while (TRUE)
   {
      chEvtWaitOneTimeout(EVENT_MASK(1), MS2ST(10));
      chSysLock();
      flags = chEvtGetAndClearFlags(&elSerData);
      chSysUnlock();
      if (flags & CHN_INPUT_AVAILABLE)
      {
         msg_t charbuf;
         do
         {
            charbuf = chnGetTimeout(&SD1, TIME_IMMEDIATE);
            if ( charbuf != Q_TIMEOUT )
            {
              chSequentialStreamPut(&SD1, charbuf);
            }
         }
         while (charbuf != Q_TIMEOUT);
      }
   }

   return 0;
}
int main(void) {
  halInit();
  chSysInit();

  /*
   * Activates the serial driver 1 using the driver default configuration.
   */
  sdStart(&SD1, NULL);

  chThdCreateStatic(waSerEcho, sizeof(waSerEcho), NORMALPRIO, thSerEcho, NULL);

  while (!chThdShouldTerminate()) {
    chThdSleepMilliseconds(500);
  }
  return 0;
}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *