项目简介
本项目是一个面向tiny - 和megaAVR系列微控制器的UART(通用异步收发传输器)库。该库参考Microchip的技术文档TB3216,在功能和命名规范上遵循相关约定。它支持多达6个并发的UART,每个UART都配备独立的循环缓冲区,可相互独立工作。项目编译后的代码大小较小,适用于多种AVR设备。
项目的主要特性和功能
- 多UART支持:最多支持6个并发的UART,可依据微控制器的能力按任意顺序和数量启用。
- 独立缓冲区:每个UART都有自己的循环缓冲区,能独立处理数据。
- 丰富的函数接口:提供初始化、发送字符、发送字符串、读取字符和关闭UART等功能函数。
- 文件流支持:支持使用
fprintf
函数向每个UART打印格式化字符串。
安装使用步骤
准备工作
假设用户已经下载了本项目的源码文件,编译步骤最初在UNIX机器(如Apple Mac)上完成,也可在Microchip Studio中编译。
参数设置
所有库的设置在uart_settings.h
和uart_settings.c
中完成:
1. 设置缓冲区大小:在uart_settings.h
中,通过RBUFFER_SIZE
定义Rx和Tx环形缓冲区的大小,可选值为2、4、8、16、32、64或128,默认值为32。
2. 启用USART单元:在uart_settings.h
中,取消注释相应的#define USARTn_ENABLE
来启用USART单元,最多支持6个。
3. 分配PORTMUX和Rx、Tx引脚:根据所选的USARTn和引脚,在uart_settings.c
中设置PORTMUX和引脚方向。
使用示例
```c // (1) - 初始化USART usart0_init((uint16_t)BAUD_RATE(9600));
// (2) - 启用全局中断 sei();
// (3) - 向USART发送字符串 usart0_send_string("\r\n\r\nPEACE BRO!\r\n\r\n", 18);
// (4) - 使用fprintf写入流 fprintf(&USART0_stream, "Hello world!\r\n");
for(size_t i=0; i<5; i++) { // (5) - 使用格式化的fprintf写入流 fprintf(&USART0_stream, "\r\nCounter value is: 0x%02X ", j++); _delay_ms(500);
// (6) - 通过轮询环形缓冲区获取USART输入
while(!((c = usart0_read_char()) & USART_NO_DATA)) {
if (c & USART_PARITY_ERROR) {
fprintf(&USART0_stream, "USART PARITY ERROR: ");
}
if (c & USART_FRAME_ERROR) {
fprintf(&USART0_stream, "USART FRAME ERROR: ");
}
if (c & USART_BUFFER_OVERFLOW) {
fprintf(&USART0_stream, "USART BUFFER OVERFLOW ERROR: ");
}
// (7) - 向USART发送单个字符
usart0_send_char((char)c);
}
}
// (8) - 在关闭USART之前检查所有内容是否已打印 fprintf(&USART0_stream, "\r\n\r\n<-<->->");
// (9) - 关闭USART0 usart0_close();
// (10) - 清除全局中断
cli();
``
注意,调用
init()、
sei()、
usart0_close()和
cli()`的顺序对正确操作至关重要。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】