计算机系统应用教程网站

网站首页 > 技术文章 正文

STM32的串口你会玩吗? stm32串口程序讲解

btikc 2024-10-12 11:44:21 技术文章 8 ℃ 0 评论

串行交互程序设计(接收和发送)

一,综合设计要求

1.开发板引出USART1端口用于串行通信,其中用于异步通信的RX,TX引脚分别映射到PA10PA9引脚。

2. 上位机安装SecureCRT软件,可用于串行通信。

3. 试编写程序实现如下功能:

1)能通过上位机SecureCRT软件输入命令控制开发板Led灯的亮灭,如输入”红色”点亮红灯。

2)能检测按键状态、通过串口发送给上位机,并在SecureCRT软件上显示。

3)其他交互操作。

要求:在SecureCRT软件上显示完善的交互提示信息。

二,USART主要特性

3个USART:USART1挂载于APB2高速总线,USART2 ,USART3挂载于APB1总线

2个UART:UART4,UART5挂载于APB1总线

可编程数据字长度(8位或9位)

分数波特率发生器系统,最高达4.5Mbits/s

可配置的停止位-支持1或2个停止位

LIN通信(局域互联网)

IRDA SIR 编码器解码器(红外通讯)

智能卡模拟功能

可配置的使用DMA的多缓冲器通信

三,USART引脚

四,USART结构

五,GPIO配置

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);

六,工作模式设置

七,串口初始化

void USART1_Configration()
{
	USART_InitTypeDef USART_InitStructure;
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1 ,ENABLE);	
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	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_Cmd(USART1, ENABLE);
}

八,串口接收和发送

  1. 串口数据发送
int fputc (int ch,FILE *f)
{
		USART_SendData(USART1,(uint8_t)ch);
		while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
		return (ch);
}

2.串口数据接收

int fgetc(FILE *f)

{

while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==RESET);

return (int)USART_ReceiveData(USART1);

}

九,串口工具

1.下载

2.完成配置

查看端口号

串口设置

注意:波特率一定要和配置一样的才可以

十,效果展示

  1. 接收字符串
int main(void)
{
 char keytemp;
	unsigned char buff[200];
 		GPIO_Configration();
	USART1_Configration();
	Delay(0x01000000);
	 printf("?òê???è?í·ì?′ó?§\r\n");
	 printf("Please open the light \r\n");
	 printf("OK?\r\n");
}

2.发送

{
scanf("%s",buff);
		if(strcmp(buff,"oìé?")==0) 
		{
 LEDBLUE_OFF;
			LEDGREEN_OFF;
			 LEDRED_ON; 
 printf("sucess!\r\n");			//′??úááμ?//
		}
		else if(strcmp(buff,"?ìé?")==0)
		{
 LEDRED_OFF;
		 LEDBLUE_OFF;
			LEDGREEN_ON	;
			 printf("sucess!\r\n");	
		}
		else if(strcmp(buff,"à?é?")==0) 		{
 LEDRED_OFF;
		 LEDGREEN_OFF;
			 LEDBLUE_ON;
			 printf("sucess!\r\n");	
		}
		else if(strcmp(buff,"ledgreen_off")==0)
		{
			LEDGREEN_OFF;
		}
	
	 
		 }
	 }

红灯

蓝灯

绿灯

全部开启成功!!!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表