自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 CAN总线学习(五):外设

STM32的CAN外设采用三邮箱发送机制(支持优先级/顺序发送策略)和双FIFO接收队列(可配置过滤规则与溢出处理),通过NART、TXFP、RFLM等寄存器实现自动重传、发送优先级、队列锁定等控制功能。其工作模式包含正常/静默/环回/睡眠四种状态,支持自动唤醒,并提供发送完成、FIFO状态、错误检测等中断类型。过滤器采用可编程的32/16位标识符匹配机制,支持列表和掩码两种过滤模式,能有效管理CAN总线通信中的数据流。

2026-07-29 15:02:36 414

原创 CAN总线学习(四):仲裁

CAN总线通过非破坏性仲裁机制解决多设备同时发送冲突问题。总线采用"先占先得"原则,空闲时设备可发送数据。当多个设备同时请求发送时,通过ID号进行仲裁:ID号小的优先级高,利用"线与"特性(0覆盖1)和回读机制,保证高优先级数据不被破坏。仲裁过程中,设备逐位比较发送位与回读位,若不一致则退出。数据帧优先级高于遥控帧,标准格式(11位ID)优先级高于扩展格式(29位ID)当高11位相同时。这一机制实现了高效、公平的总线资源分配。

2026-07-27 12:07:23 305

原创 CAN总线学习(三):帧同步

CAN总线通过约定波特率实现无时钟线同步通信。发送方按固定时长输出数据位,接收方同步采样,但实际存在初始位置不对齐和时钟误差积累问题。位时序将每个数据位细分为同步段、传播段和两个相位缓冲段(PBS1/PBS2),通过调整Tq时间单位灵活定位采样点。硬同步利用SOF下降沿对齐初始相位,再同步通过动态调节PBS1/PBS2补偿时钟误差。波特率计算公式为各段Tq时长之和的倒数,例如当总时长为5us(10Tq)时,波特率为200kbps。这两种同步机制共同确保采样点稳定在数据位中心附近。

2026-07-24 16:15:52 300

原创 CAN总线学习(二):帧格式

CAN协议帧类型与数据帧设计摘要 CAN协议定义了5种帧:数据帧(广播发送)、遥控帧(请求数据)、错误帧(错误通知)、过载帧(未就绪)和帧间隔(隔离前后帧)。数据帧设计核心思路:通过ID区分功能,DLC调整数据长度,RTR区分广播/请求模式,CRC校验完整性,ACK确认接收。采用位填充规则(每5相同位插入1相反位)确保同步,防止误判。标准/扩展格式由IDE标识,29位ID扩展帧支持更多地址。遥控帧无数据段,RTR置1,用于请求数据。波形实例展示了不同帧结构的填充位处理及ID、数据段的实际应用。

2026-07-24 11:21:16 478

原创 CAN总线学习(一):CAN硬件电路

CAN总线通信需要控制器配合收发器实现电平转换,采用差分信号传输。高速CAN采用闭环网络和120Ω终端电阻,隐性电平为0V,显性电平为2V;低速CAN采用开环网络和2.2kΩ电阻,电平差更大(隐性-1.5V,显性3V)。收发器通过控制MOS管实现总线电平切换,隐性状态断开MOS管(默认高电平),显性状态导通MOS管形成电压差。不同设计适应不同速率需求:高速CAN闭环结构利于快速恢复,低速CAN大开环电平确保长距传输可靠性。

2026-07-05 01:26:54 868

原创 嵌入式:Bootloader跳转到固件流程

摘要:MCU通过Bootloader完成固件(.bin)刷写后,需要正确跳转到APP程序。关键步骤包括:1)Bootloader关闭外设和中断;2)将中断向量表地址更新为APP在Flash中的起始地址(如0x08010000);3)通过汇编指令更新MSP和PC指针,跳转到APP的中断向量表。APP程序随后按照标准启动流程执行:Reset_Handler→SystemInit→main()。该过程确保了两个独立程序(Bootloader和APP)的中断向量表和运行环境正确切换。

2026-06-08 19:25:37 275

原创 深入理解 RTOS 任务启动:SVC 异常与寄存器恢复过程

RTOS启动首个任务时通过SVC_Handler进入异常处理流程。Cortex-M硬件会自动保存部分寄存器(R0-R3、R12、LR、PC、xPSR)形成异常栈帧,而R4-R11需RTOS手动保存。任务栈结构需包含这两部分:手动保存区和硬件栈帧区。在SVC_Handler中,首先从任务栈手动恢复R4-R11寄存器,然后将PSP指针指向异常栈帧起始地址。通过异常返回机制,硬件自动恢复剩余寄存器,并将PC指向任务入口,从而实现任务切换。该过程充分利用了Cortex-M的硬件特性,通过软硬件协同完成上下文切换。

2026-06-01 16:23:36 243

原创 嵌入式:Bootloader中ringbuffer中断入队&主循环出队存在的问题

摘要:Bootloader使用ringbuffer实现串口数据的异步解析,中断接收数据入队,主循环出队解析。关键问题在于中断入队和主循环出队操作tail指针时的并发冲突:当tail=0x00FF时,中断中未完整更新16位指针(仅更新低字节),导致tail错误变为0x0000(应为0x0100),引发缓冲区满的错误判断,造成数据丢失。这揭示了嵌入式系统中共享资源访问的原子性问题。

2026-05-26 21:22:37 32

原创 Vscode配置C/C++环境“无法使用 compilerPath 解析配置”及引用路径问题

摘要:本文分析了C/C++项目中头文件引用错误的问题。在c_cpp_properties.json配置文件中,相对路径引用会导致标准头文件和include路径中的子文件引用失败。正确的做法是使用绝对路径,格式为${workspaceFolder}+相对路径。示例展示了如何将原配置中的相对路径修改为绝对路径,包括app、components、driver、platform等目录路径以及编译器路径,确保项目能够正确识别和引用所有必要的头文件。

2026-05-23 15:06:41 56

原创 嵌入式:单片机启动流程与MSP/PC指针原理

摘要:单片机启动时首先执行启动文件中的初始化流程,包括设置MSP(栈指针)和PC(程序计数器)。MSP用于管理函数调用时的栈操作,PC则指示下一条执行指令。通过实例分析展示了从复位到main()函数的完整过程:复位时MSP和PC被赋予初始值,进入main()后通过调整SP为局部变量分配栈空间,函数调用时PC跳转并保存返回地址。整个过程体现了MCU通过MSP管理栈空间、PC引导指令执行的运行机制。

2026-05-21 12:11:28 243

原创 WSL安装中“wsl --list --online”未显示Ubuntu版本号

摘要:Windows 10用户安装WSL时若无法显示Ubuntu版本号,是因WSL版本过低。解决方案分三步:1)执行"wsl --update"升级至WSL2;2)重新运行"wsl --list --online"查询发行版;3)通过"wsl --install --web-download -d Ubuntu-24.04"下载指定版本。该流程可解决旧版WSL不兼容问题,实现Ubuntu 24.04的顺利安装。(149字)

2026-05-20 15:57:43 280

原创 嵌入式: 为什么中断服务函数必须尽快执行完毕?

文章摘要:实验发现当USART3中断处理函数中包含耗时日志打印时,会导致数据包丢失。分析表明,在回调函数中执行printf打印会占用过多时间,使得在115200波特率下无法及时处理连续接收的数据字节(每个字节需在86μs内处理)。由于串口1的日志输出波特率远低于CPU主频,导致中断响应延迟,当上位机快速发送多字节时,未及时读取的DR寄存器数据会被新数据覆盖,从而产生吞包现象。建议优化方案包括:移除中断中的耗时操作、使用DMA传输、或建立环形缓冲区进行异步处理。

2026-04-29 21:34:22 54

原创 嵌入式:什么是回调函数,为什么要使用回调函数?

回调函数是通过函数指针调用的函数,用于实现不同功能模块间的解耦。当驱动层事件发生时(如按键按下),通过预先注册的回调函数通知应用层执行相应操作,而无需驱动层了解具体实现。使用步骤:1)定义回调函数类型;2)提供注册接口(如key_register_callback);3)事件触发时调用注册函数。相比直接调用具体函数,回调机制使驱动层更通用,应用层可灵活扩展功能(如点灯、蜂鸣等),提升了代码复用性和可维护性。典型应用场景包括中断处理、异步通信等需要分层设计的系统。

2026-04-29 21:03:03 42

原创 Pyrtlsdr历程及相关资料

pyrtlsdr相关学习资料

2023-02-21 19:56:01 474

原创 Matlab高斯白噪声信道仿真

信号叠加一个的均值为0.2,方差为0.5的高斯噪声后进行信号和噪声功率谱密度分析。

2022-11-14 20:38:01 4611

原创 基于RTL—SDR及Simulink的FM收音机仿真

基于通信系统建模与仿真原理后,利用rtl-sdr模块在Simulink上进行FM收音机仿真。

2022-08-27 13:53:49 4173

原创 Simulink仿真代码之step()函数的使用

simulink 仿真代码中调用库元件的step()的使用注释

2022-08-01 22:42:45 5130

原创 Matlab中firpm函数设计具有非对称衰减的 FIR 带通滤波器

Matlab使用firpm函数时的参数解释

2022-07-31 11:45:27 4172 2

原创 采样频率在频谱分析中的理解

采样频率在频谱分析的主要地位,即模拟信号到数字信号,频谱的变化入手,抓住采样频率这个关键区间内,可以还原模拟信号的全频段的重点

2022-07-19 13:17:46 3097

原创 SDR在windows环境下pyrtlsdr的安装

解决windows下安装pyrtlsdr遇到的问题

2022-06-24 01:24:32 1566

原创 TensorBoard服务器6006端口报错:No dashboards are active for the current data set.

tensorboard生成日志后,在terminal运行成功(默认6006端口),但浏览器显示报错:数据源有误报错原因:服务器拥塞,需更换服务器端口更改如下:PS D:\pytoch_learning\tudui> tensorboard --logdir First_try --port=6007 #更改端口号TensorFlow installation not found - running with reduced feature set.Serving TensorB

2022-05-15 02:11:26 1354

原创 python子类定义报错:TypeError: __init__() missing 1 required positional argument: ‘prilege‘

python子类的定义,忘记了参数读入

2022-05-14 12:19:50 4440

原创 MATLAB 画图细节

Line 属性更改线条、标记的属性都可以丰富我们的图像链接:https://ww2.mathworks.cn/help/matlab/ref/matlab.graphics.chart.primitive.line-properties.html散点图效果如下:填充效果的改变:还可以添加一个颜色栏代码如下:x = linspace(0,3*pi,200);y = cos(x) + rand(1,200);sz = 25;c = linspace...

2022-02-14 17:27:42 454

原创 MATLAB 官方文档

MATLAB中国内画图的中文文档链接如下:https://ww2.mathworks.cn/help/matlab/graphics.html?s_tid=CRUX_lftnav根据自己画图需求进入选择相应的文档学习对应的函数的代码:

2022-02-14 15:23:57 6401

原创 Pytorch 中torch.nn.Linear的权重初始化

最近学习李沐老师pytorch课程,在software回归一节中模型建立首先进行初始化参数(权重……),课程代码如下:net = nn.Sequential(nn.Flatten(), nn.Linear(784, 10))#nn.Flatten将多维张量压缩为二维(一行)进而进行线性操作、def init_weights(m): if type(m) == nn.Linear: nn.init.normal_(m.weight, std=0.01)net.app

2022-01-27 13:03:39 26038 5

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除