--- irmp.c.orig 2021-01-27 13:09:16.000000000 +0100 +++ irmp.c 2021-01-28 03:49:25.062008857 +0100 @@ -856,7 +856,7 @@ irmp_protocol_names[IRMP_N_PROTOCOLS + 1 # define STM32_UART_COM USART2 # define STM32_UART_BAUD 115200 // 115200 Baud # include "stm32f4xx_usart.h" -#elif defined(ARM_STM32F10X) +#elif defined(ARM_STM32F10X) || defined(ARM_STM32F30X) # define STM32_UART_COM USART3 // UART3 on PB10 #elif defined(ARDUINO) // Arduino Serial implementation # if defined(USB_SERIAL) @@ -999,6 +999,42 @@ irmp_uart_init (void) // UART enable USART_Cmd(STM32_UART_COM, ENABLE); +#elif defined(ARM_STM32F30X) + GPIO_InitTypeDef GPIO_InitStructure; + USART_InitTypeDef USART_InitStructure; + + // Clock enable vom TX Pin + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); // UART3 an PB10 + + // Clock enable der UART + RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); + + // UART Alternative-Funktion mit dem IO-Pin verbinden + GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_7); + + // UART als Alternative-Funktion mit PushPull + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + + // TX-Pin + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + // Oversampling + USART_OverSampling8Cmd(STM32_UART_COM, ENABLE); + + // init baud rate, 8 data bits, 1 stop bit, no parity, no RTS+CTS + 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_Tx; + USART_Init(STM32_UART_COM, &USART_InitStructure); + + // UART enable + USART_Cmd(STM32_UART_COM, ENABLE); + #elif defined(ARDUINO) // we use the Arduino Serial Imlementation // you have to call Serial.begin(SER_BAUD); in Arduino setup() function @@ -1049,7 +1085,7 @@ void irmp_uart_putc (unsigned char ch) { #ifndef UNIX_OR_WINDOWS -#if defined(ARM_STM32F4XX) || defined(ARM_STM32F10X) +#if defined(ARM_STM32F4XX) || defined(ARM_STM32F10X) || defined(ARM_STM32F30X) // warten bis altes Byte gesendet wurde while (USART_GetFlagStatus(STM32_UART_COM, USART_FLAG_TXE) == RESET) {