tm4c串口接收数据例程
时间: 2023-07-23 14:59:42 浏览: 137
以下是一个使用TM4C系列微控制器的UART串口接收数据的例程:
```c
#include <stdint.h>
#include "inc/tm4c123gh6pm.h"
#define BUFFER_SIZE 256
volatile uint8_t rxBuffer[BUFFER_SIZE];
volatile uint32_t rxIndex = 0;
void UART0_Init(void) {
// 启用UART0和PortA的时钟
SYSCTL_RCGCUART_R |= SYSCTL_RCGCUART_R0;
SYSCTL_RCGCGPIO_R |= SYSCTL_RCGCGPIO_R0;
// 等待UART0和PortA的时钟稳定
while ((SYSCTL_PRGPIO_R & SYSCTL_PRGPIO_R0) == 0) {}
// 设置引脚PA0和PA1为UART功能
GPIO_PORTA_AFSEL_R |= 0x03;
GPIO_PORTA_PCTL_R = (GPIO_PORTA_PCTL_R & 0xFFFFFF00) + 0x00000011;
GPIO_PORTA_DEN_R |= 0x03;
// 关闭UART0,以便进行配置
UART0_CTL_R &= ~UART_CTL_UARTEN;
// 设置波特率为115200
UART0_IBRD_R = 8;
UART0_FBRD_R = 44;
// 配置线路控制、数据位、停止位和校验位
UART0_LCRH_R = (UART_LCRH_WLEN_8 | UART_LCRH_FEN);
// 使能UART0的接收中断
UART0_IM_R |= UART_IM_RXIM;
// 使能UART0和接收中断
UART0_CTL_R |= (UART_CTL_UARTEN | UART_CTL_RXE | UART_CTL_TXE);
// 允许中断
NVIC_EN0_R |= 1 << (INT_UART0 - 16);
}
void UART0_Handler(void) {
// 接收到数据时触发中断
if (UART0_MIS_R & UART_MIS_RXMIS) {
// 读取接收数据
rxBuffer[rxIndex] = UART0_DR_R;
// 处理接收数据,例如输出到LED等
// ...
// 更新接收缓冲区索引
rxIndex = (rxIndex + 1) % BUFFER_SIZE;
// 清除中断标志位
UART0_ICR_R |= UART_ICR_RXIC;
}
}
int main(void) {
// 初始化UART0
UART0_Init();
// 主循环
while (1) {
// 做其他的事情...
}
}
```
这个例程使用UART0和PortA的引脚PA0和PA1来进行串口通信。在UART0的中断处理函数中,接收到的数据会存储在rxBuffer缓冲区中,并且可以在主循环中进行处理。你可以根据自己的需求修改和扩展这个例程。
阅读全文