STM32G431——串口通信

news2024/11/15 21:56:12

蓝桥杯嵌入式——串口通信

目录

USART

电平标准-TTL 电平标准与 RS232 电平标准

232通信标准 

USB转232

异步通信

串口配置

程序设计

重定向

串口发送函数

发送字符串

串口接收——中断


1.USART

通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格 式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特 率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和 IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理 器通信。使用多缓冲器配置的DMA方式,可以实现高速数据通信。如图也就我们熟悉的串 口通通信标准。

在上面的通讯方式中,两个通讯设备的“DB9 接口”之间通过串口信号线建立起连接,串口信号 线中使用“RS-232 标准”传输数据信号。由于 RS-232 电平标准的信号不能直接被控制器直接识别,所以这些信号会经过一个“电平转换芯片”转换成控制器能识别的“TTL 标准”的电平信号, 才能实现通讯。 

电平标准-TTL 电平标准与 RS232 电平标准

 

 

232通信标准 

串口通过三个引脚与其他设备连接在一起。任何USART双向通信至少需要两 个脚:接收数据输入(RX)和发送数据输出(TX)。 

USB转232

RX:接收数据串行输入。通过采样技术来区别数据和噪音,从而恢复数据。

TX :发送数据输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。当发送器被激活,并且不发送数据时,TX引脚处于高电平。在单线和智能卡模式里,此 I/O 口被同时用于数据的发送和接收。

异步通信

在异步通讯中不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些同步用的信号位, 或者把主体数据进行打包,以数据帧的格式传输数据,见图 ,某些通讯中还需要双方约定 数据的传输速率,以便更好地同步。 

在同步通讯中,数据信号所传输的内容绝大部分就是有效数据,而异步通讯中会包含有帧的各种 标识符,所以同步通讯的效率更高,但是同步通讯双方的时钟允许误差较小,而异步通讯双方的 时钟允许误差较大。

 串口配置

点击USATR1,设置MODE为异步通信(Asynchronous) ,波特率为115200 Bits/s。传输数据长度为8 Bit。奇偶检验无,停止位1 ,接收和发送都使能。 USART1_RX/USART_TX,默认即可。 图9 U NVIC Settings 一栏使能接收中断。

程序设计

重定向

//重定向 c 库函数printf、 scanf 到串口 USARTx,重写向后可使用 scanf、getchar 等函数

另外还需添加Use MicroLIB以便支持printf。

串口发送函数

HAL_UART_Transmit_IT();串口中断模式发送

HAL_UART_Transmit_DMA();串口DMA模式发送 

发送字符串


 

HAL_UART_Transmit——这是一个阻塞的发送函数,无需重复判断串口是否发送完成 直到遇到空字符才停止发送。 最后使用循环检测发送完成的事件标志来实现保证数据发送完成后才退出函数。

除了使用普通方式发 送,还可用中断方式和DMA方式发送数据

串口接收——中断

HAL_UART_Receive_IT(&huart1, (uint8_t *)&RxBuffer, 1);

回调函数

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
UNUSED(huart);
if(Uart1_Rx_Cnt >= 255)
{
Uart1_Rx_Cnt = 0;
memset(TxBuffer,0x00,sizeof(TxBuffer));
HAL_UART_Transmit(&huart1, (uint8_t *)"数据溢出", 10,0xFFFF);
}
else
{
TxBuffer[Uart1_Rx_Cnt++] = RxBuffer;
if((TxBuffer[Uart1_Rx_Cnt-1] == 0x0A)&&(TxBuffer[Uart1_Rx_Cnt-2] == 0x0D))
{
HAL_UART_Transmit(&huart1, (uint8_t *)&TxBuffer, Uart1_Rx_Cnt,0xFFFF);
while(HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX);
Uart1_Rx_Cnt = 0;
memset(TxBuffer,0x00,sizeof(TxBuffer));
}
}
HAL_UART_Receive_IT(&huart1, (uint8_t *)&RxBuffer, 1);
}

注:中断接收函数只能触发一次接收中断,所以我们需要在中断回调函数中再次调用中断接收函数。


重定向的这部分工作, 由 fputc(int ch, FILE *f) 这个函数来完成。 重定向时,我们把 fputc( ) 的形参 ch,作为串口将要发送的数据,也就是说,当使用 printf( ) 时,它先调用这个 fputc( ) 函数,然后使用 ST 库的串口发送函数 USART_SendData(),把数据转移到发送数据寄存器 TDR,触发我们的串口向 PC 发 送一个相应的数据。调 用 完 USART_SendData( ) 后 , 要 使 用 while (USART_GetFlagStatus(USART1,USART_FLAG_TC)!= SET) 语句不停地检查 串口发送是否完成的标志位TC,一直检测到标志为“完成”,才进入下一步的操作,避免出 错。在这段 while 循环检测的延时中,串口外设已经由发送控制器以及根 据我们的配置把

数据从移位寄存器一位一位地通过串口线 Tx 发送出去了。


printf函数在“stdio.h”头文件里,使用该函数必须引用“stdio.h”库, 还 要在编译器中设置一个选项 Use MicroLIB (使用微库)。设置方式如下: 单击Project,选择option选项,再选择Target 勾选Use MicroLIB 即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/188478.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

集成测试最全详解,看完必须懂了

什么是集成测试 集成测试(Integration Testing),也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。 集成测试&#xff…

chatgpt的一些思考

结论国内同行对chatgpt的认识是不够的,太轻视这个模式的颠覆性认知chatgpt是对思维过程的仿真,rlhf过程就是通过强化学习方式在利用人思维过程训练模型chatgpt比搜索更通用化,搜索是对单个点信息的匹配,chatgpt是对思维链一个序列…

【python】多任务编程之线程、进程知识点详细总结

目录 多任务的执行方式 进程 概念 python多进程 线程 概念 python多线程 线程同步方式 线程等待 互斥锁 死锁 线程和进程对比 多任务的执行方式 进程 概念 python多进程 Windows下的main判断process进程类import multiprocessing import time def sing():for i i…

Unix环境高级编程_进程环境_启动代码,环境变量表,进程内存结构,库

这是《UNIX环境高级编程》第7章内容,这篇文章记录进程所需要的环境。 4 进程环境 程序加载到内存,运行起来后就成为了进程。就像人活着需要生活环境(衣食住行的环境)一样,进程也需要运行环境,进程所需要的…

Vue组件生命周期与钩子函数

组件生命周期 ​ 组件(组件是可复用的 Vue 实例)从创建到销毁的过程就是组件的生命周期,是一个时间段。 组件生命周期钩子函数 (vue3与vue2生命周期钩子函数略有不同,本文以vue2为主) ​ VUE 提供的生命…

科研快报 | 三代测序技术-海水微生物态,助力海水微生态及微生物基因组研究

PacBio研究专题二代测序读长偏短,环境宏基因组样品研究受到了很大限制。作者通过三代测序对来自地中海的冬季混合海水样本进行宏基因组测序。利用PacBio Sequel II平台的超长读长明显可以提升宏基因组的组装质量,又能显著提升MAGs质量。研究人员通过比较…

使用和登录Linux云服务器

目录 云服务器的购买 SSH登录云服务器 云服务器的购买 我们以腾讯云为例, 其他的服务器厂商也是类似。 1. 进入腾讯云官方网站:学生云服务器_云校园特惠套餐 - 腾讯云 (tencent.com) 2. 登陆网站(可以使用微信登陆) 3.购买云服务器 购买最低级即可,对于…

python - 科研文献作图复现1

记录阅读文献过程中,通过python复现原文的一些脚本 想要复现的文章原图如下所示 原文链接: https://file.scirp.org/Html/4-2430166_82999.htm 首先,对于原图进行简要观察。 这是一张折线图,绘制了6条不同颜色的折线来表示不同…

舆情监控软件免费下载,TOOM网络舆情监控软件服务流程?

舆情监测可以帮助个人和企业了解自己的网络形象,提高自我评价和评价能力,提升自我定位和竞争力。接下来简单了解舆情监控软件免费下载,TOOM网络舆情监控软件服务流程? 一、舆情监控软件免费下载 请登录TOOM舆情官网获取链接 1.企业客户&a…

SpringMVC(十三):SpringMVC拦截器介绍使用

文章目录 SpringMVC拦截器介绍使用 前言 一、拦截器使用 二、拦截器内容详解 1、preHandle方法 2、postHandle方法 3、afterCompletion方法 三、多个拦截器执行顺序 SpringMVC拦截器介绍使用 前言 在之前的系列文章里,我们学习了过滤器的知识。过滤器的作…

ejs模板在Express框架中的集成

在上一篇内容中已经使用了pug模板,那么本篇就来了解一下ejs模板在Express框架中的集成使用,ejs模板也是常用的模板引擎,支持在标签内直接编写javascript代码,通过javascript代码就能够生成HTML页面的,通过本期对ejs模板…

C++字符串全排列(递归法)和(迭代法)以及next_permutation底层原理详解

目录前言next_permutation的使用实现全排列的两种算法1. 递归法(全排列方便理解记忆的方法,作为备用方法)实现代码(无重复元素情况)有重复元素情况2. 迭代法(next_permutation底层原理)实现代码(有无重复不影响)前言 next_permutation/prev_permutation是C STL中的…

全国青少年软件编程(Python)等级考试一级考试真题2022年12月——持续更新.....

1.关于Python语言的注释,以下选项中描述错误的是?( ) A.Python语言有两种注释方式:单行注释和多行注释 B.Python语言的单行注释以#开头 C.Python多行注释使用###来做为标记 D.注释用于解释代码原理或者用途 正确答案:C 2.下列代码执行后最有可能绘制出的图形是?(…

网络原理(TCP/IP五层协议)(三)

目录4.滑动窗口(效率机制)5.流量控制(安全机制)6.拥塞控制(安全机制)7.延迟应答(效率机制)8.捎带应答(效率机制)9.面向字节流10.TCP的异常处理4.滑动窗口(效率机制) 滑动窗口存在的意义就是在保证可靠性的前提下,尽量提高传输效率。 在这里可以看到,由于…

JSP 学生成绩管理系统myeclipse定制开发sqlserver数据库网页模式java编程jdbc

一、源码特点 JSP 学生成绩管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为SQLServer2008&#x…

layui 富文本layedit编辑、存储和回显

一、创建一个富文本编辑框 先定义一个textarea标签&#xff0c;给定一个id值&#xff0c;向页面引入layedit&#xff0c;然后调用layedit.build(id, options)构建富文本框 //官方给出的模板 <textarea id"demo" style"display: none;"></textar…

Linux的目录相关操作

目录 前言 处理目录的常见命令 cd&#xff08;change directory&#xff0c;切换目录&#xff09; pwd&#xff08;print working directory&#xff0c;显示目前所在的目录&#xff09; mkdir&#xff08;make directory&#xff0c;建立新目录&#xff09; rmdir&#x…

代码随想录算法训练营第十三天 | 第六章二叉树-理论基础,递归遍历,迭代遍历,统一迭代

一、参考资料二叉树理论基础文章讲解&#xff1a;https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 递归遍历题目链接/文章讲解/视频讲解&#xff1a;https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%8…

Mobilenet v1-v3

MobileNet V1 理解 MobileNetV1的关键是理解深度可分离卷积 深度可分离卷积 Depthwise Separable Conv 深度可分离卷积单通道卷积&#xff08;提取特征&#xff09;逐点卷积&#xff08;增加维度&#xff09; 普通卷积 输入一个 12123 的一个输入特征图&#xff0c;经过256…

微服务/分布式初始

1.单体服务架构的特点 当服务单一、规模小、逻辑简单时&#xff0c;用一个单体服务就挺 单体服务的缺点 复杂程度高。维护成本越来越高&#xff0c;各个模块之间边界模糊&#xff0c;一个模块的改动可能导致整个服务出现问题&#xff0c;一点内存泄漏、一处指针错误就会让整…