- 博客(89)
- 收藏
- 关注
原创 F280025的时钟设置
本文介绍了F280025C芯片的时钟配置和定时器中断设置方法。主要内容包括:1)通过SysCtl_setClock()和SysCtl_setLowSpeedClock()配置主时钟和低速外设时钟;2)如何查看实际时钟频率,包括检查device.h定义、运行时获取和CCS工具查看;3)定时器中断配置,重点分析了ConfigCpuTimer()函数参数与系统时钟(SYSCLK)的关系,强调定时器频率参数必须与DEVICE_SYSCLK_FREQ严格匹配;4)提供了定时器周期计算公式和验证方法。文中还解答了常见问
2025-10-26 22:56:17
922
原创 TMSF280039C新建工程
本文介绍了基于TMS320F280039/049系列芯片新建CCS工程的详细步骤。首先在workspace下创建工程模板,选择EABI格式;然后建立文件目录结构,包括common、driverlib、headers等SDK文件夹,以及自定义的Application和Drivers目录;接着配置包含路径和编译选项,根据调试/发布模式选择不同的链接文件(flash/ram);最后强调两种模式下都必须正确设置头文件路径。文章重点说明了代码移植时需注意索引路径的绝对地址问题,以及如何通过条件编译实现不同运行环境的配
2025-10-25 10:56:06
334
原创 按键处理函数 短按/长按/长按重复等
本文介绍了按键检测代码的重构方案,主要改进包括:1)将Key_Tick函数从定时器中断中提取,改为基于时间差的方式执行;2)使用Timer_GetMsDif实现20ms周期检测;3)优化变量类型和常量定义;4)重命名函数提高可读性。重构后的代码降低了中断负载,提供更精确的时间控制,具有更好的可移植性和更清晰的代码结构。使用时需在主循环中定期调用Key_Scan(),并通过Key_GetNum()获取按键事件,系统执行频率应高于20ms以保证检测实时性。
2025-10-17 15:21:00
342
原创 GD32F107 CAN回环测试
本文介绍了一个基于GD32F10x的CAN回环测试实现方案。测试代码通过初始化CAN控制器为回环模式(CAN_LOOPBACK_MODE),实现了自发自收功能:1) 使用500Kbps波特率发送预设的测试数据(ID=0x123,8字节);2) 立即接收并验证数据一致性;3) 通过SEGGER RTT输出测试结果。硬件方面,回环模式无需外部连接,信号在控制器内部闭环。文章详细说明了代码结构、测试流程和验证方法,包括波特率配置、数据收发函数实现,以及成功/失败的判断条件,为CAN驱动开发提供了完整的自测试方案。
2025-10-17 13:54:52
629
原创 CAN波特率/CAN总线采样点/CAN位时间(Bit Time)
采样点(Sample Point)是指在一个CAN位时间内,控制器实际读取总线电平状态的时间点。正确的采样点设置对可靠通信至关重要。
2025-10-16 09:07:38
1267
原创 Modbus RTU 数据结构(发送和返回/读/写)
本文介绍了Modbus RTU协议的两种典型操作:读保持寄存器(功能码0x03)和写单个寄存器(功能码0x06)。详细说明了请求帧和响应帧的格式,包括设备地址、功能码、寄存器地址、数据值、CRC校验等字段的字节数和示例值。重点解析了CRC校验计算规则、寄存器地址映射关系、错误响应机制以及大端序的字节顺序特性。通过完整16进制帧示例展示了实际应用场景,并提示了超时处理、并发控制和地址范围等注意事项。该摘要概括了Modbus RTU通信的核心数据结构与实现要点。
2025-10-13 15:34:43
592
原创 什么是输入寄存器 什么是输出寄存器 什么是写输入寄存器 什么是读保持寄存器
在 Modbus 协议中,寄存器(Registers)是用于存储设备数据的存储单元,主要分为 和 。此外,还有 和 ,但这里我们主要讨论 相关的概念。
2025-10-10 19:03:56
857
1
原创 ModBus-TCP学习
摘要: ModbusTCP报文头部固定为6字节,包含TransactionID(2字节)、ProtocolID(2字节)和Length(2字节)。Length字段仅统计应用数据单元(从UnitID开始),不包含头部。对于读寄存器响应,Length=寄存器数量×2+3(3来自UnitID、FunctionCode和ByteCount的固定字节)。协议规定多字节数据按大端序传输,不同功能码的Length计算方式可能不同(如写寄存器为固定6字节)。调试时可借助工具(如ModbusPoll)验证报文格式。
2025-10-10 18:51:29
857
原创 深拷贝(Deep Copy)和浅拷贝(Shallow Copy)
C语言中深拷贝与浅拷贝的区别在于内存处理方式:浅拷贝仅复制指针地址,导致原对象和拷贝对象共享内存,存在数据相互影响和内存管理风险;深拷贝则同时复制指针指向的数据,实现内存独立,更安全但性能较低。深拷贝适用于包含动态内存的结构体,需手动实现复制逻辑,而浅拷贝适合简单结构体或需要共享数据的场景。开发者需根据实际需求选择拷贝方式,确保程序安全性和正确性。
2025-09-30 17:06:08
730
原创 一阶系统/二阶系统
一阶系统是指其输入输出关系可以用一阶线性常微分方程来描述的动态系统。其传递函数的标准形式为:其中:K:系统的增益。代表系统稳态输出与输入的比值。τ(tau):系统的时间常数。这是一阶系统最重要的参数,直接决定了系统的响应速度。s:拉普拉斯算子。特性描述数学模型微分方程:τdtdc(t)+c(t)=Kr(t)传递函数:G(s)=τs+1K核心参数时间常数 τ (决定响应速度)增益 K (决定稳态输出)阶跃响应。
2025-09-30 14:15:37
1576
原创 CT(电流互感器)输出绝对不能悬空
电流互感器(CT)二次侧绝对不能开路,否则会感应出数千伏高压,造成人身伤害和设备损坏。CT工作原理基于磁通平衡,正常工作时二次侧必须闭合形成消磁回路。开路时磁通无法抵消,导致铁芯饱和并产生危险高压。正确操作方法包括:连接采样电阻(1-100Ω)、设置自动短路保护、使用专用接口电路。实际测量中需确保先闭合二次回路再接通一次电流,停用时必须短路接地。这些安全措施源于电磁感应定律,是保障电力系统安全运行的基本要求。
2025-09-28 13:10:17
963
原创 工业测量数据特性分析:为什么您的数据不服从正态分布
特性原因应对方法不连续ADC分辨率有限,只有离散输出接受离散性,关注主要取值区间不服从正态分布量化产生"台阶式"分布使用离散分布分析,而非连续分布只有几个特定值系统有限的数值选择分析众数、出现频率等统计量呈现离散分布数字系统的本质特性采用适合离散数据的分析方法。
2025-09-28 09:46:41
289
原创 奈奎斯特采样定理
定义: 采样频率 Fs恰好等于信号的基波频率 F0。即 Fs=F0。对于50Hz电网这意味着每秒采样50次,也就是每20毫秒(一个周期)采集一个数据点。
2025-09-28 09:02:26
927
1
原创 定时器回调函数是什么
特性描述本质由用户编写的、在定时器超时后被系统自动调用的函数。原型关键参数xTimer,用于区分是哪个定时器触发了回调。执行环境定时器守护任务中,属于任务上下文,非中断。行为限制不能长时间阻塞或死循环,以免影响其他定时器。API 调用可以安全使用绝大多数 FreeRTOS 任务 API。模式根据定时器模式(单次/自动重载),决定是一次性还是周期性执行。简单来说,。
2025-09-17 17:33:52
738
原创 在freeRTOS中 软件定时器里面,守护任务是什么
软件定时器守护任务是 FreeRTOS 为管理软件定时器而设计的后台管家。它通过一个命令队列接收来自各处的定时器操作指令,并在任务上下文中统一、安全地处理这些指令和执行超时回调函数。这种设计确保了系统内核的稳定性和简洁性,同时为应用程序提供了安全灵活的定时功能。
2025-09-17 17:24:31
914
原创 单片机的代码到底存在哪里呢?单片机的启动流程大体上是什么样子的呢?
FLASH ROM:存储程序代码和常量(你的程序主要在这里RAM:存储运行时变量和数据(临时工作空间)EEPROM:存储需要保存的配置数据(可选)存储在单片机的FLASH ROM存储器中。这个存储器专门设计为可以长期保存程序代码,即使断电也不会丢失。
2025-09-11 15:53:37
700
原创 FreeRTOS(知识点总结)
FreeRTOS空闲任务在无高优先级任务运行时激活,负责内存回收和低功耗处理。其执行受任务阻塞和中断影响,需合理配置钩子函数避免系统阻塞。开发时应确保任务周期性释放CPU资源,并利用空闲任务计数器监控系统负载。关键配置包括抢占式调度、钩子函数和低功耗模式,需权衡功耗与响应速度。
2025-08-16 10:35:22
387
原创 FreeRTOS(总结)
任务1 Block期间,轮到Idle任务执行:它释放任务2的内存(TCB、栈),时间到后,任务1变为最高优先级的任务继续执行,如此循环。任务2被删除后,任务1的优先级和LED优先级一致,交替执行;main函数中创建任务1,优先级为1。LED的,优先级为1,任务1:任务1的大循环里,创建任务2,然后休眠一段时间。任务1运行时,它创建任务2,任务2的优先级是2。任务2:打印一句话,然后就删除自己。任务2打印一句话后,就删除了自己。任务2的优先级最高,它马上执行。所使用的是江科大的串口;
2025-08-15 18:29:20
491
原创 铺铜规则的设置 (通孔焊盘/过孔)
这是因为较小的孔径(12mil)限制了焊锡的通道大小,而合适的焊盘尺寸(30mil)又能够保证过孔有足够的电气连接可靠性。12/30mil 的孔径设置意味着过孔的孔径为 12mil,过孔的焊盘尺寸为 30mil。* 例如,在一些高密度的电子电路板焊接过程中,如果底部接地焊盘的 via 孔径设置不当,焊锡从底部焊盘漏下去后,会使焊接点看起来光亮但实际并没有形成良好的电气连接,这就是虚焊。U4 底部接地焊盘上的via 孔径建议设置为 12/30mil,避免底部焊盘上的焊锡全部漏下去导致虚焊;
2025-05-24 09:49:47
463
原创 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
522
原创 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
1770
1
原创 ISP的过程
在ISP过程中,BootLoader的作用是提供通信接口、初始化硬件、擦除和写入Flash存储器,并最终跳转到用户程序。- BootLoader程序会根据接收到的指令,擦除芯片内部Flash存储器中旧的程序代码,然后将新的程序代码写入到指定的地址。在ISP过程中,BootLoader会将新的程序代码写入到主Flash存储器中,而BootLoader本身不会被改动。- BootLoader擦除主Flash存储器中的旧程序代码,并将新的程序代码写入到主Flash存储器。
2025-04-09 18:23:45
385
原创 STM32F103VET6 芯片的主Flash 内存空间大小计算
STM32F103VET6 芯片的主Flash 的内存空间范围是 0x0800 0000 ~ 0x0807 FFFF,共 512KB。
2025-04-09 16:33:27
618
原创 Boot loader嵌入式系统的典型启动流程
上电 → 芯片硬件初始化 → 从系统存储器(0x1FFF0000)执行内置Bootloader → 等待主机通过UART/USB发送烧录指令。某些项目会在用户Flash中实现自己的Bootloader(如IAP升级程序),但这是可选的,且需主动跳转到APP。如果你的项目没有特殊需求(如IAP),烧录后设为BOOT0=0即可,芯片会直接从Flash运行你的代码。了Bootloader(如通过软件跳转),才会进入Bootloader逻辑。是可选功能,需自行实现,与芯片内置Bootloader无关。
2025-04-02 14:02:25
712
1
原创 BOOT启动/SWD接口烧录
SWD烧录不依赖BOOT模式,是更可靠、高效的开发调试方式。优先使用SWD接口,仅在SWD被禁用或硬件不支持时,再通过BOOT0=1进入Bootloader模式补救。若SWD无法连接,重点检查硬件连接、供电和芯片是否被保护。
2025-04-02 13:55:51
3070
原创 swd接口烧录程序
**SWD(Serial Wire Debug)**是ARM Cortex-M内核芯片的调试协议(属于JTAG的简化版),直接通过调试接口(SWCLK、SWDIO)与芯片内核交互,**完全绕过芯片的启动模式(BOOT引脚配置)**。| **特性** | **SWD接口** | **串口/UART(需Bootloader)** |- **SWD烧录不依赖BOOT模式**,是更可靠、高效的开发调试方式。
2025-03-30 10:57:09
933
原创 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
643
原创 复用时钟 重映射(Remap)
在GD32微控制器中,**Remap(重映射)**是指通过重新配置某些引脚的功能,将它们从默认功能切换到其他备用功能。1. **解决引脚冲突**:当默认的外设引脚被其他功能占用时,可以通过Remap将外设映射到其他可用的GPIO引脚上。2. **灵活配置**:根据实际需求,将引脚配置为不同的功能,例如将JTAG引脚重新映射为普通IO。
2025-02-24 11:19:37
1279
原创 SPI(菊花链和四线制)
菊花链SPI通过串联方式连接从设备,减少了片选线的数量,而四线制SPI为每个从设备提供单独的片选信号,这在多从设备应用中会增加所需的GPIO数量和布线的复杂性。菊花链SPI适合于需要简化布线和减少GPIO数量的场景,而四线制SPI则提供了更灵活的控制方式,适用于需要独立控制每个从设备的场景。在这种配置中,数据从一个从设备传播到下一个从设备,所有从设备同时接收同一SPI时钟。这意味着如果连接多个从设备,需要为每个从设备提供单独的片选线,这会增加所需的GPIO数量和布线的复杂性。
2025-02-21 14:04:59
1714
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅