<https://forbot.pl/forum/topic/8403-kurs-stm32-5-komunikacja-z-komputerem-uart/#comment-88316>
<http://schema.org/text>
"Mam pytanie z innej beczki próbuje skonfigurować USART w STM32F103RTB6  z obsługą przerwań oraz buforem cyklicznym. USART podłączony jest do SN75176 ( transceiver RS485) schemat poniżej: \n \n\nMój problem jest taki że procesor w ogóle nie wchodzi do przerwania USART1_IRQHandler oraz wygląda jakby się zawiesił. Dodatkowo jeśli wysyłam w taki sposób USART_SendData(USART1, 'X'); zamiast  USART_Puts( USART1, \"485 test!\\n\" ); to transmisja działa. Wychodzi więc, że błąd jest gdzieś w funkcji SendChar lub w konfiguracji ale niestety nie potrafię go znaleźć. Chciałbym prosić bardziej doświadczonych forumowiczów o pomoc w rozwiązaniu problemu. \n\nkonfiguracja USART1 9600 8e1: \n\n\nvoid RS485_Configuration(uint32_t baudrate, uint16_t parity)\n{\nGPIO_InitTypeDef GPIO_InitStructure;\nUSART_InitTypeDef USART_InitStructure;\nUSART_ClockInitTypeDef USART_ClockInitStructure;\nNVIC_InitTypeDef NVIC_InitStructure;\nUSART_DeInit(USART1);\n\n#ifdef  VECT_TAB_RAM\n/* Set the Vector Table base location at 0x20000000 */\nNVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);\n#else  /* VECT_TAB_FLASH  */\n/* Set the Vector Table base location at 0x08000000 */\nNVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);\n#endif\n\n/* Enable the USART1 Interrupt */\nNVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; // USART1_IRQn\nNVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;\nNVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;\nNVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;\nNVIC_Init(&amp;NVIC_InitStructure);\n\n/* Config DE/nRE */\n/* Configure (PA.11) as Output push-pull */\nGPIO_InitStructure.GPIO_Pin = DO_485;\nGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\nGPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;\nGPIO_Init(GPIOA, &amp;GPIO_InitStructure);\n\n/* Configure USART1 Tx (PA.9) as alternate function push-pull */\nGPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;\nGPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;\nGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\nGPIO_Init(GPIOA, &amp;GPIO_InitStructure);\n\n/* Configure USART1 Rx (PA.10) as input floating */\nGPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;\nGPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;\nGPIO_Init(GPIOA, &amp;GPIO_InitStructure);\n\nUSART_InitStructure.USART_BaudRate = baudrate;\nUSART_InitStructure.USART_WordLength = USART_WordLength_9b;\nUSART_InitStructure.USART_StopBits = USART_StopBits_1;\n\nif( (parity != USART_Parity_Even) &amp;&amp; (parity != USART_Parity_Odd) )\n{\n\tparity = USART_Parity_No;\n}\nUSART_InitStructure.USART_Parity = parity ;\n\nUSART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;\nUSART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;\n\nUSART_ClockInitStructure.USART_Clock  = USART_Clock_Disable;\nUSART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;\nUSART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;\nUSART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;\n\n\n/* Configure the USART1 */\nUSART_Init(USART1, &amp;USART_InitStructure);\nUSART_ClockInit(USART1,&amp;USART_ClockInitStructure);\n\n/* Enable the USART1 */\nUSART_Cmd(USART1, ENABLE);\n\n/* Send RS485 in Rece Mode */\nSendMode(FALSE);\n}\n\n\n\n\nFunkcja SendChar: \n\n\nvoid USART_SendChar(USART_TypeDef* USARTx, uint8_t Char)\n{\n/* Check the parameters */\nassert_param(IS_USART_ALL_PERIPH(USARTx));\nassert_param(IS_USART_DATA(Char));\n\n/* Fill Tx buffor */\nuint8_t tmp_head;\ntmp_head = (Buffer.TxBeg+1) &amp; TX_BUF_MASK;\nwhile(tmp_head == Buffer.TxEnd) {}\nBuffer.TxBuf[tmp_head]=Char;\nBuffer.TxBeg=tmp_head;\n\n/* Turn On Tx Interrupt / Starting transmit */\nUSART_ITConfig(USARTx, USART_IT_TXE, ENABLE);\n}\n\n\n\nFunkcja Puts \n\nvoid USART_Puts( USART_TypeDef* USARTx, char *s )\n{\nregister uint8_t c;\nwhile ((c = *s++)) USART_SendChar( USARTx, c );\n}\n\n\n"
<https://forbot.pl/forum/topic/8403-kurs-stm32-5-komunikacja-z-komputerem-uart/>