完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、原理讲解 1. 串口功能框图 1).引脚 TX:数据发送 RX:是数据接收 SCLK:时钟,仅同步通信时使用 nRTS:请求发送(Request To Send) nCTS:允许发送(Clear To Send) 2).数据寄存器 9位有效,包含一个发送数据寄存器TDR和一个接收数据寄存器RDR。一个地址对应了两个物理内存。 数据帧相关寄存器 [tr]寄存器位作用[/tr]
[tr]步骤寄存器位作用[/tr]
USART_CR1、CR2、CR3 4).波特率 USART:USART1,时钟为72M 波特率:115200 二、所使用的函数 1.USART初始化函数(其主要功能就是利用结构体配置相应寄存器) USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct) 2.USART使能函数 USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState) 3.发送数据函数 USART_SendData(USART_TypeDef* USARTx, uint16_t Data) 4.接收数据函数 USART_ReceiveData(USART_TypeDef* USARTx) 5.读取串口标志位函数 USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG) 6.清除串口标志位函数 USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG) 三、代码编写过程 1.编写usart.h头文件 #ifndef __USART_H #define __USART_H #include "stm32f10x.h" #include void Usart_Config(void); void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch); void Usart_SendString( USART_TypeDef * pUSARTx, char *str); void Usart_SendHalfWord( USART_TypeDef * pUSARTx, uint16_t ch); #endif 2.编写usart.c文件 1).USART初始化函数 void Usart_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; /* 打开串口GPIO的时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /* 打开串口外设的时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); /* 将USART Tx的GPIO配置为推挽复用模式 */ 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); /* 将USART Rx的GPIO配置为浮空输入模式 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); /* 配置串口的工作参数 */ USART_InitStructure.USART_BaudRate = USART_BAUDRATE; //配置波特率 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_Cmd(USART1, ENABLE); //使能串口 } 2).发送8bits数据的函数 void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch) { USART_SendData(pUSARTx,ch); while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET); } 3).发送字符串的函数 void Usart_SendString( USART_TypeDef * pUSARTx, char *str) { unsigned int k=0; do { Usart_SendByte( pUSARTx, *(str + k) ); k++; } while(*(str + k)!=' |