初学stm32 ——— 串口通信

devtools/2024/12/23 22:08:17/

目录

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.ppmy.cn/devtools/144808.html

相关文章

MySQL 中的 MVCC:实现高效并发控制

1 引言 在高并发环境中,数据库必须确保多个事务可以同时安全地读取和写入数据,而不会导致数据不一致的问题。为了达到这一目标,MySQL 的 InnoDB 存储引擎引入了多版本并发控制(MVCC)。本文将探讨MVCC的工作原理、它如何…

Oracle 三个生产案例问题分析

1. 案例一:表空间暴涨 1.1. 问题背景 一个平时不怎么增长的表空间连续告警,持续加了几百G的空间短时间被耗光。 1.2. 问题排查 1.2.1. 统计表空间的日增长量 通过统计表空间的日增长量可以看出有几天表空间的增长量是有 100 多 G 一天。 # 统计表空…

Flutter:key的作用原理(LocalKey ,GlobalKey)

第一段代码实现的内容:创建了3个块,随机3个颜色,每次点击按钮时,把第一个块删除 import dart:math; import package:flutter/material.dart; import package:flutter_one/demo.dart;void main() {runApp(const App()); }class App…

flask before_request 请求拦截器返回无值则放行,有值则拦截

环境 Python 3.11.5 Flask 2.2.2完整代码如下: from flask import Flask, make_response, Blueprintapp Flask(__name__) user_blue Blueprint(user, __name__, url_prefix/api/user) user_blue.before_request def befor…

12.7深度学习_经典神经网络_VGG

一、VGG神经网络 ​ VGG的亮点在于它通过堆叠多个卷积层,以小的卷积核和池化层的方式来增加网络深度,从而实现高精度的图像识别。这种方法可以有效地捕获图像中的高级特征,并通过不断拟合训练数据来提高识别准确率。 1. 小卷积作用 ​ DC …

堆排序【东北大学oj数据结构9-4】C++

堆排序是一种基于堆的数据结构的排序,是一种快速排序算法,可以在输入数组中实现排序处理(内存高效)。 堆排序可以实现如下: maxHeapify(A, i) l left(i) r right(i) // select the node which has the m…

Coding Caprice - Linked-List 1

203. 移除链表元素 class Solution { public:ListNode* removeElements(ListNode* head, int val) {ListNode* Head new ListNode();Head->next head;ListNode* out1 Head;while(Head!nullptr && Head->next!nullptr){if(Head->next->val val){ListNo…

whisper实时语音转文字

import whisperimport osdef check_file_exists(file_path):if not os.path.exists(file_path):raise FileNotFoundError(f"音频文件不存在: {file_path}")# 音频文件路径 audio_path r"D:\视频\temp_audio.wav"# 检查文件是否存在 check_file_exists(aud…