stm32f103 串口通讯

余生颓废 提交于 2019-11-30 02:10:00

串口通讯(SerialCommunication)是一种设备间非常常用的串行通讯方式,因为它简单 便捷,因此大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。

	stm32f103 串口通讯大致可以分为这五步
	1.初始化gpio口,使能RX和TX引脚GPIO时钟
	2.初始化USART,和USART时钟;
	3.初始化nvic 总中断
	4.编写字符串发送函数
	5.编写USART 中断服务函数

1.初始化gpio口,使能RX和TX引脚GPIO时钟

void init_uart_gpio(void)
{
	GPIO_InitTypeDef tx;
	GPIO_InitTypeDef rx;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	tx.GPIO_Mode=GPIO_Mode_AF_PP;
	tx.GPIO_Pin=GPIO_Pin_9;
	tx.GPIO_Speed=GPIO_Speed_50MHz;
	
	
	rx.GPIO_Mode=GPIO_Mode_IN_FLOATING;
	rx.GPIO_Pin=GPIO_Pin_10;
	
	GPIO_Init(GPIOA,&tx);
	GPIO_Init(GPIOA,&rx);
}

2.初始化USART,和USART时钟;

void init_uart1()
{
	USART_InitTypeDef uart;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
	
	uart.USART_BaudRate=115200;
	uart.USART_HardwareFlowControl= USART_HardwareFlowControl_None;
	uart.USART_Parity=USART_Parity_No;
	uart.USART_StopBits=USART_StopBits_1;
	uart.USART_WordLength=USART_WordLength_8b;
	uart.USART_Mode= USART_Mode_Rx|USART_Mode_Tx;
	
	USART_Init(USART1,&uart);
	USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
	USART_Cmd(USART1,ENABLE);
	

3.初始化nvic 总中断

void init_uart_nvic(void)
{
	NVIC_InitTypeDef nvic;
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	nvic.NVIC_IRQChannel=USART1_IRQn;
	nvic.NVIC_IRQChannelPreemptionPriority=1;
	nvic.NVIC_IRQChannelSubPriority= 1;
	nvic.NVIC_IRQChannelCmd =ENABLE;
	NVIC_Init(&nvic);
}

4.编写字符串发送函数

void Usart_SendByte(USART_TypeDef *pUSARTx,uint8_t ch)
{
	USART_SendData(pUSARTx,ch);
	while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TXE)==RESET);
}
void Usart_SendString(USART_TypeDef *pUSARTx,char *str)
{
	while(*str!='\0')
	{
		Usart_SendByte(pUSARTx,*str);
		str++;
	}
	while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET);
}

5.编写USART 中断服务函数

void	USART_IRQHandler(void)
{
	uint8_t ucTemp;
	if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET){
		ucTemp=USART_ReceiveData(USART1);
		USART_SendData(USART1,ucTemp);
	}
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!