基于IAR的ATmega128 USART通信程序详解

版权申诉
0 下载量 150 浏览量 更新于2024-11-05 收藏 115KB RAR 举报
资源摘要信息: "本资源为一个基于atmega128微控制器的串行通讯(USART)示例程序,该程序以IAR集成开发环境(IDE)编写,适用于ATmega128芯片。以下将详细解释与本资源相关的关键知识点。 1. USART通讯协议:USART(Universal Synchronous and Asynchronous Receiver Transmitter)是微控制器中常用的串行通讯接口,可以实现单片机与其他设备或计算机之间的数据交换。USART支持同步和异步模式,异步模式不需要外部时钟信号,因为发送和接收双方共享一个时钟基准。在本资源中,ATmega128的USART功能将被用于数据传输。 2. ATmega128微控制器:ATmega128是一款高性能、低功耗的8位微控制器,属于AVR系列,由Atmel公司(现已被Microchip收购)生产。它拥有128KB的闪存、4KB的 EEPROM 和 4KB的内部SRAM,可以执行复杂的应用程序。ATmega128内置多种通信接口,包括USART、SPI、I2C等,使其非常适合用于需要多串口通信的应用场景。 3. IAR集成开发环境:IAR是业界广泛使用的嵌入式系统开发工具,提供了一套完整的开发套件,支持C和C++编程语言。它为开发者提供了代码编辑、编译、调试等功能,并且支持多种微控制器平台。IAR支持高度优化的代码生成,以及对微控制器的底层硬件操作的完整控制。本资源中的程序是使用IAR编写的,用户可以根据需要对其进行修改,并且可以适应于其他兼容的编译器。 4. 串口参数配置:串口通讯中,参数配置非常重要,包括波特率(传输速率)、数据位、停止位和校验位等。正确的配置可以确保数据准确无误地在发送方和接收方之间传输。在本程序中,用户可以根据需要对这些参数进行配置,以满足不同的通讯需求。 5. 多串口芯片:ATmega128微控制器支持两个独立的USART接口,这意味着在同一块芯片上可以同时支持两个不同的串行通讯端口。这对于需要同时与多个外部设备通讯的应用来说非常有用。本资源的程序示例展示了如何配置和使用ATmega128的USART接口,适用于需要多串口通信的应用场景。 6. 程序移植:虽然本资源提供的程序是基于IAR开发环境编写的,但是它经过了设计,使得用户可以将其移植到其他支持AVR微控制器的编译器中。移植过程中可能需要进行一些编译器相关的调整,比如头文件的包含路径、编译器特定的预处理指令等,但总体上需要的改动较小,提供了很好的跨平台兼容性。 综上所述,本资源是一个关于在ATmega128微控制器上使用USART进行数据通信的基础示例程序。它使用了IAR开发环境编写,具有良好的移植性和可配置性,并且适用于需要实现多串口通讯的应用。掌握这些知识点对于开发嵌入式系统和微控制器项目是非常有帮助的。"
2023-07-23 上传
2023-07-23 上传
2023-07-24 上传

void myUSART_Init() { RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); USART_InitTypeDef USART_InitStuctyre; USART_InitStuctyre.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_InitStuctyre.USART_Parity = USART_Parity_No; USART_InitStuctyre.USART_StopBits = USART_StopBits_1; USART_InitStuctyre.USART_BaudRate = 9600; USART_InitStuctyre.USART_WordLength = USART_WordLength_8b; USART_InitStuctyre.USART_HardwareFlowControl =USART_HardwareFlowControl_None; USART_Init(USART1,&USART_InitStuctyre); USART_Cmd(USART1,ENABLE); USART_ITConfig(USART1,USART_IT_TXE,ENABLE); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; NVIC_Init(&NVIC_InitStructure); } void myUSARTsend_Byte(uint16_t Byte) { USART_SendData(USART1,Byte); while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET); } void myUSARTsend_Array(uint8_t *Array,uint16_t Length) { uint16_t i; for(i=0;i<=Length;i++) { myUSARTsend_Byte(Array[i]); } }

2023-07-14 上传

#include "stm32f10x.h" #include "oled.h" #include "USART.h" void USART1_IRQHandler(void) { if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { uint8_t data = USART_ReceiveData(USART1); if (usart_rx_len < USART_RX_BUF_SIZE) { usart_rx_buf[usart_rx_len++] = data; } } } void USART1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_Cmd(USART1, ENABLE); }

2023-06-03 上传