Универсальная инициализацию usart

Кто любит RISC в жизни, заходим, не стесняемся.
godz320
Родился
Сообщения: 19
Зарегистрирован: Пт янв 08, 2016 19:00:40

Re: Универсальная инициализацию usart

Сообщение godz320 »

HHIMERA писал(а):
Die Verbindungsstrecke sieht dann so aus :

PC <- USB -> STM32F4 <- UART -> Device (z.B. Mega8)

Да сама постановка задачи... уже бред... изначально... Исходники можно уже и не смотреть... даже...



Не могу с вами поспорить, но мне показалось, что это проект эмулятор COM порта на STM32F4, как он и пишет , такая же функция как и у чипа FTDI232.
И возможно эмулируется не один COM порт, а сразу все.
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Re: Универсальная инициализацию usart

Сообщение pokk »

HHIMERA писал(а):Да сама постановка задачи... уже бред... изначально... Исходники можно уже и не смотреть... даже...

По подробнее по подробнее пожалуйста, задача стоит только в инициализации.
Спойлер

Код: Выделить всё

//----------
// Definition aller UARTs
// Reihenfolge wie bei UART_NAME_t
//----------
UART_t UART[] = {
// Name, Clock               , AF-UART      ,UART  , Baud, Interrupt
  {COM3,RCC_APB1Periph_USART3,GPIO_AF_USART3,USART3,115200,USART3_IRQn, // UART3 mit 115200 Baud
// PORT , PIN      , Clock              , Source
  {GPIOC,GPIO_Pin_10,RCC_AHB1Periph_GPIOC,GPIO_PinSource10},  // TX an PC10
  {GPIOC,GPIO_Pin_11,RCC_AHB1Periph_GPIOC,GPIO_PinSource11}}, // RX an PC11
};
//----------
// init aller UARTs
//----------
void UB_Uart_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;
  UART_NAME_t nr;

  for(nr=0;nr<UART_ANZ;nr++) {

    // Clock enable der TX und RX Pins
    RCC_AHB1PeriphClockCmd(UART[nr].TX.CLK, ENABLE);
    RCC_AHB1PeriphClockCmd(UART[nr].RX.CLK, ENABLE);

    // Clock enable der UART
    if((UART[nr].UART==USART1) || (UART[nr].UART==USART6)) {
      RCC_APB2PeriphClockCmd(UART[nr].CLK, ENABLE);
    }
    else {
      RCC_APB1PeriphClockCmd(UART[nr].CLK, ENABLE);
    }

    // UART Alternative-Funktions mit den IO-Pins verbinden
    GPIO_PinAFConfig(UART[nr].TX.PORT,UART[nr].TX.SOURCE,UART[nr].AF);
    GPIO_PinAFConfig(UART[nr].RX.PORT,UART[nr].RX.SOURCE,UART[nr].AF);

    // UART als Alternative-Funktion mit PushPull
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    // TX-Pin
    GPIO_InitStructure.GPIO_Pin = UART[nr].TX.PIN;
    GPIO_Init(UART[nr].TX.PORT, &GPIO_InitStructure);
    // RX-Pin
    GPIO_InitStructure.GPIO_Pin =  UART[nr].RX.PIN;
    GPIO_Init(UART[nr].RX.PORT, &GPIO_InitStructure);

    // Oversampling
    USART_OverSampling8Cmd(UART[nr].UART, ENABLE);

    // init mit Baudrate, 8Databits, 1Stopbit, keine Paritдt, kein RTS+CTS
    USART_InitStructure.USART_BaudRate = UART[nr].BAUD;
    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(UART[nr].UART, &USART_InitStructure);

    // UART enable
    USART_Cmd(UART[nr].UART, ENABLE);

    // RX-Interrupt enable
    USART_ITConfig(UART[nr].UART, USART_IT_RXNE, ENABLE);

    // enable UART Interrupt-Vector
    NVIC_InitStructure.NVIC_IRQChannel = UART[nr].INT;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    // RX-Puffer vorbereiten
    UART_RX[nr].rx_buffer[0]=RX_END_CHR;
    UART_RX[nr].wr_ptr=0;
    UART_RX[nr].status=UART_RX_EMPTY;
  }
}


Единственное чем мне не нравится такой подход тем, что структура UART_t UART отбирает память.
А то что всё завернуто через 10 функций не особо пугает так в 90% случаев код инициализации выполняет единожды при включении питании. И то что код задержался на <1ms до входа while(1) обычно роли не играет.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Универсальная инициализацию usart

Сообщение HHIMERA »

Вам нравится??? Делайте... После оптимизации хорошо отлаживать??? Юзайте... В случае ошибок легко разобраться??? На здоровье...
Нравится куча текста на экране??? Красиво жить не запретишь...
"Я не даю готовых решений, я заставляю думать!"(С)
godz320
Родился
Сообщения: 19
Зарегистрирован: Пт янв 08, 2016 19:00:40

Re: Универсальная инициализацию usart

Сообщение godz320 »

HHIMERA писал(а):Вам нравится??? Делайте... После оптимизации хорошо отлаживать??? Юзайте... В случае ошибок легко разобраться??? На здоровье...
Нравится куча текста на экране??? Красиво жить не запретишь...


добрый день!

поддерживаю, нужно писать так, и текста мало, и разобраться легко! :music:


Код: Выделить всё

void main()
{
  //Enable port D clocking
  *(unsigned long*)(0x40023830) |= 0x8;
 
  //little delay for GPIOD get ready
  volatile unsigned long i=0;
  i++; i++; i++;
  i=0;
 
  //Set PD13 as General purpose output
  *(unsigned long*)(0x40020C00) = (*(unsigned long*)(0x40020C00)& (~0x0C000000)) | (0x04000000);
 
  while(1)
  {
    //Turn LED ON
    *(unsigned long*)(0x40020C14) |= 0x2000;
    //Delay
    for( i=0; i<1000000 ;++i );
    //Turn LED OFF
    *(unsigned long*)(0x40020C14) &= ~0x2000;
    //Delay
    for( i=0; i<1000000 ;++i );
  }
}
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Универсальная инициализацию usart

Сообщение HHIMERA »

Не... крайности... не наш метод...
"Я не даю готовых решений, я заставляю думать!"(С)
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Универсальная инициализацию usart

Сообщение a5021 »

godz320 писал(а):поддерживаю, нужно писать так, и текста мало, и разобраться легко! :music:

Много текста. Отступы, табуляцию, лишние пробелы и переводы строк уберите.
Ответить

Вернуться в «ARM»