<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[SPhongyi的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/SPhongyi</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; SPhongyi]]></copyright><item><title><![CDATA[C指针变量的使用]]></title><link>https://blog.youkuaiyun.com/SPhongyi/article/details/147587849</link><guid>https://blog.youkuaiyun.com/SPhongyi/article/details/147587849</guid><author>SPhongyi</author><pubDate>Mon, 28 Apr 2025 15:01:27 +0800</pubDate><description><![CDATA[此处strlen()的输入参数应为指针变量，而char *str定义好后，str即指针变量，而*str只是一个char字符"h"，即str[0]，因此使用strlen时，应输出str。]]></description><category></category></item><item><title><![CDATA[STM32 HAL_UART_RxCpltCallback函数心得]]></title><link>https://blog.youkuaiyun.com/SPhongyi/article/details/147399093</link><guid>https://blog.youkuaiyun.com/SPhongyi/article/details/147399093</guid><author>SPhongyi</author><pubDate>Mon, 21 Apr 2025 17:44:21 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[STM32HardFault调试心得]]></title><link>https://blog.youkuaiyun.com/SPhongyi/article/details/147283118</link><guid>https://blog.youkuaiyun.com/SPhongyi/article/details/147283118</guid><author>SPhongyi</author><pubDate>Wed, 16 Apr 2025 17:58:54 +0800</pubDate><description><![CDATA[使用debug模式下，单片机跑死后，点击停止运行，程序停止在HardFaultHandler下，即表明程序出现了HardFault。]]></description><category></category></item><item><title><![CDATA[STM32 ADC+DMA采样配置]]></title><link>https://blog.youkuaiyun.com/SPhongyi/article/details/147070306</link><guid>https://blog.youkuaiyun.com/SPhongyi/article/details/147070306</guid><author>SPhongyi</author><pubDate>Tue, 08 Apr 2025 18:25:22 +0800</pubDate><description><![CDATA[ADC中有regular（规则）通道和inject（注入）通道，只有规则通道转换期间有DMA请求产生。从下左图可以看出，规则通道只有一个数据寄存器，注入通道有四个数据寄存器；规则通道最多转换16个通道，注入通道最多转换4个通道。从上右图看出，规则通道在多通道转换过程中，只有到最后一个通道完成才会产生EOC信号，因此前面多个通道的数据都无法保存，但是每个通道转换结束后可以申请DMA。上图为ADC连续转换，与单次转换对照比较。上图为非扫描模式，即一个通道结束后即产生一次EOC信号。]]></description><category></category></item><item><title><![CDATA[电机的参数信息]]></title><link>https://blog.youkuaiyun.com/SPhongyi/article/details/146227000</link><guid>https://blog.youkuaiyun.com/SPhongyi/article/details/146227000</guid><author>SPhongyi</author><pubDate>Thu, 13 Mar 2025 11:58:01 +0800</pubDate><description><![CDATA[1.8度或0.9度，指步进电机的最小转动角，使用步进电机驱动器时（1细分时），输入驱动器一个脉冲转过的角度；或者两相四线走完一个步进周期时转动的角度。]]></description><category></category></item><item><title><![CDATA[STM32通用定时器主频和高级定时器一致！]]></title><link>https://blog.youkuaiyun.com/SPhongyi/article/details/146156680</link><guid>https://blog.youkuaiyun.com/SPhongyi/article/details/146156680</guid><author>SPhongyi</author><pubDate>Mon, 10 Mar 2025 16:11:56 +0800</pubDate><description><![CDATA[但当我实际做实验的时候，却发现TIM3定时器通过36M计算出的频率显然比实际运行时要小一倍，然后在使用STMCubeMX配置定时器时，发现APB1的外设时钟是36M，但是APB1的定时器时钟倍频成了72M。首先，我在查阅芯片手册时看到TIM1挂载在APB2总线（最大72MHZ），TIM2、3、4挂载在APB1总线（最大36MHZ），此时我认为TIM3就是主频为36MHZ。之后仔细阅读芯片手册后发现，上图才是真正的时钟树图，里面详细说明了各个外设使用到的时钟。]]></description><category></category></item><item><title><![CDATA[CAN协议与485ModbusRTU对比]]></title><link>https://blog.youkuaiyun.com/SPhongyi/article/details/145458207</link><guid>https://blog.youkuaiyun.com/SPhongyi/article/details/145458207</guid><author>SPhongyi</author><pubDate>Wed, 05 Feb 2025 17:49:34 +0800</pubDate><description><![CDATA[这里以03功能码——读取寄存器数据为例。主机发送命令格式：从设备地址（ID）+功能码+起始寄存器地址+寄存器个数+CRC校验命令格式从设备地址（ID）+功能码+数据长度+数据+CRC校验其中发送都由主机控制，且命令中的地址只为从设备地址，那么主机本身不需要ID。]]></description><category></category></item><item><title><![CDATA[MCU温控PID方案]]></title><link>https://blog.youkuaiyun.com/SPhongyi/article/details/144667924</link><guid>https://blog.youkuaiyun.com/SPhongyi/article/details/144667924</guid><author>SPhongyi</author><pubDate>Mon, 23 Dec 2024 15:20:54 +0800</pubDate><description><![CDATA[方案一：主流输出方案为使用MCU采用PWM输出，使用相应的MOS管驱动芯片来控制加热回路的通断，从而控制温控的加热量。方案二：如果输出一端基准为地，那么DAC芯片输出端能够具有正负值的输出范围，那么就可以。方案二：其他输出方案，是否可以采用DA转换的方式，将输出量转移为模拟信号给加热回路？方案一：使用具有两通道输出的驱动芯片，可以实现加热方向翻转。如果要反转TEC制冷，上述两种方法是否都可以实现？]]></description><category></category></item><item><title><![CDATA[STM32中断]]></title><link>https://blog.youkuaiyun.com/SPhongyi/article/details/142333061</link><guid>https://blog.youkuaiyun.com/SPhongyi/article/details/142333061</guid><author>SPhongyi</author><pubDate>Wed, 18 Sep 2024 14:46:39 +0800</pubDate><description><![CDATA[当使用定时器中断时，使用CubeMX配置完成之后，必须使用HAL_TIM_Base_Start_IT在主函数中启用，才能触发定时器的中断。当使用PWM时，CubeMX会自动在HAL_TIM_Base_MspDeInit中配置HAL_TIM_Base_Start_IT，因此不必在主函数中再配置。]]></description><category></category></item><item><title><![CDATA[STM32程序烧写后晶振不起振]]></title><link>https://blog.youkuaiyun.com/SPhongyi/article/details/142169000</link><guid>https://blog.youkuaiyun.com/SPhongyi/article/details/142169000</guid><author>SPhongyi</author><pubDate>Thu, 12 Sep 2024 10:47:26 +0800</pubDate><description><![CDATA[使用程序debug时，可以看到程序一直卡在HSE的循环当中，如下图所示。



同时，使用示波器对晶振两端进行检测，发现无信号，推断为晶振不起振。

问题分析：

1、硬件原因：晶振电路与单片机之间存在虚焊。

2、软件原因：在时钟配置上出现错误，在CubeMX中HSE有两个可以用的选项，分别为BYPASS Clock Source（有源时钟），Crystal/Ceramic Resonator（无源晶振）。





以上两个问题都是博主亲身经历过的两个错误，虽然比较简单，但是也容易忽略。
]]></description><category></category></item><item><title><![CDATA[STM32烧录一次之后无法再次识别ST-LINK]]></title><link>https://blog.youkuaiyun.com/SPhongyi/article/details/142167072</link><guid>https://blog.youkuaiyun.com/SPhongyi/article/details/142167072</guid><author>SPhongyi</author><pubDate>Thu, 12 Sep 2024 09:55:10 +0800</pubDate><description><![CDATA[采用STM32R8T6芯片，使用Keil进行了程序烧写，之后就再也无法识别到ST-LINK进行烧写（无论用CubeIDE、Keil、stlink-utility）。最后使用stlink-utility，用按reset键的方法不断去尝试，最终成功连接上了，接着erase了程序所有内容，之后便可以正常识别ST-LINK。问题推测：怀疑是烧写后的某些引脚冲突，使得烧写引脚无法正常工作。]]></description><category></category></item><item><title><![CDATA[显卡与显存的原理]]></title><link>https://blog.youkuaiyun.com/SPhongyi/article/details/140824453</link><guid>https://blog.youkuaiyun.com/SPhongyi/article/details/140824453</guid><author>SPhongyi</author><pubDate>Wed, 31 Jul 2024 15:34:43 +0800</pubDate><description><![CDATA[简单理解，CPU通过内存上运行的游戏或者3D建模软件，将3D模型信息上传到显存当中，从而使用显卡进行计算，再将计算好的数据传输到显示器当中，从而显示出画质精细的图片。]]></description><category></category></item><item><title><![CDATA[cubeIDE Bulid Analyzer不显示的问题]]></title><link>https://blog.youkuaiyun.com/SPhongyi/article/details/139254451</link><guid>https://blog.youkuaiyun.com/SPhongyi/article/details/139254451</guid><author>SPhongyi</author><pubDate>Tue, 28 May 2024 09:51:02 +0800</pubDate><description><![CDATA[当切换至不优化（None（-O0））时，上述的Bulid Analyzer窗口便会显示出flash与RAM的使用情况。此时，就可以通过编译，在以下Bulid Analyzer窗口进行flash与内存使用情况的查看。为了查看flash或者RAM的使用情况，一般情况下可以使用cubeIDE来进行查看。但是，我在使用过程中发现无论怎么编译都无法显示出flash与内存的使用情况，]]></description><category></category></item><item><title><![CDATA[STM32固件学习记录]]></title><link>https://blog.youkuaiyun.com/SPhongyi/article/details/137669664</link><guid>https://blog.youkuaiyun.com/SPhongyi/article/details/137669664</guid><author>SPhongyi</author><pubDate>Fri, 12 Apr 2024 09:58:51 +0800</pubDate><description><![CDATA[一个重要区别：结构体（struct）的成员各自拥有自己的内存地址；而联合体（union）只有一个内存地址，用于分配给所有成员共同使用。优缺点：struct比union更占用内存。疑问：应用场景未知。struct的优点未知。]]></description><category></category></item></channel></rss>