#include "MKL25Z4.h"\n\n#define BUFFER_SIZE 50\n\nvolatile uint8_t rxBuffer[BUFFER_SIZE];\nvolatile uint8_t rxIndex = 0;\n\nvoid UART2_Init(void)\n{\n // Enable clock for UART2\n SIM->SCGC4 |= SIM_SCGC4_UART2_MASK;\n \n // Enable clock for Port D\n SIM->SCGC5 |= SIM_SCGC5_PORTD_MASK;\n \n // Select alternative function for UART2 pins (PTD2 and PTD3)\n PORTD->PCR[2] = PORT_PCR_MUX(3);\n PORTD->PCR[3] = PORT_PCR_MUX(3);\n \n // Disable UART2 before configuring\n UART2->C2 &= ~UART_C2_TE_MASK;\n UART2->C2 &= ~UART_C2_RE_MASK;\n \n // Set UART2 baud rate to 115200\n UART2->BDH = 0x00;\n UART2->BDL = 0x17;\n \n // Enable UART2 transmitter and receiver\n UART2->C2 |= UART_C2_TE_MASK;\n UART2->C2 |= UART_C2_RE_MASK;\n \n // Enable UART2 receiver interrupt\n UART2->C2 |= UART_C2_RIE_MASK;\n \n // Enable UART2 interrupt in NVIC\n NVIC_SetPriority(UART2_IRQn, 3);\n NVIC_EnableIRQ(UART2_IRQn);\n}\n\nvoid UART_Transmit(UART_Type *UARTx, uint8_t *data, uint16_t size)\n{\n while (size--)\n {\n // Wait for UART transmit buffer to be empty\n while (!(UARTx->S1 & UART_S1_TDRE_MASK))\n {\n }\n \n // Send data\n UARTx->D = *data++;\n }\n \n // Wait for UART transmit buffer to be empty\n while (!(UARTx->S1 & UART_S1_TC_MASK))\n {\n }\n}\n\nvoid UART2_IRQHandler(void)\n{\n // Check if UART2 receive data register is full\n if (UART2->S1 & UART_S1_RDRF_MASK)\n {\n // Read received data\n rxBuffer[rxIndex++] = UART2->D;\n \n // Reset receive buffer index if it exceeds buffer size\n if (rxIndex >= BUFFER_SIZE)\n {\n rxIndex = 0;\n }\n }\n}\n\nint main(void)\n{\n // Initialize UART2\n UART2_Init();\n \n // Array of data to be sent\n uint8_t txData[] = {0x01, 0x02, 0x03, 0x04, 0x05};\n \n // Send data using UART2\n UART_Transmit(UART2, txData, sizeof(txData));\n \n // Infinite loop\n while (1)\n {\n // Do nothing\n }\n}

SKEAZ128xxx4 控制器:使用 C 语言实现 UART2 串口通信 (波特率 115200)

原文地址: https://www.cveoy.top/t/topic/qd47 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录