STM32 USART串口通信

USART(Universal Synchronous/Asynchronous Receiver/Transmitter,通用同步/异步接收/发送器)是一种常见的串行通信接口,用于在计算机和其他设备之间传输数据。USART 支持同步和异步通信模式,可以用于不同的应用场景。

USART 的主要特点

  1. 全双工通信:USART 支持同时发送和接收数据。
  2. 可配置的数据位长度:支持 5、6、7、8 或 9 位数据位。
  3. 可配置的停止位长度:支持0.5、 1、1.5 或 2 位停止位。
  4. 可配置的校验位:支持无校验、奇校验、偶校验、标记校验和空格校验。
  5. 同步和异步通信模式:同步模式下需要时钟信号,异步模式下不需要。
  6. 波特率可配置:可以根据需要设置不同的波特率。

USART 的应用场景

  • 串口调试:通过串口调试助手与微控制器进行通信,方便调试和程序开发。
  • 无线通信模块:如 GSM、GPRS、蓝牙、Wi-Fi 模块等,通常通过 USART 进行数据传输。
  • 传感器数据采集:许多传感器通过 USART 输出数据,微控制器可以通过 USART 读取这些数据。
  • 物联网设备:在物联网设备中,USART 常用于设备之间的通信

USART 的配置和使用

以下是一个简单的 USART 配置和使用的示例(以 STM32f10x 微控制器为例):

创建两个文件usart.h和usart.c,分别添加路径到keil中

添加.h文件

添加.c文件,双击可选择添加

usart.h文件配置

#ifndef __USART_H

#define __USART_H

#include "stm32f10x.h"

void Usart_Init();

#endif

usart.c文件配置

#include "stm32f10x.h"

#include "usart.h"

void Usart_Init(int bsp)

{

GPIO_InitTypeDef Initx;

NVIC_InitTypeDef NVIC_Initx;

USART_InitTypeDef USART_Initx;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO|RCC_APB2Periph_USART1,ENABLE);//开io时钟

//1、io设置 A9复用推挽和A10浮空 复用

//初始化 A9复用推挽 A10浮空 复用

Initx.GPIO_Mode = GPIO_Mode_AF_PP;

Initx.GPIO_Pin = GPIO_Pin_9;

Initx.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&Initx);//A9复用推挽

Initx.GPIO_Mode = GPIO_Mode_IN_FLOATING;

Initx.GPIO_Pin = GPIO_Pin_10;

Initx.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&Initx);//A10浮空 复用

//2、开串口1时钟

//3、设置串口1的工作方式

USART_Initx.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;//输入和输出

USART_Initx.USART_Parity = USART_Parity_No;//无奇偶校验 Even偶校验 Odd奇校验

USART_Initx.USART_StopBits = USART_StopBits_1;//帧结尾传输一个停止位

USART_Initx.USART_WordLength = USART_WordLength_8b;//9位数据位

USART_Initx.USART_BaudRate = bsp;//波特率

USART_Initx.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//硬件流控制

USART_Init(USART1,&USART_Initx);

//4、打开串口的 "接收" 数据中断

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

//5、设置中断优先级

NVIC_Initx.NVIC_IRQChannel = USART1_IRQn;//配置目标USART1 全局中断

NVIC_Initx.NVIC_IRQChannelCmd = ENABLE;

NVIC_Initx.NVIC_IRQChannelPreemptionPriority = 2; //设置抢占优先级

NVIC_Initx.NVIC_IRQChannelSubPriority = 2; //设置响应优先级

NVIC_Init(&NVIC_Initx);

//6、启动串口

USART_Cmd(USART1,ENABLE);

}

void USART1_IRQHandler()

{

u16 data;

if(USART_GetITStatus(USART1,USART_IT_RXNE)) //是接收中断就触发此条件

{

data = USART_ReceiveData(USART1);//读数据

USART_SendData(USART1,data);//把data数据发出去

USART_ClearITPendingBit(USART1,USART_IT_RXNE);//清除中断标记位

}//可能有多个原因引起串口中断

//else if(xxx中断)

}

main.c文件配置

#include "stm32f10x.h"

#include "usart.h"

//C99编号的警告就是错误

int main()

{

//中断分组2

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

//运行

Usart_Init(115200);

while(1);

return 0;

}

查看连接的com口,发现是COM6

串口选择为COM6,波特率为程序设置的115200,开启串口,发送数据

总结

USART 是一种功能强大的串行通信接口,广泛应用于各种嵌入式系统和物联网设备中。通过合理配置 USART 参数,可以实现高效、稳定的数据传输。

相关推荐
派阿喵搞电子1 小时前
STM32的APB1和APB2的区别
stm32·单片机·嵌入式硬件
Archie_IT3 小时前
江协科技/江科大-51单片机入门教程——P[5-1] 模块化编程 & P[5-2] LCD1602调试工具
单片机·嵌入式硬件·mcu·51单片机
电气_空空4 小时前
基于单片机及传感器的机器人设计与实现
单片机·嵌入式硬件·机器人·毕业设计·毕设
木燚垚5 小时前
基于STM32物联网水质监测系统的设计与实现/基于STM32的水产养殖云监控系统设计
stm32·单片机·嵌入式硬件·物联网·智能家居
QQ12971579407 小时前
51单片机 矩阵
单片机·嵌入式硬件·深度学习·算法·硬件工程·集成学习
Moonnnn.8 小时前
51单片机——汇编工程建立、仿真、调试全过程
汇编·笔记·嵌入式硬件·学习·51单片机
森焱森8 小时前
AArch64架构及其编译器
linux·c语言·单片机·架构
想要成为糕手。9 小时前
stm32-RTC时实时钟
stm32·嵌入式硬件·实时音视频
Czzzzlq11 小时前
STM32基础教程——对射式红外传感器计数实验
c语言·stm32·单片机·嵌入式硬件·mcu
集大周杰伦11 小时前
ARM Cortex-M 内存映射详解:如何基于寄存器直接读写 寄存器映射方式编码程序 直接操作硬件寄存器来控制 MCU
arm开发·stm32·单片机·内存映射·arm cortex-m·地址映射·寄存器编码