航顺HK32F030-USART

USART是一种串行通信设备,支持异步和同步数据格式,通常在32位单片机中用于UART异步通信。配置USART涉及使能时钟、GPIO设置、初始化参数、使能串口、设置中断等步骤。在异步通信中,USART与UART基本相同,但在同步通信时,USART提供时钟同步,而UART则不需要。
摘要由CSDN通过智能技术生成

USART是什么?
通用同步异步收发器(USART)支持标准的不归零码(Not return to Zero,NRZ)异步串行数据格式,是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。一般情况下,我们32单片机的串口通信采用的是UART异步通信,传输时只需配置协议层:波特率、起始位、数据位、奇偶效验位、停止位,只有保持双方数据包的格式要一致,才能正常的接受发数据!


1.USART和UART区别
       UART全称:universal asynchronous receiver and transmitter通用异步收/发器,它是在 USART 基础上裁剪掉了同步通信功能,只有异步通信。
       在异步通讯的情况下,USART是和UART 是没什么区别的;但是在同步通信的情况下,就有一些区别的,因为同步通信是需要依靠时钟来控制实现数据传输的,UART 是不需要时钟信号来同步的异步,全双工串口总线。

USART的配置步骤
1、使能串口时钟及 GPIO 端口时钟
2、GPIO 端口模式设置,设置串口对应的引脚为复用功能
3、初始化串口参数,包含波特率、字长、奇偶校验等参数
4、使能串口
5、设置串口中断类型并使能
6、设置串口中断优先级,使能串口中断通道
7、编写串口中断服务函数

配置USART

使能串口时钟及 GPIO 端口时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//开启USART时钟

GPIO 端口模式设置,设置串口对应的引脚为复用功能

static void USART_GPIO_Configurature(void)
{
	GPIO_InitTypeDef m_gpio;
	
	USART1_TX_IO_CLK_EN();
	USART1_RX_IO_CLK_EN();
	
	m_gpio.GPIO_Mode = GPIO_Mode_AF;//复用
	m_gpio.GPIO_OType = GPIO_OType_PP;//推挽
	m_gpio.GPIO_Pin = USART1_TX_PIN;//发送引脚
	m_gpio.GPIO_PuPd = GPIO_PuPd_NOPULL;//浮空
	m_gpio.GPIO_Speed = GPIO_Speed_10MHz;//10MHz
	GPIO_Init(USART1_TX_PORT, &m_gpio);//初始化
	GPIO_PinAFConfig(USART1_TX_PORT,GPIO_PinSource3,GPIO_AF_1);//设置IO的映射关系
	
	m_gpio.GPIO_Pin = USART1_RX_PIN;//接收引脚
	GPIO_Init(USART1_RX_PORT, &m_gpio);初始化
	GPIO_PinAFConfig(USART1_RX_PORT,GPIO_PinSource6,GPIO_AF_1);//设置IO的映射关系
}

初始化串口参数,包含波特率、字长、奇偶校验等参数

void USART_Configurature(void)
{
	USART_InitTypeDef m_usart;
	
	USART_GPIO_Configurature();
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//开启USART时钟
	m_usart.USART_BaudRate = 115200;//设置波特率
	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初始化
    USART_Cmd(USART1, ENABLE);//使能串口
	
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//设置串口中断类型并使能
	
	USART_NVIC_Configurature();//设置串口中断优先级,使能串口中断通道
}

结构体成员与组成部分知识重合,不做解释 

使能串口

在接收到数据的时候(RXNE 读数据寄存器非空),我们要产生中断

 USART_Cmd(USART1, ENABLE);//USART使能

设置串口中断类型并使能

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//USART1接收中断

设置串口中断优先级,使能串口中断通道

USART_NVIC_Configurature();

编写串口中断服务函数

void USART1_IRQHandler(void)
{
	uint8_t ch_rx_test;
	if((USART1->ISR & USART_ISR_RXNE) != 0)
	{
		ch_rx_test = USART1->RDR;
		USART_SendByte(ch_rx_test);
	}
}

中断映射图 

 发送一个字节

void USART_SendByte(uint8_t ch)
{
	while((USART1->ISR & USART_ISR_TXE) == 0);
	USART1->TDR = ch;
}

发送字符串 

void USART_SendByte(uint8_t ch)

void USART_SendStringLen(uint8_t *p,uint16_t len)
{
	while(len--)
	{
		USART_SendByte(*(p++));
	}
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小豪不掉发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值