自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 队列/队尾

2025-06-07 17:21:02 80

原创 AT24C128

2025-05-29 10:21:16 78

原创 铺铜规则的设置 (通孔焊盘/过孔)

这是因为较小的孔径(12mil)限制了焊锡的通道大小,而合适的焊盘尺寸(30mil)又能够保证过孔有足够的电气连接可靠性。12/30mil 的孔径设置意味着过孔的孔径为 12mil,过孔的焊盘尺寸为 30mil。* 例如,在一些高密度的电子电路板焊接过程中,如果底部接地焊盘的 via 孔径设置不当,焊锡从底部焊盘漏下去后,会使焊接点看起来光亮但实际并没有形成良好的电气连接,这就是虚焊。U4 底部接地焊盘上的via 孔径建议设置为 12/30mil,避免底部焊盘上的焊锡全部漏下去导致虚焊;

2025-05-24 09:49:47 207

原创 运算放大器

2025-05-12 20:41:57 76

原创 AD新建PCB工程

新建三个文件夹。

2025-05-12 10:49:40 148

原创 Modbus通信协议

2025-05-01 20:38:33 140

原创 GD32F303-IAP的过程和实验

使用的芯片为GD32F303VC什么是IAP呢?有个博主写的很清楚;就是远程升级;我们需要写一个boot 和APP通过 boot对APP的程序进行更新;操作;而不是像单个调试板子那样使用ISP 和 ICP进行烧录;升级过程:上位机和板子进行can通讯;上位机将APP的BIN文件给板子;Boot 进行 0x0801 0000处 的擦除和写入;进而完成APP的更新过程;也可以看我上篇文章 如何进行在 0x0801 0000处进行擦除和写入的;

2025-04-12 11:07:34 338

原创 GD32F303----内部Flash读写

页和扇区是存储介质(如 Flash、硬盘)中管理和操作数据的基本单位,但它们的定义和应用场景有所不同。0x0801 0000页;那么他擦的就是0x0801 0000 - 0x0801 07FF;对齐数据允许CPU通过单次内存操作完成读写,而非对齐数据可能需要多次访问并拼接,显著降低效率。是0x0801 0000 - 0x0801 07FF;”意味着该数据的起始内存地址必须是4的倍数(在STM32中,访问未对齐的32位数据可能导致异常。能看到 页Page的大小为2KB (0x800)

2025-04-12 11:01:12 1042 1

原创 ISP的过程

在ISP过程中,BootLoader的作用是提供通信接口、初始化硬件、擦除和写入Flash存储器,并最终跳转到用户程序。- BootLoader程序会根据接收到的指令,擦除芯片内部Flash存储器中旧的程序代码,然后将新的程序代码写入到指定的地址。在ISP过程中,BootLoader会将新的程序代码写入到主Flash存储器中,而BootLoader本身不会被改动。- BootLoader擦除主Flash存储器中的旧程序代码,并将新的程序代码写入到主Flash存储器。

2025-04-09 18:23:45 336

原创 STM32F103VET6 芯片的主Flash 内存空间大小计算

STM32F103VET6 芯片的主Flash 的内存空间范围是 0x0800 0000 ~ 0x0807 FFFF,共 512KB。

2025-04-09 16:33:27 385

原创 Boot loader嵌入式系统的典型启动流程

上电 → 芯片硬件初始化 → 从系统存储器(0x1FFF0000)执行内置Bootloader → 等待主机通过UART/USB发送烧录指令。某些项目会在用户Flash中实现自己的Bootloader(如IAP升级程序),但这是可选的,且需主动跳转到APP。如果你的项目没有特殊需求(如IAP),烧录后设为BOOT0=0即可,芯片会直接从Flash运行你的代码。了Bootloader(如通过软件跳转),才会进入Bootloader逻辑。是可选功能,需自行实现,与芯片内置Bootloader无关。

2025-04-02 14:02:25 463 1

原创 BOOT启动/SWD接口烧录

SWD烧录不依赖BOOT模式,是更可靠、高效的开发调试方式。优先使用SWD接口,仅在SWD被禁用或硬件不支持时,再通过BOOT0=1进入Bootloader模式补救。若SWD无法连接,重点检查硬件连接、供电和芯片是否被保护。

2025-04-02 13:55:51 1714

原创 swd接口烧录程序

**SWD(Serial Wire Debug)**是ARM Cortex-M内核芯片的调试协议(属于JTAG的简化版),直接通过调试接口(SWCLK、SWDIO)与芯片内核交互,**完全绕过芯片的启动模式(BOOT引脚配置)**。| **特性** | **SWD接口** | **串口/UART(需Bootloader)** |- **SWD烧录不依赖BOOT模式**,是更可靠、高效的开发调试方式。

2025-03-30 10:57:09 457

原创 电池的知识

example:

2025-03-29 10:10:12 122

原创 时钟时钟GD32F303

......

2025-03-18 16:43:37 207

原创 GD32F303 时钟树 AHB APB1和APB2

systic.c//如果SystemCoreClock为120MHz,那么SysTick时钟频率为120MHz,每1微秒需要120个SysTick时钟周期,1ms需要120 000(SystemCoreClock / 1000U))个SysTick时钟周期:

2025-03-01 17:23:21 392

原创 GD32F30X系列的keil5 搭建

2.在新建一个文件夹,用于存放工程。1 新建一个文件夹;

2025-02-28 19:12:21 539

原创 复用时钟 重映射(Remap)

在GD32微控制器中,**Remap(重映射)**是指通过重新配置某些引脚的功能,将它们从默认功能切换到其他备用功能。1. **解决引脚冲突**:当默认的外设引脚被其他功能占用时,可以通过Remap将外设映射到其他可用的GPIO引脚上。2. **灵活配置**:根据实际需求,将引脚配置为不同的功能,例如将JTAG引脚重新映射为普通IO。

2025-02-24 11:19:37 796

原创 SPI(菊花链和四线制)

菊花链SPI通过串联方式连接从设备,减少了片选线的数量,而四线制SPI为每个从设备提供单独的片选信号,这在多从设备应用中会增加所需的GPIO数量和布线的复杂性。菊花链SPI适合于需要简化布线和减少GPIO数量的场景,而四线制SPI则提供了更灵活的控制方式,适用于需要独立控制每个从设备的场景。在这种配置中,数据从一个从设备传播到下一个从设备,所有从设备同时接收同一SPI时钟。这意味着如果连接多个从设备,需要为每个从设备提供单独的片选线,这会增加所需的GPIO数量和布线的复杂性。

2025-02-21 14:04:59 965

原创 c语言函数(值传递和指针)

值传递传递的是变量的副本。函数内部对形参的修改不会影响原始数据。适用于不需要修改原始数据的场景。引用传递(通过指针)传递的是变量的地址。函数内部可以通过指针修改原始数据。适用于需要修改原始数据的场景。在实际编程中,选择哪种方式取决于你的需求。如果不需要修改原始数据,使用值传递更安全;如果需要修改原始数据,使用指针实现引用传递是更好的选择。

2025-02-19 16:34:22 352

原创 can结构

can结构 can波特率计算方式

2025-02-05 13:37:30 223

原创 联合体(union)

/CAN通信标识符结构u32 All;struct{//数据段//目标地址//源地址//帧类型,应答,查询//命令//优先权//对齐}Bits;该联合体通过位域将 32 位数据按功能划分,既支持整体操作,也支持按字段访问,适用于需要精确控制位的场景(如嵌入式系统或协议解析)。

2025-02-03 09:40:54 572

原创 GD32F107VC学习

独立看门狗/窗口看门狗;

2025-01-23 11:01:43 120

原创 焊孔的放置

大面积铺铜,当电流很大的时候,焊盘采用的全链接的方案;但是为了增加牢固性和虚焊风险,加入透锡焊孔,大面积铺铜,当我们采用手焊的时候,焊盘采用的十字链接,焊盘采用的全链接会出现虚焊的风险;今天画板的时候,出现一个放置过锡焊孔的方法;我在这个板子上加入了规则项;什么时候放置过锡焊孔呢;

2025-01-23 10:44:37 203

原创 Keil5安装步骤

网上下载支持包即可;

2025-01-22 14:15:50 176

原创 AD的使用小技巧汇总

1.在一个端子上,为防止多次插拔把线带飞,可以同一个网络,底层走蓝线,上层走红线;

2025-01-16 18:27:19 167

原创 Solid和hatched铜

当Grid Size >= 线宽的时候,就是网格铜了;当Grid Size

2025-01-16 18:17:12 339

原创 光耦隔离

注意 这个没有起到隔离的作用 因为在共地。

2025-01-07 21:45:28 143

原创 AHB、 APB1、APB2的联系与区别

AHB和2个APB总线间提供同步连接。APB1操作速度限于36MHz, APB2操作于全速(最高72MHz)。有关连接到每个桥的不同外设的地址映射请参考表1。在每一次复位以后,所有除SRAM和FLITF以外的外设都被关闭,在使用一个外设之前,必须设置寄存器RCC_AHBENR来打开该外设的时钟。注意: 当对APB寄存器进行8位或者16位访问时,该访问会被自动转换成32位的访问:桥会自动将8位或者32位的数据扩展以配合32位的向量。

2024-12-10 15:51:30 663

原创 动态系统的建模与分析

bode图是表示频率响应的一种图示方法;

2024-12-03 19:32:01 382

原创 自动控制原理——BliBli站_DR_CAN

极点在左半平面输入为单位冲击,而拉普拉斯变换为1;因此,开环和闭环系统,研究其传递函数的稳定性就可以了。

2024-11-28 17:15:46 308

原创 通信协议/串行/并行/异步/同步/

串行传输:一堆数据串行走;并行传输:一堆数据并行走;

2024-11-22 15:31:21 231

原创 使用嘉立创和AD进行PCB库的封装

但在这里看到,只有二维的效果,这时候需要去网上去找3D模型。接下来要把再嘉立创上当下来的原理库 和PCB封装复制在。选中两个,按回车 再AD中打开。

2024-10-12 14:30:36 599

原创 原码,反码,补码

+1] = [00000001]原 = [00000001]反 = [00000001]补。

2024-09-12 21:03:13 278

原创 STM32和TMSF28335定时器的系统时钟问题

用户可通过多个预分频器配置AHB、高速APB(APB2)和低速APB(APB1)域的频率。AHB和APB2域的最大频率是72MHz。APB1域的最大允许频率是36MHz。可以看到定时器2在APB1上,二分频,频率为72MHz,则实现72000000/7200/10000 = 1s的计时。

2024-08-29 09:23:08 481

原创 C语言-内存管

在C语言中,内存被划分为以下几个区间:栈(stack):用于存储局部变量和函数的参数。栈是由编译器自动分配和释放的,栈的大小通常是固定的。堆(heap):用于存储动态分配的内存,即使用malloc、calloc或realloc函数分配的内存。堆的大小通常是可变的。全局区(global)或静态区(static):用于存储全局变量和静态变量。这些变量在程序启动时就已经分配好内存,并且在整个程序运行期间都存在。常量区(constant):用于存储字符串常量等不可修改的数据。

2024-08-23 10:50:05 601

原创 const关键字

关键字在 C++ 中是一个非常重要的特性,它用于提供编译时类型检查,增强程序的健壮性、可读性和可维护性。:表明函数不会修改传入参数的内容,这有助于防止意外修改,同时也使得函数可以处理常量对象。可以用来修饰参数或返回值,表示这些参数或返回值在函数内部或外部都不会被修改。还可以用于指针,以区分指针本身是否为常量,以及指针指向的内容是否为常量。可以用来修饰变量,表明这个变量的值在初始化之后就不能被修改。最基本也是最常见的用法。:在函数声明和定义中,

2024-08-22 09:39:12 152

原创 强制类型转换

【代码】强制类型转换。

2024-08-21 11:34:09 154

原创 内联函数的基本知识

使用inline关键字:在函数定义前加上inline关键字,表明这是一个内联函数的建议。定义在头文件中:由于内联函数需要在每个调用点展开,因此其定义通常放在头文件中,以便在多个源文件中共享。简单性:内联函数的函数体应该较简单,避免包含复杂的控制流程(如循环、递归调用)或大量的代码,以提高内联成功的可能性和程序的执行效率。inline 返回类型 函数名(参数列表) {// 函数体// 执行的操作和逻辑return 表达式;// 可选的返回语句。

2024-08-21 10:03:55 473

原创 C语言执行过程

需要注意的是,上述阶段中的“加载”和“初始化”通常对最终用户来说是透明的,因为它们在程序开始执行之前就已经完成了。对于C语言程序来说,这通常意味着释放分配的资源(尽管在C中,显式的资源管理是程序员的责任)、关闭文件、调用析构函数(对于C++程序)等。函数调用是程序执行时的一个动态行为,它涉及到栈的使用(用于保存调用者的上下文信息,如局部变量、返回地址等),以便在被调用函数执行完毕后能够恢复调用者的执行。因此,尽管函数调用本身不是编译或链接阶段的一个明确步骤,但它是在这些阶段之后,在程序的执行阶段发生的。

2024-08-20 17:26:42 638

空空如也

空空如也

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

TA关注的人

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