AVR平台串口编程教程:GCC工具链使用

版权申诉
0 下载量 58 浏览量 更新于2024-11-02 收藏 2KB RAR 举报
资源摘要信息:"usart.rar_usart avr gcc" 1. USART简介 串行通信是计算机与其他设备之间交换数据的一种方式,其中通用同步/异步收发传输器(USART)是一种广泛使用的串行通信接口。USART可以工作在同步模式和异步模式下,支持全双工通信。它被广泛应用于微控制器与PC机、外围设备以及其他微控制器之间的通信。 2. AVR微控制器 AVR微控制器是由Atmel公司开发的一系列基于精简指令集(RISC)的8位微控制器。AVR系列拥有高性能、低功耗的特点,并且拥有丰富的片上资源,如内部振荡器、定时器、模拟比较器、模数转换器以及用于串行通信的USART等。AVR微控制器通常用于需要高性能和低功耗的应用,如消费电子、工业控制、汽车电子以及通信设备等。 3. GCC编译器 GCC(GNU Compiler Collection)是一个开源的编译器集合,支持多种编程语言和多个目标平台。GCC支持C、C++、Objective-C、Fortran、Java、Ada等语言的编译,并能够生成多种处理器架构的机器代码。对于嵌入式领域,GCC提供了许多针对不同目标处理器的编译器,其中包括AVR-GCC编译器。AVR-GCC是GCC的一个移植版本,专门用于编译运行在AVR微控制器上的程序。 4. 串口通信程序编写 在嵌入式系统中,编写串口通信程序通常需要配置微控制器的相关寄存器,包括波特率、数据位、停止位、校验位等参数,确保数据能够正确地发送和接收。程序中需要包含初始化串口的代码、发送数据的函数以及接收数据的处理逻辑。 5. usart.c和usart.h文件功能 在这个RAR压缩包中包含了两个关键的文件:usart.c和usart.h。这两个文件分别对应C语言的源代码和头文件。 - usart.h文件 这个头文件通常包含与串口通信相关的一些宏定义、类型定义以及函数声明。它为usart.c文件提供接口定义,方便其他程序文件通过包含这个头文件来使用串口通信的功能。在头文件中可能定义了波特率的设置、串口初始化函数的声明等。 - usart.c文件 这个源代码文件则包含了实现串口通信功能的函数和逻辑。具体而言,它可能会包含以下内容: a) 串口初始化函数:用于设置波特率、串口模式等参数; b) 发送数据函数:用于将数据通过串口发送到其他设备; c) 接收数据函数:用于从串口接收数据; d) 中断服务例程:如果使用中断方式进行数据接收,需要编写相应的中断服务例程。 6. 程序适用性 根据描述,这个串口程序是通用的,意味着它被设计为可以在多种AVR微控制器上运行,包括但不限于mega8、mega16、mega32、mega64和mega128。这些微控制器是ATmega系列的成员,广泛用于各种嵌入式系统中。为这些微控制器编写通用代码,需要考虑到不同型号之间的寄存器差异和资源限制。 7. 使用场景 这种基于AVR和GCC的串口程序,广泛应用于需要通过串行接口进行数据交换的嵌入式系统。比如,它可能被用于与PC机进行通信的设备,或是多个嵌入式设备之间的数据交互。通过串口通信,可以实现设备的远程控制、数据采集、信息显示等多种功能。
2023-07-23 上传

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 上传
2023-07-23 上传
2023-07-24 上传

#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 上传