STM32-USART串口初始化配置

2023-05-16

一、串行通信的基本概念
1.同步通信和异步通信

  • 通信,最少要两个对象,一个收,一个发
  • 同步通信:通信双方根据同步信号进行通信的方式。
  • 异步通信:数据传输速度匹配依赖于通信双方有自己独立的系统时钟,大家约定好通信的速度。异步通信不需要同步信号,但是并不是说通信的过程不同步

2.串行通信和并行通信的区别

  • 串行通信:同一时刻只能收或发一个bit位信息因此只用1根信号线
  • 并行通信:同一时刻可以收或发多个bit位的信息,因此需要多根信号线才行

3.单工、半双工、全双工

  • 单工:要么收,要么发,只能做接收设备或者发送设备
  • 半双工:可以收,可以发,但不能同时收发
  • 全双工:可在同一时刻既接收,又发送

4.常见通信总结
在这里插入图片描述
二、串口设置步骤

  1. 串口时钟使能,GPIO 时钟使能
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1)
  1. 串口复位
	void USART_DeInit(USART_TypeDef* USARTx);//串口复位
  1. GPIO 端口模式设置
	void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
  1. 串口参数初始化
	void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);
  1. 开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤)
	void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
	void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState);
  1. 使能串口
	void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState);
  1. 编写中断处理函数
	void USARTx_IRQHandler();
  1. 串口数据发送
	void USART_SendData(USART_TypeDef* USARTx, uint16_t Data); //发送数据到串口DR
	uint16_t USART_ReceiveData(USART_TypeDef* USARTx);//接收数据,从DR中读取接收到数据
  1. 串口传输状态获取
	FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
	void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);

三、初始化

	void uart_init(u32 bound)
	{
	GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能 USART1,GPIOA 时钟


	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //ISART1_TX PA.9
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
	GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化 GPIOA.9
	 
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //USART1_RX PA.10
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
	GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化 GPIOA.10
	
	NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 3 ; //抢占优先级 3
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级 3
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道使能
	NVIC_Init(&NVIC_InitStructure); //中断优先级初始化

	USART_InitStructure.USART_BaudRate = bound; //波特率设置
	USART_InitStructure.USART_WordLength = USART_WordLength_8b; //字长为 8 位
	USART_InitStructure.USART_StopBits = USART_StopBits_1; //一个停止位
	USART_InitStructure.USART_Parity = USART_Parity_No; //无奇偶校验位
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件数据流控制
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//收发模式
	
	USART_Init(USART1, &USART_InitStructure); //初始化串口
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //开启中断
	USART_Cmd(USART1, ENABLE); //使能串口
	}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32-USART串口初始化配置 的相关文章

  • 数据结构-线性表的链式存储(包含代码实现)

    线性表的链式表示和实现 链式存储结构 结点在存储器中的位置是任意的 xff0c 即逻辑上相邻的数据元素在物理上不一定相邻线性表的链式存储结构又称为非顺序映像或链式映像 用一组物理位置任意的存储单元来存放线性表的数据元素这组存储单元既可以是连

随机推荐

  • Android6.0以上高危权限动态申请

    1 在项目的Manifest xml中添加静态权限 拨打电话 lt uses permission android name 61 34 android permission CALL PHONE 34 gt 发送短信 lt uses pe
  • Linux入学—共享文件夹(保姆教程)

    序言 自从上学期上完课以来就没有用过Linux xff0c 最近因为学习传感器数据上传云端的需要 xff0c 安装了Linux xff0c 在开始装jdk的时候需要下载jdk的压缩包 xff0c 需要通过windows上传到Ubuntu 之
  • Ubuntu下安装java环境及idea

    前言 一 JDK的安装 二 配置环境 1 在 系统中配置java环境 三 idea社区版的安装 前言 提示 xff1a 这里可以添加本文要记录的大概内容 xff1a 由于自己的学习需要 xff0c 这里需要用到在Linux系统下的Java
  • stm32f103 光敏传感器BH1750 实现串口回显

    在制作智能花盆的过程中 xff0c 使用了光敏传感器BH1750 因为在网上找了很多都是关于51的 xff0c 32方面的比较少 xff0c 所以这里记录一下BH750的驱动代码 链接 xff1a https pan baidu com s
  • STM32中HAL库使用-串口接收(一)

    1 中断接收 1 1先看中断接收的流程 xff08 以 USART2 为例 xff09 在启动文件中找到中断向量 USART2 IRQHandler 找到 USART2 IRQHandler 的函数定义 可以看到这里又转到另一个函数里去了
  • STM32中HAL库使用-串口发送(二)

    2 中断发送 2 1发送中断的触发流程 由于在STM32中usart2的入口中断只有一个 xff1a 就是上图的中断向量表中红框标出来的 其他的所有中断其实都是从这里出发的 xff0c 我们再和捋接收一样捋一遍发送 首先是USART2 IR
  • Ubuntu20.04下编译安装ORBSLAM2_with_pointcloud_map总结

    与此物大战六个小时 xff0c 终于解决所有问题 xff0c 写此短文记录一下 一 在github上下载源码后 xff0c 解压缩 xff0c 如下 进行g2o with orbslam2的编译 1 报错信息 xff1a ORBSLAM2
  • Android使用ASM修改函数

    目录 参考文章 Android 编译插桩 xff08 一 xff09 xff1a ASM https github com yxhuangCH CSLearn blob master android Android 20 E7 BC 96
  • ORB_SLAM2配置——基于Ubuntu20.04+ROS+gazebo仿真

    一 引言 ORB SLAM2 xff0c 它是基于单目 双目或RGB D相机的一个完整的SLAM系统 xff0c 其中包括地图重用 回环检测和重定位功能 这个系统可以适用于多种环境 xff0c 无论是室内小型手持设备 xff0c 还是工厂环
  • opencv 打开双目摄像头只能采集一个摄像头的问题,及左右目图像分割成两幅图

    一 opencv 打开双目摄像头只能采集一个摄像头的问题 本人采用单USB接口的双目摄像头 xff0c 总是只打开左摄像头的图 xff0c 经摸索后发现主要就是分辨率的问题 xff0c 如果分辨率设置正确 xff0c 便可以打开左右目合成图
  • 基于opencv(c++)和matlab的usb双目相机标定

    本人由于实际需要入手了一款双目免驱usb摄像头 xff0c 因为需要做深度估计 xff0c 故需要标定内参 xff0c 双目相机标定主要是为了获得摄像头的内参 f 1 dx 1 dy cx cy 畸变参数 k1 k2 k3 p1 p1 和外
  • 解决在编译各类改版orbslam时的undefined reference to ****************************问题

    如上面这个问题 xff0c 可以参考这个链接 xff1a 参考链接 参考上面的链接 xff0c 我作出的修改具体为 xff08 1 xff09 移动所缺少的文件 xff08 如本例的libopencv core so 4 2 0 xff09
  • 贝叶斯滤波与卡尔曼滤波(一)

    一 绪论 贝叶斯滤波 xff1a 通过概率统计的方法 xff08 贝叶斯公式 xff09 xff0c 对随机变量进行处理 xff0c 来减小他的不确定度 这里所指的随机变量和教材中所说的变量并不是一回事 xff0c 贝叶斯滤波中所提到的随机
  • 学习ROS-Academy-for-Beginners-noetic,修改记录

    一 编译安装ROS Academy for Beginners noetic 可以参考我之前的博客ROS Academy for Beginers noetic安装教程 之后可以看到里面提供了很多例程 xff0c 包括 软件包 内容 rob
  • STM32的C与汇编语言混合编程

    目录 一 在keil5里面利用C语言调用汇编函数 1 建立新工程 2 编辑代码 C语言代码编辑 xff1a 汇编语言编辑 3 编译调试 二 改写汇编程序 1 C程序改写 2 汇编程序改写 3 编译调试 三 在汇编程序中调用C语言中的函数 一
  • 网络数据传输时的大小端问题

    socket网络字节序以及大端序小端序 不同CPU中 xff0c 4字节整数1在内存空间的存储方式是不同的 4字节整数1可用2进制表示如下 xff1a 00000000 00000000 00000000 00000001 有些CPU以上面
  • linux知识点——CMakeLists.txt中调用自己编写的so库

    文章目录 1 问题2 解决2 1 cmake文件方法2 2 暴力链接库方法 3 例子3 1 生成libposelib so3 2 调用so库3 3 find package原理 参考 xff1a https blog csdn net qq
  • jetson tx2刷机教程 (成功安装ubuntu18.04+Jetpack4.6.2+CUDA10.2+CUDNN8.2)

    TX2 刷机需要准备一台ubuntu系统的电脑 xff0c 没有ubuntu系统电脑在Windows电脑中安装虚拟机也可 本文教程直接使用的是ubuntu系统的电脑 主机端 xff08 电脑端 xff09 环境配置 在主机上安装sdkman
  • 新能源汽车的三十年黄金赛道,Android程序员认准车载就对了!

    前言 中汽协预计 xff0c 2023年中国 汽车市场总销量为2760万辆 xff0c 同比增长3 其中 xff0c 国内乘用车累计销量预计为2380万辆 xff0c 同比增长1 3 xff1b 商用车累计销量预计为380万辆 xff0c
  • STM32-USART串口初始化配置

    一 串行通信的基本概念 1 同步通信和异步通信 通信 xff0c 最少要两个对象 xff0c 一个收 xff0c 一个发同步通信 xff1a 通信双方根据同步信号进行通信的方式 异步通信 xff1a 数据传输速度匹配依赖于通信双方有自己独立