1、串口收发数据 姓名 唐珊珊 班级2011物联网 学号2011412614 实验目的:掌握串口的使用,设置方法及收发数据的方法。 实验原理:调用固件库对USART2进行设置,实现通过超级串口输入回显功能。 实验步骤:要实现本实验功能设计,需要进行必要的设置,其步骤如下: 1、 使能并设置相关GPIO. 2、 配置USART2波特率为115200,8位数据位,1位停止位,无校验无硬件流控制。 3、 启动USART2并将收到的数据通过USART2发送,进行回显。 注意:USART2使用的是重映射后的管脚,所以AFIO的时钟,也需要使能。 程序如下: #include "stm3
2、2f10x.h" #include "stdio.h" void GPIO_Config(void); void COM_Init(void); int main(void) { uint8_t ch;//定义一个8位缓存变量ch GPIO_Config();//设置GPIO COM_Init();//初始化串口 while(1) { if(USART_GetFlagStatus(USART2,USART_FLAG_RXNE)!=RESET)//如果USART2的接受标志位不为0,即已经接受到数据 { ch=USART_ReceiveData(
3、USART2);//将USART2接收到的数据放入变量ch缓存 USART_SendData(USART2,ch);//通过USART2发送ch的内容 } } } void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);//使能 GPIO_PinRemapConfig(GPIO_Remap_USART
4、2, ENABLE);//使能usaRt2管脚重映设 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_InitStruc
5、ture.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6; GPIO_Init(GPIOD, &GPIO_InitStructure); } void COM_Init(void) { USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate=115200; USART_InitStructure.USART_WordLength=USART_Wor
6、dLength_8b; USART_InitStructure.USART_StopBits=USART_StopBits_1; USART_InitStructure.USART_Parity=USART_Parity_No; USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx; USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlo
7、wControl_None; USART_Init(USART2, &USART_InitStructure); USART_Cmd(USART2, ENABLE); } 密码回显的程序为: #include "stm32f10x.h" #include "stdio.h" void GPIO_Config(void); void COM_Init(void); int fputc(int ch,FILE *f); int main(void) { uint8_t ch[25];//定义一个8位缓存变量ch uint8_t i=0; GPIO_Config
8、);//设置GPIO COM_Init();//初始化串口 printf("\n请你输入密码:"); while(1) { if(USART_GetFlagStatus(USART2,USART_FLAG_RXNE)!=RESET)//如果USART2的接受标志位不为0,即已经接受到数据 { ch[i]=USART_ReceiveData(USART2);//将USART2接收到的数据放入变量ch缓存 if(ch[i]!=0x0d) { printf("*"); i=i+1; } els
9、e{ ch[i]='\0'; printf("\n你输入的密码:%s",ch); //i=0; //printf("\n请你输入密码:"); } } } } void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);//使能
10、 GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);//使能usaRt2管脚重映设 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);//使能USART2时钟 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //设置重映射后的USART2输出TX管脚PD5为复用推挽 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed=G
11、PIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); //设置重映射后的USART2输入rx管脚为浮空输入 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6; GPIO_Init(GPIOD, &GPIO_InitStructure); } void COM_Init(void) { USART_InitTypeDef USART_InitStructure;//
12、声明结构体初始化 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_Mode=USART_Mode_Rx|USART_Mode_Tx; //设置模式为收发 USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//设置不开启硬件流 USART_Init(USART2, &USART_InitStructure);//初始化 USART_Cmd(USART2, ENABLE);//使能 }
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818