<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Caesar2334的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Caesar2334</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Caesar2334]]></copyright><item><title><![CDATA[what if]]></title><link>https://blog.youkuaiyun.com/Caesar2334/article/details/136082905</link><guid>https://blog.youkuaiyun.com/Caesar2334/article/details/136082905</guid><author>Caesar2334</author><pubDate>Thu, 08 Feb 2024 21:57:59 +0800</pubDate><description><![CDATA[what if 其实就是等于 what would happan if  .....？就是 倘若....又如何？what if一般用于疑问句。如果中国龙不是龙，那又如何？]]></description><category></category></item><item><title><![CDATA[用宏来DEBUG的原理]]></title><link>https://blog.youkuaiyun.com/Caesar2334/article/details/135949097</link><guid>https://blog.youkuaiyun.com/Caesar2334/article/details/135949097</guid><author>Caesar2334</author><pubDate>Wed, 31 Jan 2024 11:23:26 +0800</pubDate><description><![CDATA[我们可以将这些函数封装成一个宏，同时再定义一个宏作为开启这些宏的开关，比如说DEBUG，只要当我们define了这个DEBUG宏的时候，就可以使用ifdef来条件编译一下之前封装的宏。只要定义了DEBUG这个宏，那么就会进行条件编译之前的函数，如果没有定义的话，那么就不会编译了。现在我们有一个需求，那就是当我们在某一个场景的时候，我们需要执行这个函数，而在另外一个场景的时候，我们则不需要执行这个函数。而宏定义充分的满足了这个条件。首先值得注意的是，我们平时写函数的时候，函数都是直接执行的。]]></description><category></category></item><item><title><![CDATA[ADC多通道使用DMA传输的理由]]></title><link>https://blog.youkuaiyun.com/Caesar2334/article/details/135842804</link><guid>https://blog.youkuaiyun.com/Caesar2334/article/details/135842804</guid><author>Caesar2334</author><pubDate>Thu, 25 Jan 2024 15:13:24 +0800</pubDate><description><![CDATA[ADC的多通道的数据只有一个存储的地方，那就是选择了对应的通道的寄存器，比如我们选择了规则通道，那么之后，我们的数据在抓换之后就会放下规则通道的寄存器中。而规则通道的寄存器的位置是有限的，只有16位数。也就是说，当你只使用一个通道进行数据传输的时候，是不用担心数据别覆盖的问题，因为都是测量的同一个通道的数据，只是你改变了外边模拟信号的状态之后，打印出来数字的响应快慢而已。]]></description><category></category></item><item><title><![CDATA[程序员裁员潮：技术变革下的职业危机]]></title><link>https://blog.youkuaiyun.com/Caesar2334/article/details/135787453</link><guid>https://blog.youkuaiyun.com/Caesar2334/article/details/135787453</guid><author>Caesar2334</author><pubDate>Wed, 24 Jan 2024 21:23:10 +0800</pubDate><description><![CDATA[一对来自中国的工程师夫妻在美身亡，疑因谷歌裁员致悲剧发生。在技术变革下，裁员对于程序员的影响到底有多大？今天我来谈谈自己的看法。]]></description><category></category></item><item><title><![CDATA[基本定时器一启动就直接进中断的两种解决方式]]></title><link>https://blog.youkuaiyun.com/Caesar2334/article/details/135678651</link><guid>https://blog.youkuaiyun.com/Caesar2334/article/details/135678651</guid><author>Caesar2334</author><pubDate>Thu, 18 Jan 2024 16:57:54 +0800</pubDate><description><![CDATA[【代码】基本定时器一启动就直接进中断的两种解决方式。]]></description><category></category></item><item><title><![CDATA[中断标志位和中断服务函数的关系]]></title><link>https://blog.youkuaiyun.com/Caesar2334/article/details/135658230</link><guid>https://blog.youkuaiyun.com/Caesar2334/article/details/135658230</guid><author>Caesar2334</author><pubDate>Wed, 17 Jan 2024 19:16:58 +0800</pubDate><description><![CDATA[你不得不认为：中断服务函数正是因为硬件自动产生的中断标志位才执行的。换句话说，中断标志位并不是执行中断服务函数同时产生的，而是有一个先后的顺序，是先产生中断标志位，然后中断服务函数再根据中断标志位才进入中断服务函数来执行的。]]></description><category></category></item><item><title><![CDATA[字符串和整型转换的那些事儿]]></title><link>https://blog.youkuaiyun.com/Caesar2334/article/details/135633262</link><guid>https://blog.youkuaiyun.com/Caesar2334/article/details/135633262</guid><author>Caesar2334</author><pubDate>Tue, 16 Jan 2024 20:00:22 +0800</pubDate><description><![CDATA[总的来说，有两种思路。]]></description><category></category></item><item><title><![CDATA[关于markdown文件插入图片变成相对路径]]></title><link>https://blog.youkuaiyun.com/Caesar2334/article/details/135529559</link><guid>https://blog.youkuaiyun.com/Caesar2334/article/details/135529559</guid><author>Caesar2334</author><pubDate>Thu, 11 Jan 2024 14:59:17 +0800</pubDate><description><![CDATA[[](绝对路径)变成下面这种相对路径也就是说每次插入的时候，都得修改一下。]]></description><category></category></item><item><title><![CDATA[怎么使用EIDE进行调试STM32单片机？]]></title><link>https://blog.youkuaiyun.com/Caesar2334/article/details/135524126</link><guid>https://blog.youkuaiyun.com/Caesar2334/article/details/135524126</guid><author>Caesar2334</author><pubDate>Thu, 11 Jan 2024 14:04:41 +0800</pubDate><description><![CDATA[在上述这幅图中，可以看到我使用的是STLINK烧录，其中的gdb server使用的是openocd，其中需要关注的事configFiles中的两个cfg文件，在刚刚生成这个文件的识货，第二个会显示target/.cfg，出现这种情况的话，你就需要去类似这样的路径中。（2）下载好了之后，就需要在插件中扩展中，加上上述文件的地址。复制的时候不要复制错了，其后缀是有一个cfg在的，不要复制名字的也将文件的cfg复制下来了，这样的话就多复制了一个cfg，别像我一样踩坑了.....]]></description><category></category></item><item><title><![CDATA[关于按位与和按位或]]></title><link>https://blog.youkuaiyun.com/Caesar2334/article/details/135511724</link><guid>https://blog.youkuaiyun.com/Caesar2334/article/details/135511724</guid><author>Caesar2334</author><pubDate>Wed, 10 Jan 2024 19:58:56 +0800</pubDate><description><![CDATA[还有最后一种情况，如果想让你同时让几个连续的位数，赋值成101101，而其余的位数不变，那么再或上一段数字的话，直接或上去就好了，全零使用或的话，不管或的是谁都是全复制。你可以对相同数据的相邻位数按照我们之前的方式进行|1，其余的|0，和& 其余的&1，同理，想让其中的一位变成0的话，其  `余的不变的话，那就&0 和 &1。而其余的位数不变的话，也是同理，让这几位都|1， 其余的都|0就可以了。谁&0的话，那么都为0，用于复制单个0。其中的一位变成1，其余的不变的话，那么就是一个主导，一个不主导，且。]]></description><category></category></item><item><title><![CDATA[如何脱离keil在vscode上实现STM32单片机编程]]></title><link>https://blog.youkuaiyun.com/Caesar2334/article/details/135488334</link><guid>https://blog.youkuaiyun.com/Caesar2334/article/details/135488334</guid><author>Caesar2334</author><pubDate>Tue, 09 Jan 2024 20:02:27 +0800</pubDate><description><![CDATA[（3）编译的过程中可能会出现找不到头文件，那么就需要在包含目录中，将所有可能有头文件的文件路径都写进去，就不会出现头文件报错了。（2）需要将其中的编译器和烧录的文件下载好，并配置好路径，以及支持的芯片包，选择完芯片包之后记得在后面。（1）首先在EDIE上新建一个新项目，而不是从keil里面建立项目。结合一下这两个大佬的博客就是可以实现STM32的编程了。]]></description><category></category></item><item><title><![CDATA[调用函数错误]]></title><link>https://blog.youkuaiyun.com/Caesar2334/article/details/135409447</link><guid>https://blog.youkuaiyun.com/Caesar2334/article/details/135409447</guid><author>Caesar2334</author><pubDate>Fri, 05 Jan 2024 14:43:59 +0800</pubDate><description><![CDATA[当一个函数返回值的时候，需要调用这个函数的返回值的时候，一定要记得给函数写括号！写上括号才是调用啊！]]></description><category></category></item><item><title><![CDATA[51小车的电机驱动思路]]></title><link>https://blog.youkuaiyun.com/Caesar2334/article/details/135375378</link><guid>https://blog.youkuaiyun.com/Caesar2334/article/details/135375378</guid><author>Caesar2334</author><pubDate>Thu, 04 Jan 2024 00:43:35 +0800</pubDate><description><![CDATA[之后关于速度的任何操作值需要影响这个速度变量就可以影响小车的速度了，这叫做将小车的速度具象化，这是个很重要的思路。就像之前学习的LCD显示一样，其中有显示函数，也有装载了字符串的数组，显示模块永远是不用动的，而影响数据如何，只要对这个字符串数组进行操作就可以了。]]></description><category></category></item><item><title><![CDATA[按键时钟的原理]]></title><link>https://blog.youkuaiyun.com/Caesar2334/article/details/135348576</link><guid>https://blog.youkuaiyun.com/Caesar2334/article/details/135348576</guid><author>Caesar2334</author><pubDate>Tue, 02 Jan 2024 21:35:20 +0800</pubDate><description><![CDATA[之前的独立按键是什么原理呢？之前的独立按键是利用时钟中断，不断地返回按键的状态，当按下去的那一刹那就会返回很多次的状态，返回的形式都是一个一个的Bit,当装载这些比特的，字节都是按下去的状态的时候，这个时候就可以判定是按下去了，但是总的来说，这种方式的反应还是很慢的，于是乎我们可以使用下降沿的方式来进行判定，这样的话，只需要一刹那就可以了，这样的话更加灵敏。]]></description><category></category></item><item><title><![CDATA[滚动点阵屏]]></title><link>https://blog.youkuaiyun.com/Caesar2334/article/details/135331316</link><guid>https://blog.youkuaiyun.com/Caesar2334/article/details/135331316</guid><author>Caesar2334</author><pubDate>Tue, 02 Jan 2024 01:07:18 +0800</pubDate><description><![CDATA[有了这个函数，连一开始的第一个字节都是滚进去的，就是显示不完全的状态。其中的s_led_buff是一个缓存。原理就是加了一个shift函数。]]></description><category></category></item><item><title><![CDATA[LCD1602]]></title><link>https://blog.youkuaiyun.com/Caesar2334/article/details/135331059</link><guid>https://blog.youkuaiyun.com/Caesar2334/article/details/135331059</guid><author>Caesar2334</author><pubDate>Tue, 02 Jan 2024 00:24:11 +0800</pubDate><description><![CDATA[（1）设置光标的时候，非常有讲究，A6是y左边，后面的A3-A0是X的坐标，中间的就默认为0就好了。（2）记得每次写命令和数据的时候，检查一下忙状态，所谓的忙状态就是一种锁。（3）传输数据的时候，直接赋值过去就好了。这个不是串行的，这个是并行的。]]></description><category></category></item><item><title><![CDATA[18B20]]></title><link>https://blog.youkuaiyun.com/Caesar2334/article/details/135330967</link><guid>https://blog.youkuaiyun.com/Caesar2334/article/details/135330967</guid><author>Caesar2334</author><pubDate>Tue, 02 Jan 2024 00:10:08 +0800</pubDate><description><![CDATA[（3）里面的函数也是很常见的，写字节函数，和读字节函数，需要注意里面的时序，非常复杂，对于写字节中，其中的时序需要子啊15us及时释放，不要忘记了。（2）其每次发完寄存器指令的时候，都需要初始化一次，也就是说不能连续发两次的寄存器指令。（4）收集完了两个字节之后，就又要进行一次初始化了。这个也是串口的协议，数据的写入也是从低到高的。（1）18B20也是有读时序和写时序的。]]></description><category></category></item><item><title><![CDATA[DS1302N的时钟逻辑]]></title><link>https://blog.youkuaiyun.com/Caesar2334/article/details/135330651</link><guid>https://blog.youkuaiyun.com/Caesar2334/article/details/135330651</guid><author>Caesar2334</author><pubDate>Mon, 01 Jan 2024 23:33:54 +0800</pubDate><description><![CDATA[基本的逻辑：这里面也有读时序和写时序，时序里面也有写字节和读字节的函数，不过这里面需要注意写字节和读字节之间的衔接转换。（2）写进去的数字是需要转换成特定的格式，才能写进去的，同时读出来的格式也是需要特定的转换才能变成数字的。（1）里面有很多数据，所以需要定义一个结构体变量，将其中的数据写进去。这个是主函数，其中需要强制转换，同时要分两次写。（3）写数据是从低到高，和IIC是相反的。]]></description><category></category></item><item><title><![CDATA[I2C协议全流程]]></title><link>https://blog.youkuaiyun.com/Caesar2334/article/details/135330202</link><guid>https://blog.youkuaiyun.com/Caesar2334/article/details/135330202</guid><author>Caesar2334</author><pubDate>Mon, 01 Jan 2024 22:45:31 +0800</pubDate><description><![CDATA[（2）这个协议中的函数比较少，就是起一个起始信号，终止信号，读时序信号，写时序信号，写字节函数，读字节函数（由于是实时的串口，所以读写都不需要用缓存装着，直接通过信号线就传输过去了）（3）需要注意的是，读时序的话，最后不读了之后发送的是无应答，这个需要记住，这个时候读信号可以将ACK的应答拆分出来就好了。I2C协议其实没有什么，就是一个实时的双线协议，主要是其中的时序比较复杂，但是函数并不复杂，需要记住以下的几个要点。而时钟和18B20都是相反的，都是从低位走高位的。]]></description><category></category></item><item><title><![CDATA[51单片机的串口驱动的代码逻辑]]></title><link>https://blog.youkuaiyun.com/Caesar2334/article/details/135278257</link><guid>https://blog.youkuaiyun.com/Caesar2334/article/details/135278257</guid><author>Caesar2334</author><pubDate>Mon, 01 Jan 2024 18:27:15 +0800</pubDate><description><![CDATA[51单片机中，串口通信指的是单片机和其他的机器传递数据的时候是通过一个bit一个bit的形式传输的，值得一提的话，串口通信是硬件串口。什么意思呢？也就是在传递比特的时候，不用软件来模拟比特传输时的时序，由硬件自动传输。那么需要发送的数据怎么告诉硬件让其传输的呢？没有缓存的数组或者是缓存的寄存器。而，内置的寄存器（其实有两个，一个只读，一个只写），作为需要输出和输入的一个中间人，所以所有通过串口输入输出的字节都是需要通过这个SBUF的，所以就会出现上一篇文章讲的SBUF被覆盖的问题，]]></description><category></category></item></channel></rss>