к1986ве92fi прерывания UART_часть6
к1986ве92fi прерывания UART_часть6
volatile uint8_t uart_rx_byte = 0; volatile uint8_t uart_rx_flag = 0; void UART1_Init(void) { RST_CLK_FreqTypeDef clk; RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTB, ENABLE); RST_CLK_GetClocksFreq(&clk); PORT_InitTypeDef portInit; PORT_StructInit(&portInit); portInit.PORT_Pin = PORT_Pin_5; portInit.PORT_OE = PORT_OE_OUT; portInit.PORT_PULL_UP = PORT_PULL_UP_OFF; portInit.PORT_PULL_DOWN = PORT_PULL_DOWN_OFF; portInit.PORT_PD_SHM = PORT_PD_SHM_OFF; portInit.PORT_PD = PORT_PD_DRIVER; portInit.PORT_GFEN = PORT_GFEN_OFF; portInit.PORT_FUNC = PORT_FUNC_ALTER; portInit.PORT_SPEED = PORT_SPEED_FAST; portInit.PORT_MODE = PORT_MODE_DIGITAL; PORT_Init(MDR_PORTB, &portInit); portInit.PORT_Pin = PORT_Pin_6; portInit.PORT_OE = PORT_OE_OUT; portInit.PORT_PULL_UP = PORT_PULL_UP_OFF; portInit.PORT_PULL_DOWN = PORT_PULL_DOWN_OFF; portInit.PORT_PD_SHM = PORT_PD_SHM_OFF; portInit.PORT_PD = PORT_PD_DRIVER; portInit.PORT_GFEN = PORT_GFEN_OFF; portInit.PORT_FUNC = PORT_FUNC_ALTER; portInit.PORT_SPEED = PORT_SPEED_FAST; portInit.PORT_MODE = PORT_MODE_DIGITAL; PORT_Init(MDR_PORTB, &portInit); UART_InitTypeDef uart; RST_CLK_PCLKcmd(RST_CLK_PCLK_UART1, ENABLE); UART_BRGInit(MDR_UART1, UART_HCLKdiv1); UART_StructInit(&uart); uart.UART_BaudRate = 115200; uart.UART_WordLength = UART_WordLength8b; uart.UART_StopBits = UART_StopBits1; uart.UART_Parity = UART_Parity_No; uart.UART_FIFOMode = UART_FIFO_OFF; UART_Init(MDR_UART1, &uart); UART_Cmd(MDR_UART1, ENABLE); // Включаем прерывание по приему UART_ITConfig(MDR_UART1, UART_IT_RX, ENABLE); NVIC_SetPriority(UART1_IRQn, 3); NVIC_EnableIRQ(UART1_IRQn); } // Обработчик прерывания UART1 void UART1_IRQHandler(void) { if (UART_GetITStatus(MDR_UART1, UART_IT_RX)) { uart_rx_byte = UART_ReceiveData(MDR_UART1) & 0xFF; uart_rx_flag = 1; // Отправляем принятый байт обратно (эхо) UART1_SendByte(uart_rx_byte); // Сбрасываем флаг прерывания UART_ClearITPendingBit(MDR_UART1, UART_IT_RX); } }