项目简介
本项目是专为Microchip AVR设备开发的中断驱动且带缓冲的UART库。该库依据Microchip的技术简报实现,在功能和命名规范上遵循其标准。支持多达8个并发UART,每个UART具备独立功能和循环缓冲区,可独立工作。同时支持向USART发送普通字符、字符串以及格式化字符串到FILE
流。
项目的主要特性和功能
- 多设备支持:支持megaAVR 0 - series、tinyAVR 0 - series、tinyAVR 1 - series、AVR DA、AVR DD、AVR DB和AVR EA等多种Microchip AVR设备系列。
- 并发UART支持:最多能同时支持8个UART,可按微控制器能力以任意顺序和数量启用。
- 数据传输:支持发送普通字符、字符串,还可通过标准
avr - gcc <stdio.h>
命令发送格式化字符串到FILE
流。 - 独立缓冲区:每个UART拥有独立的循环接收(Rx)和发送(Tx)缓冲区,保障数据传输的独立性与流畅性。
- 低内存占用:提供的标准函数集内存占用较低。
安装使用步骤
假设您已下载本项目的源码文件。
编译环境
库设置
所有库设置在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_P
和fprintf_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】