(单片机)

一、串口 (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,一经查实,立即删除!

相关文章

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

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

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…

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

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

四、(2)获取数据(补充urllib)(爬虫及数据可视化)

四、(2)获取数据(补充urllib)(爬虫及数据可视化) urllibget请求post请求User-AgentResponse模拟真实信息在豆瓣spider中真实实现 urllib 此处的扩展,可以进行在主体的程序学习完成后&#xff0…

【数据结构】04.双向链表

一、双向链表的结构 注意:这里的“带头”跟前面我们说的“头节点”是两个概念,带头链表里的头节点,实际为“哨兵位”,哨兵位节点不存储任何有效元素,只是站在这里“放哨的”。 “哨兵位”存在的意义:遍历循…

Roboflow自动标定数据集

最近需要自己打数据集,记录一下用Roboflow来打标签。 https://roboflow.com/(官网) 进入官网先注册,注册完成后进入这个界面。 我先讲如果不想让数据集公开怎么办,因为这里每个新建的都是公开的。新账号进去应该进去…

【数据分享】国家级旅游休闲街区数据(Excel/Shp格式/免费获取)

之前我们分享过从我国文化和旅游部官网整理的2018-2023年我国50个重点旅游城市星级饭店季度经营状况数据(可查看之前的文章获悉详情)!文化和旅游部官网上也分享有很多与旅游相关的常用数据,我们基于官网发布的名单文件整理得到全国…

Qt Creator13配置Android开发环境

QT Creator13是目前(2024年)最新版本,配置Android开发环境有一些不一样,走了一些弯路,记录如下。 1、安装JDK和SDK 下载安装JDK和SDK,建议安装在无空格和中文字符的目录下。 具体安装步骤不再赘述&#…

GraalVM

文章目录 1、什么是GraalVM2、GraalVM的两种模式1_JIT模式2_AOT模式3_总结 3、应用场景1_SpringBoot搭建GraalVM应用2_函数计算3_Serverless应用 4、参数优化和故障诊断1_内存快照文件的获取2_运行时数据的获取 1、什么是GraalVM GraalVM是Oracle官方推出的一款高性能JDK&…