Can通信流程
下面给出一个更详细的 CAN 发送报文的程序流程说明,结合 HAL 库的使用及代码示例,帮助你了解每一步的具体操作和内部原理。
一、系统与外设初始化
1.1 HAL 库初始化
在 main()
函数开头,首先调用 HAL 库初始化函数:
HAL_Init();
- 作用:重置外设、初始化系统定时器,并设置 NVIC 分组等。
- 细节:这一步保证后续调用 HAL 库函数时,各个全局变量和中断配置已就绪。
1.2 系统时钟配置
调用时钟配置函数(通常由 CubeMX生成):
SystemClock_Config();
- 作用:设置系统时钟源、PLL 频率、各总线的分频系数。
- 细节:CAN 模块依赖于时钟,必须保证 CAN 所在总线的时钟已使能。
1.3 GPIO 初始化
调用初始化 GPIO 的函数(通常在 gpio.c 中定义,如 MX_GPIO_Init()
):
MX_GPIO_Init();
- 作用:初始化所有用到的 GPIO,包括 CAN_TX 和 CAN_RX 所对应的引脚。
- 细节:这些引脚需要配置为“复用功能”(Alternate Function),并设置对应的 AF 映射(如
GPIO_AF9_CAN1
),以便与 CAN 外设关联。
1.4 CAN 外设低级硬件初始化
通过 HAL 库的 MSP 回调函数进行:
- 在
HAL_CAN_MspInit()
中,使能 CAN 所在外设的时钟、配置相关 GPIO、设置 NVIC 中断优先级等。 - 例如:
void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan) {if(hcan->Instance==CAN1){__HAL_RCC_CAN1_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();GPIO_InitTypeDef GPIO_InitStruct = {0};// 配置 CAN_TX、CAN_RX 所对应的引脚(假设为 PA11、PA12)GPIO_InitStruct.Pin = GPIO_PIN_11 | GPIO_PIN_12;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF9_CAN1;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);// 配置 NVIC 中断(可选,根据需要启用接收/错误中断)HAL_NVIC_SetPriority(CAN1_RX0_IRQn, 0, 0);HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn);} }
- 作用:为后续 CAN 模块初始化提供硬件资源支持。
二、CAN 外设初始化及滤波器配置
2.1 配置 CAN_HandleTypeDef 并调用 HAL_CAN_Init()
在 main()
或专用初始化函数中:
CAN_HandleTypeDef hcan1;hcan1.Instance = CAN1;
hcan1.Init.Prescaler = 16; // 根据时钟计算波特率
hcan1.Init.Mode = CAN_MODE_NORMAL; // 工作模式(正常/回环等)
hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ;
hcan1.Init.TimeSeg1 = CAN_BS1_1TQ;
hcan1.Init.TimeSeg2 = CAN_BS2_1TQ;
hcan1.Init.TimeTriggeredMode = DISABLE;
hcan1.Init.AutoBusOff = DISABLE;
hcan1.Init.AutoWakeUp = DISABLE;
hcan1.Init.AutoRetransmission = ENABLE;
hcan1.Init.ReceiveFifoLocked = DISABLE;
hcan1.Init.TransmitFifoPriority = DISABLE;if (HAL_CAN_Init(&hcan1) != HAL_OK)
{// 初始化失败处理Error_Handler();
}
- 作用:通过调用
HAL_CAN_Init()
,配置 CAN 控制器的各种参数。 - 细节:调用过程中会自动调用
HAL_CAN_MspInit()
完成低级资源初始化。
2.2 配置 CAN 滤波器
CAN 的滤波器决定了哪些报文会被 CAN 模块接收。调用 HAL 提供的函数或用户封装的函数来配置滤波器。
CAN_FilterTypeDef canFilterConfig;
canFilterConfig.FilterActivation = ENABLE;
canFilterConfig.FilterBank = 0; // 滤波器编号(根据硬件数量选择)
canFilterConfig.FilterFIFOAssignment = CAN_FILTER_FIFO0;
canFilterConfig.FilterIdHigh = 0x0000; // 根据需求设置过滤的 ID(高位)
canFilterConfig.FilterIdLow = 0x0000; // (低位)
canFilterConfig.FilterMaskIdHigh = 0x0000; // 掩码,高位(0表示不过滤,即接收所有)
canFilterConfig.FilterMaskIdLow = 0x0000; // 掩码,低位
canFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
canFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;if (HAL_CAN_ConfigFilter(&hcan1, &canFilterConfig) != HAL_OK)
{// 滤波器配置失败处理Error_Handler();
}
- 作用:指定 CAN 模块只接收符合条件的报文。
- 细节:滤波器必须在 CAN 启动之前配置完成。通常在
HAL_CAN_Init()
之后,HAL_CAN_Start()
之前完成滤波器配置。
2.3 启动 CAN 模块
调用启动函数:
if (HAL_CAN_Start(&hcan1) != HAL_OK)
{// 启动失败处理Error_Handler();
}
- 作用:使 CAN 模块从初始化状态进入正常工作状态,此时发送和接收功能均可使用。
- 细节:启动后,可以使能中断,开始接收和发送数据。
三、构造和发送 CAN 报文
3.1 构造发送数据结构
通常使用 HAL 库提供的 CAN_TxHeaderTypeDef
结构体,同时准备数据数组。例如:
CAN_TxHeaderTypeDef TxHeader;
uint8_t TxData[8] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88};TxHeader.StdId = 0x123; // 标准标识符
TxHeader.ExtId = 0x01; // 如果使用扩展 ID,此项有效
TxHeader.RTR = CAN_RTR_DATA; // 数据帧(非远程帧)
TxHeader.IDE = CAN_ID_STD; // 标准帧
TxHeader.DLC = 8; // 数据长度:8 字节
TxHeader.TransmitGlobalTime = DISABLE;
- 作用:设置报文的 ID、数据长度、数据帧类型等。
- 细节:字段设置应根据应用协议要求,确保接收端能正确解析数据。
3.2 将报文写入发送邮箱并启动发送
调用 HAL 库的发送函数:
uint32_t TxMailbox;
if (HAL_CAN_AddTxMessage(&hcan1, &TxHeader, TxData, &TxMailbox) != HAL_OK)
{// 发送失败处理,例如邮箱未空或总线错误Error_Handler();
}
- 作用:将构造好的报文放入 CAN 控制器的发送邮箱,由硬件完成后续发送过程。
- 细节:
TxMailbox
用于返回所使用的发送邮箱编号(CAN 发送邮箱通常有 3 个)。- 如果返回错误,则需要根据错误码进行重发或错误处理。
3.3 发送过程监控与确认
- 轮询检查:可以通过轮询
HAL_CAN_GetTxMailboxesFreeLevel(&hcan1)
来判断是否还有空邮箱。 - 中断回调:也可以使用 HAL 提供的回调函数,例如
HAL_CAN_TxMailbox0CompleteCallback()
(如果启用了对应中断),来确认某个邮箱完成发送。 - 错误处理:在发送过程中,如果检测到错误(例如仲裁失败、总线错误等),需要调用错误回调
HAL_CAN_ErrorCallback()
进行处理。
四、CAN 接收(补充说明)
虽然主要讨论发送流程,但在实际应用中,发送报文后 CAN 控制器也可能接收到响应数据。一般流程如下:
- 中断处理
- 当 CAN 模块检测到有报文到达 FIFO0 时,HAL 库会调用回调函数:
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) {CAN_RxHeaderTypeDef RxHeader;uint8_t RxData[8];if(HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxHeader, RxData) == HAL_OK){// 对接收到的数据进行处理} }
- 当 CAN 模块检测到有报文到达 FIFO0 时,HAL 库会调用回调函数:
- 数据处理
- 在回调函数中,读取报文内容,根据 ID 和数据内容进行相应的业务处理。
五、总结整个流程
-
初始化阶段
- HAL 初始化、系统时钟、GPIO 配置、CAN MSP 初始化(使能时钟、GPIO、NVIC 等)。
-
CAN 模块初始化
- 配置 CAN 参数(波特率、模式等),调用
HAL_CAN_Init()
。 - 配置滤波器(决定哪些报文被接收),调用
HAL_CAN_ConfigFilter()
。 - 启动 CAN 模块,调用
HAL_CAN_Start()
。
- 配置 CAN 参数(波特率、模式等),调用
-
发送阶段
- 构造发送报文(填写 CAN_TxHeaderTypeDef、数据数组)。
- 将报文写入发送邮箱,调用
HAL_CAN_AddTxMessage()
。 - 监控发送过程,处理发送成功或错误。
这种详细流程确保在发送报文前,所有硬件和软件配置都已完成,并且在发送过程中对可能出现的错误提供了检查和处理机制。通过这种模块化设计,整个 CAN 通信过程清晰而可靠,便于后续的调试和维护。
相关文章:
Can通信流程
下面给出一个更详细的 CAN 发送报文的程序流程说明,结合 HAL 库的使用及代码示例,帮助你了解每一步的具体操作和内部原理。 一、系统与外设初始化 1.1 HAL 库初始化 在 main() 函数开头,首先调用 HAL 库初始化函数: HAL_Init()…...
基于BClinux8部署Ceph 19.2(squid)集群
#作者:闫乾苓 文章目录 1.版本选择Ceph版本发布历史目前官方在维护的版本 2.部署方法3.服务器规划4.前置配置4.1系统更新4.2配置hosts cat >> /etc/hosts << EOFssh-keygenssh-copy-id ceph01ssh-copy-id ceph02ssh-copy-id ceph034.5 Python34.6 Syst…...
Workerman5.0如何实现一对一聊天
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
c#难点整理2
1.对象池的使用 就是先定义一系列的对象,用一个,调一个。 public class ObjectPool<T> where T : new(){private Queue<T> pool; // 用于存储对象的队列private int maxSize; // 对象池的最大容量// 构造函数public ObjectPool(int maxSi…...
STM32基础教程——定时器
前言 TIM定时器(Timer):STM32的TIM定时器是一种功能强大的外设模块,通过时基单元(包含预分频器、计数器和自动重载寄存器)实现精准定时和计数功能。其核心原理是:内部时钟(CK_INT)或…...
How to share files with Windows via samba in Linux mint 22
概述 Windows是大家日常使用最多的操作系统,在Windows主机之间,可以共享文件,那么如何在Windows主机与Linux主机之间共享文件呢? 要在Windows主机与Linux主机之间共享文件,我们可以借助Samba协议完成。借助Samba协议…...
[AI速读]如何构建高效的AMBA协议检查器(Checker IP)
在芯片验证过程中,检查器(Checker)是确保设计符合协议规范的关键工具。本文基于一篇技术论文,分享如何为AMBA协议(如AXI、AHB)构建可重用的检查器IP(Checker IP,简称CIP),并简化其核心思路,帮助工程师快速上手。 一、什么是Checker IP? Checker IP是一组用SystemVe…...
VBA-Excel
VBA 一、数据类型与变量 常用数据类型: Byte:字节型,0~255。Integer:整数型,用于存储整数值,范围 -32768 到 32767。Long:长整型,可存储更大范围的整数,范围 -214748364…...
网络华为HCIA+HCIP IPv6
目录 IPv4现状 IPv6基本报头 IPv6扩展报头 IPv6地址 IPv6地址缩写规范 编辑 IPv6地址分配 IPv6单播地址分配 IPv6单播地址接口标识 IPv6常见单播地址 - GUA (2 / 3 开头) IPv6常见单播地址 - ULA IPv6常见单播地址 - LLA IPv6组播地…...
LeetCode 每日一题 2025/3/17-2025/3/23
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 3/17 1963. 使字符串平衡的最小交换次数3/18 2614. 对角线上的质数3/19 2610. 转换二维数组3/20 2612. 最少翻转操作数3/21 2680. 最大或值3/22 2643. 一最多的行3/23 2116…...
git tag以及git
git tag 以及git 一、先说收获吧 1. git bash 在windows上 类似于linux的bash提供的shell命令行窗口,可以执行很多linux命令,cd pwd ls vim cat touch mkdir,还可以用正则匹配查看标签。相当于在windows上装了一个小的linux。git init myproj…...
Android 自定义变形 MD5 算法
版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ MD5是一种哈希函数,用于将任意长度的数据映射为一个固定长度的哈希值。它由 Ron Rivest 在 1991 年设计,是继 MD4 之后的改进版本。 M…...
【SpringBoot】MorningBox小程序的完整后端接口文档
以下是「晨光宅配」小程序的完整接口文档,涵盖了所有12个表的接口。 每个接口包括请求方法、URL、请求参数、响应格式和示例 接口文档 1. 用户模块 1.1 获取用户信息 URL: /user/{userId}方法: GET请求参数: userId (路径参数): 用户ID响应格式:{"userId": 1,&qu…...
2025年01月03日微创网络(杭州银行外包)前端面试
目录 html 块级元素和行内元素有哪些阴影的几个属性垂直水平居中的实现方式定位的几种方式盒子模型的方式js的数组方法有哪些vue2 vue3 区别vuex哈希路由和浏览器路由的区别浏览器缓存的几个方式react hooks的优势react 组件传值vue 组件传值如何进行性能优化前端监控get post…...
工单分类总结
微调BERT-base模型,构建层次化分类器,Top-3准确率达97.2%,并自动识别出问题的关键类别 1. 具体微调的BERT-base模型是什么模型? BERT-base模型是一个预训练的Transformer模型,包含12个Transformer块、12个自注意头和隐藏大小为768。该模型在大规模文本数据上进行了预训练…...
2025年了,5G还有三个新变化
最近舆论开始讨论5G为什么不火了?5G是不是停滞发展了。 实际上,5G不仅在发展,还迎来了它的升级版5G-A。 在今年西班牙举行的世界移动通信大会上,5G-A就是焦点之一。 被誉为全球通信领域风向标的MWC,汇聚了华为、中兴通…...
区块链交易所平台开发全解析
在数字化飞速发展的今天,区块链技术已成为金融领域的核心驱动力之一。作为数字货币交易的关键平台,区块链交易所的开发不仅涉及复杂的技术环节,还需要兼顾用户体验、安全性、合规性等多个方面。本文将深入探讨区块链交易所平台的开发流程、关…...
hexo+butterfly博客功能完善和美化(四)---博客上传
hexobutterfly博客功能完善和美化(四)—博客上传 这是最后一期讲美化和功能完善了,笔者会陆续把csdn上面的博客转移到我的博客网站上面,大家可以来访问 Darlingの妙妙屋 文章目录 hexobutterfly博客功能完善和美化(…...
源码分析之Leaflet中dom模块DomEvent.DoubleTap的实现原理
概述 DomEvent.DoubleTap模块是Leaflet中用于模拟双击(dbclick)事件的模块,主要解决移动端浏览器对双击事件支持不完善或延迟的问题,同时避免与标签(<label>)关联的表单元素误触发。 源码分析 源码实现如下 DomEvent.DoubleTap的源码实现如下&…...
记录一次,rabbitmq开启stomp插件之后,还是连不上15674端口的问题
原因是装在docker 里面的rabbitmq 没有映射15674端口,需重新删除容器之后重新运行 docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -p 15674:15674 -p 1883:1883 -p 15675:15675 rabbitmq:版本号 进入docker容器开启插件 docker exec -it rabbitm…...
git clone项目报错fatal: fetch-pack: invalid index-pack output问题
前情回顾:git项目放在公司服务器上面,克隆等操作需要连接VPN才能操作。由于项目比较大,网速比较慢,克隆项目经常出现fetch-pack: invalid index-pack output。在网上查找各种解决方法。也就这一种有点效果。仅供参考,不…...
【access开发】导入excel 并生成表
hi,大家好呀! 最近天气越来越暖了,在这个春暖花开的季节了,每天心情应该都是美美的,正所谓一年之计在于春,在这个美好的季节,大家一起努力学习学习吧!那我们来看看今天学点啥呢&…...
利用knn算法实现手写数字分类
利用knn算法实现手写数字分类 1.作者介绍2.KNN算法2.1KNN(K-Nearest Neighbors)算法核心思想2.2KNN算法的工作流程2.3优缺点2.4 KNN算法图示介绍 3.实验过程3.1安装所需库3.2 MNIST数据集3.3 导入手写数字图像进行分类3.4 完整代码3.5 实验结果 1.作者介…...
从零开始实现 C++ TinyWebServer 处理请求 HttpRequest类详解
文章目录 HTTP 请求报文HttpRequest 类实现 Init() 函数实现 ParseRequestLine() 函数实现 ParseHeader() 函数实现 ParsePath() 函数实现 ParseBody() 函数实现 ParsePost() 函数实现 ParseFromUrlEncoded() 函数实现 UserVerify() 函数实现 Parse() 函数HttpRequest 代码Http…...
Android开发layer-list
Android开发layer-list 它的用处可以在drawable上进行多图拼接,比如启动页,不想图片被拉伸就这么做。还有做某些线突出来。 示例代码: <?xml version"1.0" encoding"utf-8"?> <layer-list xmlns:android&q…...
如何提升库存系统的高并发和稳定性:算法与设计模式
库存系统是企业运营的核心模块,尤其是在电商、零售和供应链管理中,系统的高并发和稳定性直接影响订单处理的准确性和效率。面对海量订单、复杂的库存管理需求,如何在高并发环境下确保库存数据的准确性和系统的稳定性?本文将从架构…...
关于CNN,RNN,GAN,GNN,DQN,Transformer,LSTM,DBN你了解多少
以下是神经网络中常见的几种模型的简要介绍: 1. CNN (Convolutional Neural Network, 卷积神经网络) 用途: 主要用于图像处理和计算机视觉任务。特点: 通过卷积核提取局部特征,具有平移不变性,能够有效处理高维数据(如图像…...
设计模式之装饰器模式
装饰器模式(Decorator)依然是我们设计模式中的结构型模式,其中的构造思想仍然是对多个类进行组合使用,以达成系统调用实现指定功能的设计模式。装饰器模式不论在我们日常开发过程中还是在我们提升技术阅读源码过程中都是比较常见的,但是整体学…...
Mistral AI发布开源多模态模型Mistral Small 3.1:240亿参数实现超越GPT-4o Mini的性能
法国人工智能初创公司Mistral AI于2025年3月正式推出新一代开源模型Mistral Small 3.1 ,该模型凭借240亿参数的轻量级设计,在多项基准测试中表现优异,甚至超越了Google的Gemma 3和OpenAI的GPT-4o Mini等主流专有模型。 1、核心特性与优势 多…...
SpringBoot3实战(SpringBoot3+Vue3基本增删改查、前后端通信交互、配置后端跨域请求、数据批量删除(超详细))(3)
目录 一、从0快速搭建SpringBoot3工程、SpringBoot3集成MyBatis、PageHelper分页查询的详细教程。(博客链接) 二、实现前端与后端通信对接数据。(axios工具) (1)安装axios。(vue工程目录) (2)封装请求工具类。(request.js) <1&…...
LabVIEW发电平台数据采集系统
本文详细介绍了基于LabVIEW的摇臂式波浪发电平台数据采集系统的设计与实现。通过整合LabVIEW软件与多种传感器技术,本系统能够有效提升数据采集的准确性和效率,为波浪能的利用和发电设备的优化提供科学依据。 项目背景 随着全球能源需求增长和环境保…...
人工智能(AI)系统化学习路线
一、为什么需要系统化学习AI? 人工智能技术正在重塑各行各业,但许多初学者容易陷入误区: ❌ 盲目跟风:直接学习TensorFlow/PyTorch,忽视数学与算法基础。 ❌ 纸上谈兵:只看理论不写代码,无法解…...
oracle事务的组成
1)数据库事务由以下的部分组成: 一个或多个DML 语句 ; 一个 DDL(Data Definition Language – 数据定义语言) 语句; 一个 DCL(Data Control Language – 数据控制语言)语句; 2)事务的执行开始: 以第一个 DML 语句的执行作为开始 ,…...
第二十八篇 数据获取与数据分析:数仓体系下的专业化分工与协同
声明:文章内容仅供参考,需仔细甄别。文中技术名称属相关方商标,仅作技术描述;代码示例为交流学习用途,部分参考开源文档(Apache 2.0/GPLv3);案例数据已脱敏,技术推荐保持…...
SpringSecurity——前后端分离登录认证
SpringSecurity——前后端分离登录认证的整个过程 前端: 使用Axios向后端发送请求 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>登录</title><script src"https://cdn…...
【AI】Orin Nano+ubuntu22.04上移植YoloV11,并使用DeepStream测试成功
1、准备工作 使用 sdk-manager 烧写 OrinNano, JetPack版本为6.0 DP,对应操作系统为:Ubuntu22.04 参见博客:【NVIDIA】Jetson Orin Nano系列:烧写Ubuntu22.04 2、安装 PyTorch 2.1 下载依赖 1)安装onnx pip install onnx -i https://pypi.tuna.tsinghua.edu.cn/sim…...
RHCE 使用nginx搭建网站
一。准备工作 Windows dns映射 创建目录网页 vim 编辑内容 添加如下 重启nginx服务,在Windows浏览器进行测试...
arm linux下的读写信号量rw_semphore的实现
本文基于arm linux 5.10来介绍内核中使用的读写信号量rw remphore的实现代码。 内核中信号量结构体struct rw_semaphore的定义在include/linux/rwsem.h 32位architectures下,结构体struct rw_semaphore中的count的使用如下: 先来看信号量的定义和初始化…...
搭建主从DNS、nfs、nginx
任务需求: 客户端通过访问 www.nihao.com 后,能够通过 dns 域名解析,访问到 nginx 服务中由 nfs 共享的首页文件,内容为:Very good, you have successfully set up the system. 各个主机能够实现时间同步,…...
Qt6+QML实现Windows屏幕录制
前言 Qt6提供了更丰富的多媒体支持类,使用Qt6 QMediaCaptureSession、QScreenCapture、QMediaRecorder,来实现一个屏幕录制的demo,其中QScreenCapture 最低版本 Qt6.5。支持录制的清晰度设置,选择视频保存位置,UI使用…...
python二级每日十题(1)
\ 第一题,在Python中,变量名的命名规则:以字母或下划线开头,后面跟字母、下划线和数字;不能以数字开头.故选c项,博主正确 缩进:在逻辑行首的空白(空格和制表符)用来决定逻辑行的缩进层次&…...
记录一次truncate导致MySQL夯住的故障
目录 环境信息: 故障描述: 处理过程: 原理分析: show processlist结果中的system lock含义: truncate原理: 1. TRUNCATE 的执行流程 2、TRUNCATE 表导致数据库夯住的原因 3、 TRUNCATE 表导致…...
Java Web应用程序实现用户登录、学生信息管理和验证码验证以及页面跳转等基本功能(IDEA)含(Ajax、JSTL)
一、具体框架以及代码功能的展示: 1. 文件结构 web03: 项目根目录。 src: 包含Java源代码。 cn.lvb: 主包。 bean: 包含实体类,如 Book 和 Student。 controller: 包含处理HTTP请求的Servlet类,如 DoLogin, Index, StuList1, VerifyCode。 …...
【Mybatis-plus】在mybatis-plus中 if test标签如何判断 list不为空
博主介绍:✌全网粉丝22W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
MySQL 事务(Transaction)详解
MySQL 事务(Transaction)详解 1. 什么是事务? 事务(Transaction)是一组要么全部执行,要么全部回滚的 SQL 语句,用于保证数据一致性。事务一般用于银行转账、订单支付等操作,确保多个…...
Redis 知识点梳理
第一章 NoSQL数据库发展历史简介 1、 Web的历史发展历程 web1.0时代简介 web 1.0是以编辑为特征,网站提供给用户的内容是网站编辑进行编辑处理后提供的,用户阅读网站提供的内容这个过程是网站到用户的单向行为web1.0时代的代表站点为新浪,…...
github上传操作简单说明
前期准备 0.下载git(如果已经有了就不用了) 1.在GitHub上新建一个存储库 2.先在本地创建一个目录作为本地库目录,在目录里打开git bash进行上传 上传过程 echo "# Garbled_repair" >> README.md 作用:创建一个…...
在 ASP .NET Core 9.0 中使用 Scalar 创建漂亮的 API 文档
示例代码:https://download.csdn.net/download/hefeng_aspnet/90407900 Scalar 是一款可帮助我们为 API 创建精美文档的工具。与感觉有些过时的默认 Swagger 文档不同,Scalar 为 API 文档提供了全新而现代的 UI。其简洁的设计让开发人员可以轻松找到测试…...
针对 pdf.mjs 文件因 MIME 类型错误导致的 Failed to load module script 问题解决方案
Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of “application/octet-stream”. Strict MIME type checking is enforced for module scripts per HTML spec. pdf.mjs 这种问题该如何处理 nginx 针对 pdf.…...
Flink介绍与安装
Apache Flink是一个在有界数据流和无界数据流上进行有状态计算分布式处理引擎和框架。Flink 设计旨在所有常见的集群环境中运行,以任意规模和内存级速度执行计算。 一、主要特点和功能 1. 实时流处理: 低延迟: Flink 能够以亚秒级的延迟处理数据流,非常…...