当前位置: 首页 > article >正文

初学stm32 ——— 串口通信

目录

STM32的串口通信接口

UART异步通信方式特点:

串口通信过程

STM32串口异步通信需要定义的参数:

 USART框图:

 常用的串口相关寄存器

串口操作相关库函数

 ​编辑

串口配置的一般步骤


STM32的串口通信接口

  • UART:通用异步收发器
  • USART:通用同步异步收发器

        大容量STM32F10x系列芯片,包含3个USART和2个UART;(USART可以设置成UART,所有有5个UART)

UART异步通信方式引脚连接方法:

RXD:数据输入引脚。数据接收

TXD:数据发送引脚。数据发送

图1 UART串口引脚连接方式

 

STM32F103芯片的5个串口对应的引脚号:

串口号

RXD

TXD

1

PA10

PA9

2

PA3

PA2

3

PB11

PB10

4

PC11

PC10

5

PD2

PC12

UART异步通信方式特点:

  • 全双工异步通信
  • 分数波特率发生器系统,提供精确的波特率。发生和接收共用的可编程波特率,最高可达4.5Mbit/s
  • 可编程的数据子长度(8位或者9位)
  • 可配置的停止位(支持1或者2位停止位)
  • 可配置的使用DMA多缓冲器通信。
  • 单独的发送器和接收器使能位。
  • 检测标志:1 接收缓冲器  2发送缓冲器空  3传输结束标志
  • 多个带标志的中断源。触发中断。
  • 其他:校验控制,四个错误检测标志。

串口通信过程

图2 串口通信过程

STM32串口异步通信需要定义的参数:

  1. 起始位
  2. 数据位(8位或者9位)
  3. 奇偶校验位(第9位)
  4. 停止位(1,15,2位)
  5. 波特率设置
图3 传输数据格式

 USART框图:

 常用的串口相关寄存器

  • USART_SR状态寄存器
  • USRAT_DR数据寄存器
  • USRAT_BRR波特率寄存器

串口操作相关库函数

void USART_Init();//串口初始化:波特率,数据字长,奇偶校验,硬件流控制以及收发使能
void USART_Cmd();//使能串口
void USART_ITConfig();//使能相关中断

void USART_SendData();//发送数据到串口,DR
uint16t USART_ReceiveData();//接收数据,从DR读取接收到的数据

FlagStatus USART_GetFlagStatus();//获取状态标志位
void USART_ClearFlag();//清除状态标志位
ITStatus USART_GetITStatus();//获取中断状态标志位
void USART_ClearITPendingBit();//清除中断状态标志位

 

 

串口配置的一般步骤

①串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd();

②串口复位:USART_DeInit();这一步不是必须的

③GPIO端口模式设置:GPIO_Init();模式设置参考STM32中文参考手册8.1.11外设GPIO配置

④串口参数初始化:USART_Init();

⑤开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤):

        NVIC_Init();

        USART_ITConfig();

⑥使能串口:USART_Cmd();

⑦编写中断处理函数:USARTx_IRQHandler();

⑧串口数据收发:

void USART_SendData();//发送数据到串口,DR

uint16_t USART_ReceiveData();//接收数据,从DR读取接收到的数据

⑨串口传输状态获取:

FlagStatus USART_GetFlagStatus(UASRT_typeDef* UASRTx uint16_t USART_FLAG);

void USART_ClearITPendingBit(UASRT_TypeDef* UASRT, uint16_t USART_IT);


http://www.kler.cn/a/443806.html

相关文章:

  • Linux系统安装node.js
  • 3. Kafka入门—安装与基本命令
  • 网络安全防范
  • uniapp开发app,cover-view不能隐藏,使用v-if,v-show都不行的解决办法
  • MobaXterm 连接不上VMware 的Ubuntu 虚拟机
  • 【人工智能】用Python实现图卷积网络(GCN):从理论到节点分类实战
  • elementui在任意页面点击消息,弹出消息对应页面处理弹窗
  • 2.metagpt中的软件公司智能体 (ProductManager 角色)
  • @Resource与@Autowire
  • VGGNet:深度学习中的卷积神经网络经典之作
  • Elasticsearch 实战应用:开启数据搜索与分析新征程
  • c++ 找第一个只出现一次的字符
  • 人力资本管理SaaS的升级之路:群硕以本地化+云创新驱动行业变革
  • Java聊天室系统的设计与实现【源码+文档】
  • java数据类型(补充-引用类型)
  • 整点(枚举)
  • React 19有哪些新特性?
  • WPF+MVVM案例实战与特效(四十四)- WPF多语言支持全解析:轻松实现国际化应用
  • List;Set;Map集合
  • C++总结联想文档
  • Leetcode3266:K 次乘运算后的最终数组 II
  • TanStack——为现代前端开发提供高性能和灵活的工具
  • 应用程序设置开机自启动
  • MyBatis-Plus(一)
  • 论文笔记:是什么让多模态学习变得困难?
  • Vmware 安装Ubuntu系统 服务器版本