【STM32HAL库学习】通信方式:USART、IIC、SPI

通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统

通信接口区别

名称引脚双工时钟电平设备
USARTTX、RX全双工异步单端点对点
I2CSCL、SDA半双工同步单端多设备
SPISCLK、MOSI、MISO、CS全双工同步单端多设备
CANCAN_H、CAN_L半双工异步差分多设备
USBDP、DM半双工异步差分点对点

以下是一些常见概念:

  • 双工:通信设备是否同时能进行双方通信,一般全双工的都有两根通讯线,如 USART 就有TX/RX这两根通讯线。 I2C 只有一根通讯线SDA(另外一根是时钟线),所以 I2C 半双工的通信

  • 时钟:分为同步异步
    同步:有单独的时钟信号线,保证通讯时用的是同一个时钟
    异步:没有单独的时钟信号线,只能双方规定制定的时钟频率。如串口发送方中可以指定波特率来实现间隔多少时间向TX发送一个数据(变化一次高低电平),那么接收方也要根据这个波特率来接收数据(间隔多长时间读取一次RX的电平)

  • 电平
    单端:电平参考需要一样,即如串口通讯中,发送方与接收方需要共地,保证它们的参考电压是一样的。
    差分:不需要共同的参考电平,是根据两根通讯线的电平差异来获取结果的。如两根通讯线的电平不同则表示结果0,相同则表示结果1。

  • 电平标准
    即通讯协议中,双方数据1和0的表达方式标准。即传输过程中人为规定电压与数据的对应关系,常用的有以下3种,抗干扰性RS485 > RS232 > TTL

    • TTL电平:+3.3V或+5V表示1,0V表示0
    • RS232电平:(-3 , -15V)表示1,(+3 , +15V)表示数据0
    • RS485标准:使用的不是绝对电压,而是两根信号线的相对电压(差分信号)作为标准。两根线电压差(+2, +6V)表示1,相差(-2, -6V)表示0。抗干扰信号非常强,距离可达到上千米
    • 当电平标准不一致时,需要加电平转换芯片
  • 波特率
    用于指定发送的频率和接收的频率,假如发送方1秒发送1位,那么接收方也必须1秒接收(读取一次RX的电平)1位,假如接收方频率更快,那么有可能相同一个数据被接收方多次接收。其单位是bps,即1秒发
    送的位数。1000bps就是1秒发送1000位数据,1位数据的发送耗时是1ms(二进制下,1位=1baud)

  • 数据模式

    • HEX模式/十六进制模式/二进制模式:以原始数据的形式显示
    • 文本模式/字符模式:以原始数据编码后的形式显示
    • 如果要显示汉字,就得制定汉字的字符集如GB2312、GBK,另外Unicode字符集:全球的语言,最常用的传输形式是UTF8

    串口通信

    1、参数

  • 波特率

  • 1位起始位(标志一个数据帧的开始,固定为低电平)

  • 1位停止位(标志一个数据帧的结束,固定为高电平)一般停止位为1位,也可设置为0.5、1、1.5、2,停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

  • 8/9位数据位(是否奇偶校验,如偶校验:第9位保证9位数据中1的个数为偶数),数据低位先行
    因此,在无奇偶校验的情况下一帧的数据长度为10位。

3、利用CubMX配置串口通信

配置只需要一步,关键掌握如何收发各种格式的数据。
在这里插入图片描述

发送数据
//1、发送一个字节
void hhSerialSendByte(uint8_t Byte){HAL_UART_Transmit(&huart1, &Byte, 1, HAL_MAX_DELAY);
}//2、发送一个数组
void hhSerialSendArray(uint8_t *Array,uint16_t Length){for(uint16_t i=0;i<Length;i++){hhSerialSendByte(Array[i]);}
}//3、发送一个字符串
void hhSerialSendString(char * mString){for(uint16_t i=0;mString[i]!='\0';i++){hhSerialSendByte(mString[i]);}
}//4、发送一个数字
uint32_t Serial_Pow(uint32_t X, uint32_t Y){uint32_t Result = 1;while (Y --){Result *= X;}return Result;
}
void hhSerial_SendNumber(uint32_t Number, uint8_t Length){uint8_t i;for (i = 0; i < Length; i ++){hhSerialSendByte(Number / Serial_Pow(10, Length - i - 1) % 10 + '0');}
}

在这里插入图片描述

//5、发送浮点数 前设置
#include <stdarg.h>
#include "stdio.h"
void Serial_Printf(char *format, ...)
{char String[100];va_list arg;va_start(arg, format);vsprintf(String, format, arg);va_end(arg);hhSerialSendString(String);
}
接收数据

1、查询法接收
在前面配置好USART的波特率等信息后,循环不断查询是否有数据传输过来

uint8_t ByteRecv;
int main(void){HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_USART1_UART_Init();OLED_Init();OLED_Clear();while (1){HAL_UART_Receive(&huart1, &ByteRecv, 1, HAL_MAX_DELAY);hhSerialSendByte(ByteRecv);}
}

2、中断法接收

//1.单字节发送
void hhSerialSendByte(uint8_t Byte){HAL_UART_Transmit(&huart1, &Byte, 1, HAL_MAX_DELAY);
}
uint8_t Serial_RxFlag;
uint8_t Serial_GetRxFlag(void){if (Serial_RxFlag == 1){Serial_RxFlag = 0;return 1;}return 0;
}
uint8_t ByteRecv;
//接收中断函数
HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){if (huart == &huart1){Serial_RxFlag=1;//已接收标志位,说明已经接收完一次HAL_UART_Receive_IT(&huart1, &ByteRecv, 1);//接收了一次后需要再次打开接收中断为下次中断接收做准备}
}int main(void){HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_USART1_UART_Init();OLED_Init();OLED_Clear();HAL_UART_Receive_IT(&huart1, &ByteRecv, 1);//启动中断接收一个字节OLED_ShowString(1, 1, "RxData:");while (1){if (Serial_GetRxFlag() == 1){hhSerialSendByte(ByteRecv);//将接收到的数据重新发送返回给电脑串口OLED_ShowHexNum(1, 8, ByteRecv, 2);}}
}

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

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

相关文章

Halcon机器视觉定位--模板匹配

一 Halcon模板匹配归纳 二 形状匹配算子介绍 find_shape_model( Image ,//待搜索图像 ModelID, //模版图像 AngleStart, //起始角度 AngleExtent, //角度范围 MinScore, //最小匹配分数 NumMatches, //匹配数目 MaxOverlap, //重叠度 SubPixel, //搜索精度 Greediness ,//自信度…

【免费数字孪生平台】医院数据可视化的新选择

随着大数据、云计算、人工智能等技术的深度融合&#xff0c;医院数据智能化升级已成为推动医疗服务质量飞跃的关键力量。 医院作为守护生命健康的前沿阵地&#xff0c;每天处理着海量的医疗数据。从患者病历、检查结果到医疗设备运行状态、医疗资源分配&#xff0c;每一项数据都…

还用老气的Excel做报表?试试这款“免费”可视化工具,快速制作3D智慧社区!

随着科技的飞速发展&#xff0c;智慧社区已经成为现代城市管理的重要组成部分。作为这一领域的核心工具&#xff0c;3D智慧社区可视化大屏凭借其先进的技术和强大的功能&#xff0c;正在逐步改变我们的生活方式。今天给大家分享一个 基于山海鲸可视化开发的3D可视化大屏的案例—…

【哈尔滨等保测评标准解析】

哈尔滨信息安全等级保护测评&#xff08;等保测评&#xff09;标准解析如下&#xff1a; 一、总体概述 哈尔滨市在进行等保测评时&#xff0c;遵循国家统一的标准框架&#xff0c;并结合本省的实际情况&#xff0c;形成了具有地方特色的安全防护模式。等保测评的主要目的是确…

DFS练习

105 从前序与中序遍历序列构造二叉树 import java.util.HashMap; import java.util.Map;class TreeNode {int val;TreeNode left;TreeNode right;public TreeNode(int val) {this.val val;} }public class Letcode105 {public TreeNode bulidTree(int[] preOrder, int[] inOrd…

探囊取物之多形式登录页面(基于BootStrap4)

基于BootStrap4的登录页面&#xff0c;支持手机验证码登录、账号密码登录、二维码登录、其它统一登录 低配置云服务器&#xff0c;首次加载速度较慢&#xff0c;请耐心等候&#xff1b;演练页面可点击查看源码 预览页面&#xff1a;http://www.daelui.com/#/tigerlair/saas/pr…

上帝之眼(BEVSee):多相机间无需标定,将各自目标统一到同一坐标系下(代码开源,提供数据集)

Abstract 我们解决了一个新的问题&#xff0c;即在鸟瞰视角&#xff08;BEV&#xff09;中无需预先给定相机校准的多视角相机和目标注册问题。这将多视角目标注册问题提升到一个新的无需校准的阶段&#xff0c;从而极大地缓解了许多实际应用中的限制。然而&#xff0c;这是一个…

Unity 3D软件下载安装;Unity 3D游戏制作软件资源包获取!

Unity3D&#xff0c;它凭借强大的功能和灵活的特性&#xff0c;在游戏开发和互动内容创作领域发挥着举足轻重的作用。 作为一款顶尖的游戏引擎&#xff0c;Unity3D内置了先进的物理引擎——PhysX。这一物理引擎堪称业界翘楚&#xff0c;能够为开发者提供全方位、高精度的物理模…

认识软件测试

认识软件测试 软件测试能力要求一、软件测试的步骤1.需求2.测试点3.测试用例4.执行测试用例5.缺陷管理6.测试报告 一、测试用例&#xff08;test case&#xff09;**用例编写要素**&#xff1a; 测试用例设计方法1.等价类2.边界值3.判定表法4.场景法 软件测试能力要求 软件测试…

Linux系统中交叉编译opencv库

目标&#xff1a;将opencv进行交叉编译&#xff0c;使其能在rk3326板子上运行使用。 环境&#xff1a; ubuntu&#xff1a;18.04 opencv:4.5.4 opencv源码从挂网下载&#xff1a;opencv源码下载地址 交叉编译链&#xff1a;gcc-arm-10.3-linux-gun 一.环境准备 1.交叉编译链我…

CVPR 最佳学生论文,一键启动「BioCLIP 生物分类的层次预测 Demo」,帮你快速识别生物种类

很多生物由于外形的相似程度较高&#xff0c;难以使用肉眼进行区分。美国俄亥俄州立大学、微软研究院、加州大学欧文分校、伦斯勒理工学院共同发布了「BioCLlP: A Vision Foundation Model for the Tree of Life」&#xff0c; 基于 TREEOFLIFE-10M 这样的大规模标记数据集&…

【面试系列】AI研究员高频面试题及详细解答

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…

HR人才测评,如何考察想象力?

什么是想象力&#xff1f; 想象力是指&#xff0c;人们通过在已有物质的基础上&#xff0c;通过大脑想象、加工、创造出新事物的能力&#xff0c;举一个非常简单的例子&#xff0c;在提到鸟这种生活的时候&#xff0c;大家会联想到各种各样不同鸟的品种。 在企业招聘中常常应…

WebStorm 2024 for Mac JavaScript前端开发工具

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff08;适合自己的M芯片版或Intel芯片版&#xff09;&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功3、打开访达&#xff0c;点击【文…

编写动态库

1.创建库.c .h文件 2.编写Makefile文件 3.make之后形成.so文件 4.make output,形成mylib 5.把mylib拷贝到test里面 mv mylib /test 6.编译 gcc main.c -I mylib/include -L mylib/lib -lmymethod形成a.out 但是直接执行会出现以下问题 很显然没有找到动态库 7.解决加载找不…

JDeveloper 12C 官网下载教程

首先、我们要登录Oracle官网 Oracle 甲骨文中国 | 云应用和云平台 登录进去如果不是中文可以点击右上角带有国旗的图标就行更改&#xff0c;选择一个你能看懂的文字。 然后&#xff0c;点击“资源”—点击“开发人员下载” 然后&#xff0c;点击“开发工具” 这里有很多工具可…

美团实习—后端开发凉经

面试经历分享 日期&#xff1a; 4月22日时长&#xff1a; 50分钟 意外之喜 没想到在面试过程中&#xff0c;我再次被选中进行下一轮&#xff0c;这确实让我感到有些意外和欣喜。这次面试经历对我而言&#xff0c;不仅是一次技能的检验&#xff0c;更是一次知…

简述设计模式-工厂模式

概述 工厂模式是为了提供创建对象的方式&#xff0c;无需制定要创建的具体类。 举个例子&#xff0c;假如我是甲方需要制造一辆车&#xff0c;我可以要油车&#xff0c;可以要电车&#xff0c;也可以油电混动车&#xff0c;如果没有工厂&#xff0c;我需要自己找到对应的制造…

可重入锁思想,设计MQ迁移方案

如果你的MQ消息要从Kafka切换到RocketMQ且不停机&#xff0c;怎么做&#xff1f;在让这个MQ消息调用第三方发奖接口&#xff0c;但无幂等字段又怎么处理&#xff1f;今天小傅哥就给大家分享一个关于MQ消息在这样的场景中的处理手段。 这是一种比较特例的场景&#xff0c;需要保…

数据质量管理-可访问性管理

前情提要 根据GB/T 36344-2018《信息技术 数据质量评价指标》的标准文档&#xff0c;当前数据质量评价指标框架中包含6评价指标&#xff0c;在实际的数据治理过程中&#xff0c;存在一个关联性指标。7个指标中存在4个定性指标&#xff0c;3个定量指标&#xff1b; 定性指标&am…