(单片机)

一、串口 (Serial Port / UART)

串口(Serial Port)、I²C(Inter-Integrated Circuit)、SPI(Serial Peripheral Interface)是三种常用的微控制器之间的通信协议。下面我将分别解释这些通信方式的概念、特点和常见使用场景,并提供一个简单的示例代码框架。

串口 (Serial Port / UART)

概念: 串口通信通常指的是异步串行通信,使用通用异步收发传输器(Universal Asynchronous Receiver/Transmitter, UART)来实现。数据在发送前被从并行格式转换成串行格式,然后在接收端再转换回并行格式。

特点:

  • 异步通信,不需要时钟信号。
  • 使用两根线:TX(发送)和RX(接收)。
  • 波特率可配置,用于控制数据传输速率。

使用场景:

  • 微控制器与计算机(通过串口线)通信。
  • 微控制器之间的点对点通信。
  • 连接至无线模块、GPS模块等。
#include "stm32f4xx_hal.h" // 引入STM32 HAL库头文件// 定义USART1的TX和RX引脚以及使用的GPIO端口
#define USART1_TX_PIN GPIO_PIN_9
#define USART1_RX_PIN GPIO_PIN_10
#define USART1_GPIO_PORT GPIOA// 定义USART1的中断线
#define USART1_IRQn USART1_IRQn// 创建USART处理结构体实例
USART_HandleTypeDef huart1;// 声明系统时钟配置函数
void SystemClock_Config(void);
// 声明GPIO初始化函数
static void MX_GPIO_Init(void);
// 声明USART初始化函数
static void MX_USART1_UART_Init(void);int main(void)
{HAL_Init(); // 初始化HAL库SystemClock_Config(); // 配置系统时钟MX_GPIO_Init(); // 初始化GPIOMX_USART1_UART_Init(); // 初始化USART1// 初始化USART1句柄if (HAL_UART_Init(&huart1) != HAL_OK){Error_Handler(); // 如果初始化失败,则调用错误处理函数}while (1){char data = 'H'; // 定义要发送的字符HAL_UART_Transmit(&huart1, &data, 1, 1000); // 发送数据}
}// 错误处理函数
void Error_Handler(void)
{while (1); // 无限循环,停止程序执行
}// 系统时钟配置函数
void SystemClock_Config(void)
{// ... 系统时钟配置代码 ...
}// GPIO初始化函数
static void MX_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0}; // 创建GPIO初始化结构体实例__HAL_RCC_GPIOA_CLK_ENABLE(); // 开启GPIOA时钟// 配置USART1的TX和RX引脚GPIO_InitStruct.Pin = USART1_TX_PIN | USART1_RX_PIN;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // 配置为复用推挽输出模式GPIO_InitStruct.Pull = GPIO_PULLUP; // 配置上拉电阻GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; // 设置高速GPIO_InitStruct.Alternate = GPIO_AF7_USART1; // 配置为USART1的复用功能HAL_GPIO_Init(USART1_GPIO_PORT, &GPIO_InitStruct); // 初始化GPIO
}// USART初始化函数
static void MX_USART1_UART_Init(void)
{// 创建USART初始化结构体实例huart1.Instance = USART1;huart1.Init.BaudRate = 115200; // 设置波特率为115200bpshuart1.Init.WordLength = UART_WORDLENGTH_8B; // 数据长度为8位huart1.Init.StopBits = UART_STOPBITS_1; // 停止位为1位huart1.Init.Parity = UART_PARITY_NONE; // 无奇偶校验huart1.

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

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

相关文章

frp http转发

解决HTTP协议API中域名变更后,已部署设备无法数据上传问题 HTTP协议API中包含域名 通过http://api_domain.com/xxx/xxx/xxx/xxx上传数据到WEB服务器。 变更前 api_domain.com 绑定在2xx.xxx.xxx.xxx上面。2xx.xxx.xxx.xxx部署了需要访问的WEB服务。 变更后 new_domain.c…

新章节:全设备通用调度算法-通讯重构

新章节:全设备通用调度算法-通讯重构 文章目录 新章节:全设备通用调度算法-通讯重构前言一、重构了TCP和UDP通讯二、优化了OPC和OPCUA三、升级了监控客户端四、升级了通讯的图形化其他升级 前言 现在真的很懒也很少写代码了,写代码和更新进度…

ActiViz中的颜色映射表vtkLookupTable

文章目录 一、简介二、VtkLookupTable的创建与初始化三、设置数据范围四、颜色映射设置五、不透明度设置六、自定义颜色映射七、 不连续性颜色映射八、 预设颜色映射方案九、可视化效果优化十、与其他VTK组件的整合十一、 动态调整映射表十二、保存和加载颜色映射表一、简介 V…

数据赋能(137)——开发:数据映射——实施过程、应用特点

实施过程 数据映射的实施过程通常涉及以下几个关键步骤: 定义阶段: 明确需要移动或映射的数据,包括源数据和目标数据的格式、结构以及传输频率。定义表格、每个表格中的字段,以及移动后字段的格式。映射数据阶段: 将…

webSocket网页通信---使用js模拟多页面实时通信

webSocket是什么 WebSocket是一种先进的网络技术,它提供了一种在单个TCP连接上进行全双工通信的能力。传统的基于HTTP的通信是单向的,即客户端发起请求,服务器响应请求,然后连接关闭。但是,WebSocket允许服务器和客户端…

欧盟,又出了新规-通用充电器新规通用充電器的 RED 修正案如何办理?

欧盟,又出了新规-通用充电器新规通用充電器的 RED 修正案如何办理? 欧盟新规委员会发布《通用充电器指令》指南通用充電器的 RED 修正案办理流程: 2024年5月7日,欧盟委员会发布《通用充电器指令》指南,修订了《无线…

Linux之进程控制(下)

目录 进程替换的概念 进程替换的函数 execl​编辑 execlp execle execv execvp execve 上期,我们学习了进程创建,进程终止和进程等待,今天我们要学习的是进程控制中相对重要的板块------进程替换。 进程替换的概念 在进程创建时&…

【 香橙派 AIpro评测】大语言模型实战教程:香橙派 AIpro部署LLMS大模型实站(保姆级教学)

引言 OrangePi AIpro 这块板子作为业界首款基于昇腾深度研发的AI开发板,一经发布本博主就火速去关注了,其配备的 8/20TOPS澎湃算力是目前开发板市场中所具备的最大算力,可谓是让我非常眼馋啊!这么好的板子那必须拿来用用&#xff…

LeetCode热题100刷题6:160. 相交链表、206. 反转链表、234. 回文链表、141. 环形链表、142. 环形链表 II

160. 相交链表 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode…

QDockWidget类详解

一.QDockWidget类概述 1.QDockWidget类 QDockWidget类提供了一个特殊的窗口部件,它可以是被锁在QMainWindow窗口内部或者是作为顶级窗口悬浮在桌面上。 QDockWidget类提供了dock widget的概念,dock widget也就是我们熟悉的工具面板或者是工具窗口。Do…

nginx转发的问题

我在项目配置的时候遇到一个问题: 配置了域名转发,且配置了https nginx配置如下: server {listen 443 ssl;server_name yourdomain.com;ssl_certificate /path/to/your/certificate.crt;ssl_certificate_key /path/to/your/private.key;loca…

10.SQL注入-http header利用案例

SQL注入-http header利用案例 首先通过登录http头界面,如图所示:登录的信息会被记录到数据库中去,同时使用bp进行抓包分析 将抓包的数据发送repeater里面进行调试 通过useragent进行注入 将useragent对应的数据信息删除掉,输入单引号测试被后台执行报错sql语法…

【Python机器学习】模型评估与改进——带交叉验证的网格搜索

虽然将数据划分为训练集、验证集、测试集的方法是可行的,也相对常用,但这种方法对数据的划分相当敏感,为了得到对泛化性能的更好估计,我们可以使用交叉验证来评估每种参数组合的性能,而不是仅将数据单次划分为训练集与…

为什么要在成像应用中使用图像采集卡?

达到最大产量是工业和工厂自动化的关键标准之一。提高传感器分辨率和帧速率有助于实现这一目标,但也使带宽达到极限,并提出了新的传输问题。当前高带宽接口(如10GigE、相机直接与PC连接和嵌入式系统)的实现促使成像应用的许多用户询问如何以最佳配置最优…

vue3进阶,渲染函数使用

目录 渲染函数使用场景 h() 渲染函数 渲染函数基础写法 渲染函数的组件传参,事件传递 渲染函数的插槽使用 结语 渲染函数使用场景 在写这篇文章之前,我会先简单说一下渲染函数,并且我会在第一个渲染函数的介绍中,标名渲染函数…

[Go 微服务] Kratos 验证码业务

文章目录 1.环境准备2.验证码服务2.1 kratos 初始化验证码服务项目2.2 使用 Protobuf 定义验证码生成接口2.3 业务逻辑代码实现 1.环境准备 protoc和protoc-gen-go插件安装和kratos工具安装 protoc下载 下载二进制文件:https://github.com/protocolbuffers/protobu…

FreeMarker学习记录

基本概念: FreeMarker 是一款模板引擎: 即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 是一个Java类库。 FreeMarker 被设计用来生成 HTML Web 页…

工作日常学习记录

使用情景 今天开发上遇到一个搜索的需求,要求可以多选,模糊查询。我首先和前端沟通,前端多选后使用逗号分隔,拼成字符串传输给我,我后端再进行具体的处理。 具体处理 初步构想 由于需要查询的字段也是一个长的字符…

探索智慧校园人事系统:社会关系管理功能全解析

智慧校园人事系统中的社会关系管理模块,旨在通过数字化手段,高效、安全地记录与管理教职工的社会联系信息,包括但不限于家庭成员、紧急联系人、学术合作关系、社会兼职等,旨在促进学校对教职工个人生活关怀及职业网络拓展的理解和…

【深入探索】揭秘SQL Server的多重身份验证模式

标题:【深入探索】揭秘SQL Server的多重身份验证模式 SQL Server作为企业级的关系数据库管理系统,提供了多种身份验证模式以满足不同场景下的安全需求。本文将深入探讨SQL Server支持的身份验证模式,包括Windows身份验证模式、混合模式以及如…