【蓝桥杯物联网赛项学习日志】Day4 关于USART/UART
创始人
2024-02-02 03:07:47
0

关键词:USART UART 串口通信

理论基础

USART/UART

USART(Universal Synchronous/Asynchronous Receiver/Transmitter)

通用 同步/异步 串行 接收/发送器是一种串行通信接口。USART最多有5个信号,分别是TX,RX,nCTS.nRTS,SCLK

TX串行输出信号
RX串行输入信号
nCTS(clear to send)允许发送信号,低电平有效,(对方发出)
nRTS(request to send)请求发送信号,低电平有效,(对方发出)
SCLK时钟信号线,仅用于同步模式

TX和RX是必需的,nCTS和nRTS是硬件流控制信号。
在异步通信时可以选择是否使用硬件流控制信号,同步通信时没有硬件流控制信号。
SCLK只用于同步通信,异步通信时无SCLK

USART(Universal Asynchronous Receiver/Transmitter)

通用 异步 串行 接收/发送器 ,只有异步模式,没有SCLK时钟线,一般也没有nCTS,nRTS硬件流控制信号

串口通信的基本参数

数据位8位或9位,一般是八位,每八位一帧数据,刚好1字节
奇偶校验位分为奇校验,偶校验,或者无校验
停止位1或2个停止位,一般设置为1个
波特率串行数据通行速率,单位是bit/s(9600,19200,115200...)

串口配置

串口使用方法

流程

1.时钟使能
2.设置引脚复用器映射
3.GPIO端口模式设置
4.初始化串口参数
5.使能串口

配置步骤

这些步骤都可以在CubeMax里面进行配置。在上一文章中添加配置USART如下
        选择USART2
        mode 选择 (Asynchronous) 异步通信
        Baud Rate 波特率设置为9600
        关闭过载检测
        开启UART中断,配置中断优先级

 

 这样串口就配置好了

示例代码

在UART.C中添加代码

发送代码:

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

        huart   串口通道
        pData   发送数据数组
        Size      数据元素的数量
        Timeout 等待时间

接收代码

HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

        huart   串口通道
        pData   发送数据数组
        Size      数据元素的数量
        Timeout 等待时间

对串口发送数据和接收数据 代码进行改写

void UART_Transmit(uint8_t *ucData,uint8_t ucSize)
{HAL_UART_Transmit(&huart2,ucData,ucSize,100);
}uint8_t UART_Receive(uint8_t *ucData)
{return HAL_UART_Receive(&huart2,ucData,1,0);
}

在UART.h头文件中添加

/* USER CODE BEGIN Prototypes */
void UART_Transmit(uint8_t *ucData,uint8_t ucSize);
uint8_t UART_Receive(uint8_t *ucData);
/* USER CODE END Prototypes */

在主函数中编写功能代码,实现数据的发送与接收

void UART_Proc(void)              	/* UART处理 */
{if(ucSec1 != ucSec){                         				/* 1s到 */ucSec1 = ucSec;UART_Transmit(ucBuf, 4);				/* 发送4个字符 */printf(" %04u\r\n", ucSec);			/* 发送秒值和回车换行 */}if(UART_Receive(ucUrx) == 0)			/* 接收到字符 */{ucUrx[++ucUno] = ucUrx[0];			/* 保存字符 */if(ucUno >= 2){																/* 修改秒值 */ucSec = (ucUrx[1]-0x30)*10+ucUrx[2]-0x30;ucUno = 0;}}
}

以上代码来自示例代码。

多种发送接受方式以及中断处理

发送数据的方式

//阻塞模式发送数据
HAL_UART_Transmit();
//中断模式发送数据
HAL_UART_Transmit_IT();
//DMA模式发送数据
HAL_UART_Transmit_DMA();

接受数据的方式

//阻塞模式接受数据
HAL_UART_Receivemit();
//中断模式接受数据
HAL_UART_Receivemit_IT();
//DMA模式接受数据
HAL_UART_Receivemit_DMA();

 中断处理

//接受中断处理
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{uint8_t* rex; if(huart->Instance == USART2){//发送接收到的字符数据HAL_UART_Receive(huart,rex,sizeof(rex),0); HAL_UART_Transmit(huart,rex,sizeof(rex),10);HAL_GPIO_TogglePin(K1_GPIO_Port,K1_Pin);}__HAL_UART_CLEAR_FLAG(&huart2,UART_IT_TC);//清除中断标志位
}//发送中断处理
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{uint8_t* Tra; if(huart->Instance == USART2){//中断处理}__HAL_UART_CLEAR_FLAG(&huart2,UART_IT_TC);//清除中断标志位
}

DMA串口传输

*略

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...