littlebot
Published on 2025-04-18 / 1 Visits
0

【源码】基于AVR微控制器的通用异步收发器(UART)通信库

项目简介

本项目是专为Microchip AVR设备开发的中断驱动且带缓冲的UART库。该库依据Microchip的技术简报实现,在功能和命名规范上遵循其标准。支持多达8个并发UART,每个UART具备独立功能和循环缓冲区,可独立工作。同时支持向USART发送普通字符、字符串以及格式化字符串到FILE流。

项目的主要特性和功能

  1. 多设备支持:支持megaAVR 0 - series、tinyAVR 0 - series、tinyAVR 1 - series、AVR DA、AVR DD、AVR DB和AVR EA等多种Microchip AVR设备系列。
  2. 并发UART支持:最多能同时支持8个UART,可按微控制器能力以任意顺序和数量启用。
  3. 数据传输:支持发送普通字符、字符串,还可通过标准avr - gcc <stdio.h>命令发送格式化字符串到FILE流。
  4. 独立缓冲区:每个UART拥有独立的循环接收(Rx)和发送(Tx)缓冲区,保障数据传输的独立性与流畅性。
  5. 低内存占用:提供的标准函数集内存占用较低。

安装使用步骤

假设您已下载本项目的源码文件。

编译环境

库设置

所有库设置在uart.h中完成: 1. 设置缓冲区大小:RBUFFER_SIZE定义Rx和Tx的环形缓冲区大小,值需为{2, 4, 8, 16, 32, 64, 128}中的一个,默认值为32。 2. 启用USART单元:取消注释相应的#define USARTx_ENABLE来启用USART单元。 3. 启用USART流:若需使用avr - gcc <stdio.h>中与格式化字符串和打印到流相关的函数,启用#define USART_STREAM

使用库的步骤

以下是使用库的基本步骤,调用usart_init()sei()usart_close()cli()的顺序对正确操作至关重要。 1. UART设置:设置PORT、PORTMUX路由以及所选的TX和RX引脚。 c usart_set(&usart0, &PORTA, PORTMUX_USART0_DEFAULT_gc, PIN0_bm, PIN1_bm); 2. 初始化UART:在启用全局中断之前初始化库。 c usart_init(&usart0, (uint16_t)BAUD_RATE(9600)); 3. 启用全局中断:启用全局中断后库开始工作。 c sei(); 4. 发送字符串到UART:使用usart_send_string()发送普通字符串。 c usart_send_string(&usart0, "\r\n\r\nLove & Peace!\r\n\r\n"); 5. 使用格式化字符串:使用sprintf_Pfprintf_P格式化并发送字符串到FILE流。 c sprintf_P(buffer, PSTR("Hello world!\r\n")); fputs(buffer, &usart0_stream); 6. 获取Rx计数:使用usart_rx_count()返回Rx缓冲区中读取字符的字节数。 c sprintf_P(buffer, PSTR("rx count: %i "), usart_rx_count(&usart0)); fputs(buffer, &usart0_stream); 7. 通过轮询环形缓冲区获取UART输入:使用usart_read_char()从接收环形缓冲区读取输入。 c while(!((c = usart_read_char(&usart0)) & USART_NO_DATA)) { // 处理接收到的数据 } 8. 发送单个字符到UART:使用usart_send_char()发送单个字符。 c usart_send_char(&usart0, (char)c); 9. 检查是否全部打印:在关闭UART之前检查是否所有数据都已正确打印。 c fprintf_P(&usart0_stream, PSTR("\r\n\r\n<-<->->")); 10. 关闭UART:正确关闭UART设备,确保数据不丢失。 c usart_close(&usart0); 11. 清除全局中断:在usart_close()之后调用cli()c cli();

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】