- 博客(26)
- 资源 (1)
- 收藏
- 关注
原创 STM32通用定时器TRC含义解析
(硬件自动完成)的情况下,在精确的换相点复位PWM计数器并加载新的预装载值(ARR, CCRx)和配置(CCER, BDTR等),实现平滑、高效的换相。如果配置一个捕获通道(如CC1)的。位选择的(之前讨论的ITR0, ITR1, ITR2, ITR3, TI1F_ED, TI1FP1, TI2FP2, ETRF)。当外部信号已经连接到某个输入通道(如TI1),但你想用另一个捕获通道(如CC2)来测量它时,可以通过。霍尔传感器(通常3个)输出信号(H1, H2, H3)指示转子位置,决定何时切换到下一相。
2025-06-12 19:57:41
554
原创 【注释害死人啊,下次小心代码改了,但是注释还没有改,会被坑啊】说出来自己都不相信,自己也会低级错误bug接近20个小时才会调试出来。
没啥,改了引脚定义后,认真核对结果还是在一个普通的被调函数里忘记修改代参数的宏定义里的参数了。想了一下,应该是忘记改注释了,结果按照原来的注释检查了快20个小时,当让很难改对了。注释害死人啊,下次小心代码改了,但是注释还没有改,会被坑啊。
2025-06-12 11:59:23
85
原创 关于多中断的优先级分配原则以及前(中断函数)后(主函数)台的一些看法和学习
而中断频率越低,相应的中断处理函数执行时间就能容忍的稍微越长一点。所以中断发生的频率较低且相应中断处理函数执行时间较长的中断优先级应该要更低,反之则更高以保证本就高频发生的中断(高优先级)执行能被及时的处理而不会被更加频繁的打断执行。前台操作:即把关键的必不可少的耗时最少的操作放在中断处理函数(或其子函数中断回调函数)内,同时设置好一个全局变量的状态标志变量Flag。为了保证高频发生的中断(高优先级)处理函数的实现和低频发生的中断(低优先级)处理函数的实现,往往可以采取前后台模式。
2025-06-10 12:16:38
108
原创 【EXTI】处理来自片外的外部中断/事件的片内硬件模块——在EXTI中断函数内执行手动清零PR挂起位的位置选择(该是首行还是尾行)
按键也是一个例子,虽然它也是来自片外的突发事件,但并不推荐用外部中断来读取按键,因为这样不好处理按键抖动和松手检测的问题。STM32F103系列单片机最多有60个片上中断,包括了所有片上硬件模块中断源,其中专门为处理片外硬件的中断请求而设置了一个片内硬件模块,其被称为“外部中断/事件控制器”EXTI。STM32F103系列单片机中只集成了一个EXTI模块,这个模块能够管理19个外部中断请求,即EXTI0~EXTI18,其中EXTI0 ~ EXTI15可由用户自行连接来自片外的外部中断请求。
2025-06-09 05:25:18
323
原创 论HAL_XXX_XxxCallback与HAL_XXX_MspInit的异同
最重要的相同点都是从HAL的片内外设驱动(如xx_hal_xxx.c)这一层的函数(如UART_Receive_IT、HAL_UART_Init等)发起调用。
2025-06-07 08:59:51
95
原创 STM32CubeMX应用结构选择指南
特性Basic 结构Advanced 结构结构复杂度非常简单、扁平较复杂、层次分明、模块化用户代码位置Core/SrcCore/Inc(受保护)CubeMX 生成代码位置Core/SrcCore/IncCore/SrcCore/Inc代码被覆盖风险高(用户代码在生成目录)低(用户代码在独立受保护目录)可维护性/扩展性低 (项目增大后混乱)高(清晰分离,模块化)适合场景学习、验证、极小型项目所有项目(尤其推荐)团队协作不适合适合最佳实践不符合符合强烈推荐选择Advanced。
2025-06-06 22:24:06
549
原创 STM32中断变量跨文件共享方法
《STM32开发中跨文件共享变量的两种方法》摘要: 在STM32开发中,实现stm32f1xx_it.c与main.c共享变量有两种方案:1) 直接共享全局变量:需在源文件中定义volatile变量,在头文件中用extern声明,使用时需注意中断安全(非原子操作要关中断)和命名规范;2) 推荐使用封装函数:通过getter函数访问static变量,内置中断保护,更安全可靠。两种方法各有适用场景,简单项目可用直接共享,中大型项目建议采用封装函数方案,特别是涉及中断修改的共享数据,后者能有效提升代码安全性和可维
2025-06-05 14:36:18
277
原创 STM32的发送中断空标志和发送中断完成标志(USART_SR_TXE和USART_SR_TC)的发生中断置位中断条件有何不同
特性USART_SR_TXE (发送数据寄存器空)USART_SR_TC (发送完成)触发时机TDR内容转移到TSR后,TDR变空时立即置位TSR发送完最后一帧(含停止位)且TDR也空时置位中断含义"可以安全写入下一个数据了""数据已完全离开芯片引脚,发送彻底完成"清除方式自动清除 (写入DR)软件序列清除 (读SR + 写DR / 位写0)关键用途流控发送、填充发送缓冲区 (连续发送)检测发送真正结束、单次发送确认、DMA完成确认时序关系发生在每个字节开始发送时。
2025-06-04 17:27:47
630
原创 在xxx_hal_conf.h中define USE_HAL_XXX_REGISTER_CALLBACKS从0U改1U可从弱定义式的回调函数变为函数指针式的回调函数,但不是直接把函数指针作为函数的参数
实际上,相较于教科书上的回调函数的定义:回调函数的调用是通过指向该回调函数的指针变量(既函数的指针)被用作某个函数的参数来调用的。HIL库的回调函数的调用,被一个二级指针(HIL库中通过条件编译重定义htim、huart等)作为某个函数的参数来调用的。
2025-06-03 11:36:14
175
原创 回车与换行的区别及使用方法
处理可能会显示为没有换行(所有内容挤在一行)。)是两个不同的控制字符,它们源于机械打字机时代,在计算机中用于控制文本的显示位置。在命令行界面中创建进度条、状态更新(覆盖同一行内容),或在某些协议(如某些串口通信)中表示一条记录的结束。在现代环境中通常被解释为“新行并回行首”(尽管标准定义只保证换行)。的区别以及它们在不同系统中的使用方式,对于正确处理文本、编写跨平台代码和进行系统间通信至关重要。,使打印头移动到下一行的起始位置(但打印头本身不一定水平移动)。它不改变光标的水平位置(列号),只改变垂直位置。
2025-06-02 21:35:50
483
原创 【define USE_HAL_TIM_REGISTER_CALLBACKS 0U】在xxx_hal_conf.h中的这个宏定义如何理解
define USE_HAL_TIM_REGISTER_CALLBACKS 0U 表示你选择使用 STM32 HAL 库处理定时器 (TIM) 事件的传统方式:通过在用户代码中直接覆盖实现特定的弱定义回调函数(如 HAL_TIM_PeriodElapsedCallback)来响应定时器事件。这是最常见和默认的配置方式。注册机制:HAL 库提供了一组专门的API函数(如 HAL_TIM_RegisterCallback()),允许用户在运行时动态地将自己的回调函数注册到特定的 TIM 句柄和特定的事件上。
2025-06-02 09:27:26
476
原创 STM32CubMx中NVIC的设置界面易迷惑的点
STM32CubMx中NVIC的设置界面下,Configuration下的Code generation中有时会出现下图。这个是指定片内外设的中断请求在NVIC中使能中断号IRQn的初始化的顺序,在CLion中代码如下。啊,Code generation没有可选的啊?这是你鼠标下上拉一下交界的地方就会出现了。可以看到NVIC中相应的中断初始化代码按照CubMx的设置界面的顺序生成的,第二个疑惑就是下面的。
2025-06-01 18:13:28
203
原创 OpenOCD对CMSIS-DAP的V1版本兼容不好的解决办法
source [find interface/cmsis-dap.cfg]改成source [find interface/cmsis-dap-v1.cfg]Clion等AI辅助的IDE软件编程程序时候,对CMSIS-DAP的V1兼容不好,导致下载失败或者调试异常的解决办法。你可以自己做一份.cfg也可以用上面的改一下。reset_config 需要从srst_only改为trst_only。如果改好了,可以下载成功,但是进入调试后会自动运行,挺怪的。省流:一句话就是在.cfg文件中这样配置。
2025-05-31 10:25:28
155
原创 【Proteus当前指向的语句,但完成的是上一条的上一条语句】Proteus仿真STM32,遇到的bug及应对方法。
一句话:Proteus使用axf、HEX二进制文件仿真,所执行一条语句要比正常还要推迟一条语句。但是Proteus 8.17 sp2的特殊机制(也可能或许是bug),导致指向当前语句,完成的是上一条的上一条语句。是在函数最末尾执行的,keil正常,但是在Proteus中valueODR的值异常,导致GPIOB的高8位管脚输出错误。因为在Proteus中函数结束, GLedSeg[11]数组被销毁了。
2025-05-28 10:24:33
353
原创 PROTEUS中单片机的属性中Program File的HEX二进制文件定位老是错,总要手动设置
大家有没有碰到过PROTEUS中单片机的属性中Program File的HEX二进制文件定位老是不正确。大家注意一下,需要在源代码Source Code里设置一下,Project—工程设置—嵌入式文件,把这个默认的选项取消掉。取消后,在原理图绘制里的单片机中的Program File 的HEX二进制文件的定位就正常了。
2025-05-24 20:41:56
263
原创 STM32中的GPIO输入引脚设置速度?
但在使用HAL库和标准库编程时常常能看到,明明引脚配置为输入模式,但还是有相关的引脚输出速度配置,此处仅仅是为了编译器语法的正确性,即使设置了实际电路中也不会生效。STM32中的GPIO输出引脚设置速度。
2025-05-22 13:09:35
118
原创 TTL电平或COMS电平的底层逻辑、3.3V单片机IO口输出/输入特性(输出兼容5V,输入不兼容5V)与PCB阻抗匹配
(常用在数字电路,如PCB的源端串联33Ω电阻)比如SPI的靠近始端就会有个22R或33R的电阻。(缺点:耗电,适合低频)ADC模数转换有时会在数字端口对地并联电阻。串联终端匹配:在信号源端串联一个电阻(值=Z₀),抑制反射。并联终端匹配:在负载端并联一个电阻(值=Z₀),吸收反射。因为TTL电路的特性(输出过冲)和阻抗分布不均匀导致的。
2025-05-21 06:09:43
154
原创 Keil软件仿真STM32F103发生*** error 65: access violation at 0x40021000 : no ‘read‘ permission”或‘write’错误
µVision调试器为所有ARM7、ARM9、Cortex-M0/M0+、Cortex-M3和Cortex-M4处理器内核提供完整的指令集模拟。但是,对于许多设备来说,无法模拟片上外设的行为。解决方案 如果错误出在应该访问的内存区域,更新模拟器使用的内存映射。对于一些较旧的设备,旧设备模拟仍然可用,也可以与Keil MDK 5项目一起使用。)进行跟踪时,目标调试的功能与设备仿真的功能相匹配。以下表格中的值为某些设备提供了设备仿真。,以获取有关这些设备中每个设备的仿真外设的信息。这应该可以解决该错误。
2025-05-11 22:25:37
822
原创 【AI辅助嵌入式开发教学准备】STM32CubMX+Vscode+EIDE+Proteus
主要困难是适配jlink、stlink和daplink。
2025-04-21 07:08:17
115
原创 deepseek很强,表述stm32的外设的一些复杂的工作机制能力很不错
| | | | +-- TIMx_CR1 (CEN位使能计数器)| | | | +-- TIMx_SMCR (TS位选择触发源, SMS=111)| | | +-- TIMx_CCER (CCxP选择边沿极性)| +-- GPIO配置 (复用功能模式)stm32通用定时器的外部时钟源1的结构。
2025-04-11 16:50:45
291
原创 你真的懂示波器嘛?工作面试中会用到的示波器知识
示波器是电子工程师经常使用到的电子测量仪器,用途十分广泛,可将肉眼看不见的电信号变换成看得见的图像,便于人们研究各种电现象的变化过程。利用示波器能观察各种不同信号幅度随时间变化的波形曲线,还可以用它测试各种不同的电量,如电压、电流、频率、相位差、调幅度等等。可是你真的懂示波器嘛?下面给大家分享一些我们工作面试中会用到的示波器知识。对这些问题有兴趣的也可以亲自做做实验看看具体结果。1.示波器应用市场...
2018-06-27 10:32:31
1805
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人