ARM内核的USART单线半双工通信

前言

开发过程中遇到一个问题,需要单线的串口协议。平时使用串口一直都是基本的全双工模式。查看手册才知道原来USART还支持单线的半双工通信方式,做个记录查漏补缺。

1. USART的主要特性

USART的基本特性USART的基本特性在这里插入图片描述

主要的配置方式手册写的很清楚在这里插入图片描述

  • RX引脚需要被禁用,如GPIO的配置等
  • TX引脚需要配置成开漏模式
  • 其他所有配置和正常USART模式完全一样,所以如果在原有的USART代码中只需要禁用RX的GPIO配置,然后将USART_CR3中的 HDSEL位置1就可以完成配置了。

查看固件库中的usart.h在这里插入图片描述

看看这个函数的定义正是进行了上述操作

在这里插入图片描述

2. 示例代码

	GPIO_InitTypeDef m_gpio;
	
//	USART1_TX_IO_CLK_EN();
//	USART1_RX_IO_CLK_EN();
//	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOB, ENABLE);
	
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
	
    m_gpio.GPIO_Mode = GPIO_Mode_AF;
    m_gpio.GPIO_Mode = GPIO_Mode_OUT;
	m_gpio.GPIO_OType = GPIO_OType_PP;
	m_gpio.GPIO_Pin = GPIO_Pin_3;
	m_gpio.GPIO_PuPd = GPIO_PuPd_UP;
	m_gpio.GPIO_Speed = GPIO_Speed_10MHz;
	GPIO_Init(GPIOA, &m_gpio);
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_1);
    
	//将原有的RX引脚的配置注释掉
//  m_gpio.GPIO_Mode = GPIO_Mode_AF;
//  m_gpio.GPIO_OType = GPIO_OType_PP;
//	m_gpio.GPIO_Pin = GPIO_Pin_4;
//  m_gpio.GPIO_PuPd = GPIO_PuPd_NOPULL;
//	m_gpio.GPIO_Speed = GPIO_Speed_10MHz;
//	GPIO_Init(GPIOB, &m_gpio);
//	GPIO_PinAFConfig(GPIOB,GPIO_PinSource4,GPIO_AF_1);


	USART_InitTypeDef m_usart;
	
	USART_GPIO_Configurature(USART_OUT);
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
	m_usart.USART_BaudRate = baud;
	m_usart.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	m_usart.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
	m_usart.USART_Parity = USART_Parity_No;
	m_usart.USART_StopBits = USART_StopBits_1;
	m_usart.USART_WordLength = USART_WordLength_8b;
	USART_Init(USART1, &m_usart);
	
	USART_HalfDuplexCmd(USART1, ENABLE);//注意这个函数 配置半双工模式
	
	
	USART_Cmd(USART1, ENABLE);
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
	USART_NVIC_Configurature();
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值