mega16 UART串口通信程序在icc环境的应用

版权申诉
0 下载量 193 浏览量 更新于2024-11-12 收藏 24KB RAR 举报
资源摘要信息:"UART通信协议是一种广泛使用的串行通信协议,它的全称是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)。UART通信不需要严格的时钟同步信号,允许在两个设备间进行全双工的通信。每个UART设备都有自己的时钟和帧格式设置,因此在进行通信时,发送方和接收方需要预先约定好这些设置。UART通信协议广泛应用于微控制器和计算机的串行端口之间,如PC的串行端口,微控制器与PC或其他微控制器之间的通信,以及微控制器与其他串行设备之间的通信。UART通信的典型应用场景包括数据采集、传感器数据传输、无线模块数据传输等。UART具有成本低、结构简单、易于实现的优点,因此在嵌入式系统设计中得到了广泛的应用。" 在本资源中,用户提到了"mega16",这可能是指特定的微控制器型号。根据描述,本资源涉及的是在特定软件环境(ICC软件环境)下,针对mega16微控制器编写的串口通信程序。ICC软件环境可能指的是Integrating Compiler Collection的集成编译器集合,它是一个面向微控制器编程的软件开发环境。在ICC环境下编写程序通常意味着用户在使用针对特定微控制器系列的开发工具和库函数。 由于文件名中出现了"mega16_c_uart"和"mega16_uart"等关键词,我们可以推断该资源包含了针对mega16型号微控制器的C语言UART通信程序源代码。在嵌入式系统中,C语言因其执行效率高、可移植性好等特点成为编写这类底层硬件接口程序的常用语言。程序中可能包括对UART模块初始化、配置串口参数、设置波特率、数据位、停止位和校验位等串行通信参数,以及实现数据的发送和接收的函数。 本资源中的文件名"16_UART"可能是该程序的项目名称或者源代码文件的名称。根据这些信息,该程序很可能是一个完整的项目,包含了编写、编译和测试UART通信所需的所有代码。 用户在描述中提到的"uart_mega16_icc"标签意味着本资源是在ICC环境下开发的mega16微控制器UART通信程序,这有助于其他开发者快速定位资源的用途和开发环境。 由于微控制器的具体型号、软件环境和开发语言都有具体要求,所以该资源对于需要在mega16微控制器上实现串口通信的工程师或爱好者来说,是非常有价值的参考资料。它不仅包含了一个现成的编程示例,还可以作为学习和参考,帮助开发者理解如何在特定微控制器上使用UART进行数据通信。通过分析和学习这个资源,开发者可以深入理解UART通信协议,以及如何在实际项目中实现高效的串口通信。

注释以下每一行代码#include "bflb_mtimer.h" #include "bflb_uart.h" #include "bflb_clock.h" #include "board.h" struct bflb_device_s *uartx; void uart_isr(int irq, void *arg) { uint32_t intstatus = bflb_uart_get_intstatus(uartx); int ret; uint32_t baudrate; if (intstatus & UART_INTSTS_RX_AD5) { bflb_uart_int_clear(uartx, UART_INTCLR_RX_AD5); ret = bflb_uart_feature_control(uartx, UART_CMD_GET_AUTO_BAUD, UART_AUTO_BAUD_0X55); baudrate = bflb_clk_get_peripheral_clock(BFLB_DEVICE_TYPE_UART, uartx->idx) / (ret + 1); printf("Detected baudrate by 0x55 is %d\r\n", baudrate); } if (intstatus & UART_INTSTS_RX_ADS) { bflb_uart_int_clear(uartx, UART_INTCLR_RX_ADS); ret = bflb_uart_feature_control(uartx, UART_CMD_GET_AUTO_BAUD, UART_AUTO_BAUD_START); baudrate = bflb_clk_get_peripheral_clock(BFLB_DEVICE_TYPE_UART, uartx->idx) / (ret + 1); printf("Detected baudrate by startbit is %d\r\n", baudrate); } } int main(void) { board_init(); board_uartx_gpio_init(); uartx = bflb_device_get_by_name(DEFAULT_TEST_UART); struct bflb_uart_config_s cfg; cfg.baudrate = 2000000; cfg.data_bits = UART_DATA_BITS_8; cfg.stop_bits = UART_STOP_BITS_1; cfg.parity = UART_PARITY_NONE; cfg.flow_ctrl = 0; cfg.tx_fifo_threshold = 7; cfg.rx_fifo_threshold = 7; bflb_uart_init(uartx, &cfg); bflb_uart_feature_control(uartx, UART_CMD_SET_AUTO_BAUD, 1); bflb_uart_feature_control(uartx, UART_CMD_SET_ABR_ALLOWABLE_ERROR, 3); bflb_irq_attach(uartx->irq_num, uart_isr, NULL); bflb_irq_enable(uartx->irq_num); while (1) { } }

2023-05-15 上传