superchao 发表于 2024-4-24 22:13:18

haishi28 发表于 2024-4-24 11:02
好问题!
当然有了板子,一边看,一边实验,会比较好。
但免费送,总要有些门槛吧,可以理解。而且,先纸 ...

{:4_168:}

haishi28 发表于 2024-4-25 06:52:36

本帖最后由 haishi28 于 2024-5-12 18:18 编辑

第二十一集 串口应用
提到两个点,比较有用。
1. TxD,TxD2,TxD_2他们之间的关系
2. sprintf函数

问题1
TxD,TxD2分别是串口1,串口2,见下图



TxD,TxD_2分别是串口1的第一组TxD引脚,第二组TxD引脚,见下图



总结:下划线前数字代表串口号,下划线后数字代表第几组PIN脚。数字1会被省略,因此TxD可以理解成TxD1_1,即串口1的第一组引脚。

问题2
从csdn上摘录了一段

sprintf和printf都是C语言中用于输出字符串的函数,但它们之间存在一些重要的区别。

函数原型:printf的函数原型是int printf(const char *format, ...);,它返回的是输出的字符数量。而sprintf的函数原型是int sprintf(char *str, const char *format, ...);,它返回的是被写入到字符串str中的字符数量。
用途:printf通常用于直接在控制台上打印输出,而sprintf通常用于将格式化的数据保存到一个字符串中。
参数:printf接受不定数量的参数,而sprintf接受一个额外的参数,即用于保存输出结果的字符串的指针。
内存管理:printf不需要管理内存,因为它直接在控制台上输出。而sprintf需要管理内存,因为它将输出保存到一个字符串中。
错误处理:如果sprintf的第一个参数(即目标字符串)不是以空字符结尾的数组或者是不够大的数组,那么它将可能会导致缓冲区溢出,这是一个严重的安全问题。因此,使用sprintf时需要特别注意确保目标字符串足够大并且是以空字符结尾的。
可移植性:由于sprintf可能会导致缓冲区溢出,因此它的行为在不同的系统和编译器之间可能会有所不同,这使得它的可移植性较差。相比之下,printf的行为在不同的系统和编译器之间是一致的,因此它的可移植性较好。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/m0_74956598/article/details/134808074



haishi28 发表于 2024-4-30 13:35:23

本帖最后由 haishi28 于 2024-5-12 18:18 编辑

第二十二集 CDC串口通信
官方的lib库,很方便。只是有一个疑问,会额外占用多少资源,有没有官方数据?

haishi28 发表于 2024-5-12 18:50:48

本帖最后由 haishi28 于 2024-5-17 02:28 编辑

第二十三集 看门狗
看门狗,在软件异常后,可以进行补救,重启系统,减少影响。一般我在开发阶段,是不使能看门狗的,方便暴露软件问题。
看门狗只是亡羊补牢的做法,你肯定不希望自己的软件看门狗经常起作用。
一般,系统启动后,会检测一下是什么原因导致的系统复位,如果是看门狗,那就需要进行一些处理,比如记录一下log。
手册里示例比较简单,但跟其他功能一起用时,就出现了视频中的问题(与USB-CDC一起使用)。
视频里只是给出了解决办法,但好像没有给出解释。


翻了一下手册,从手册里USB-CDC不断电下载的描述上看,应该是USB-CDC的库代码实现了以下功能:
接收到“@STCISP#”后,会将MCU复位,进入ISP下载区,从而实现不断电,自动下载。
但貌似视频中出现了看门狗复位无法使软件顺利重新运行,是也进入ISP下载区了吗?



从最后两个截图看,是关闭了USB相关功能,那USB-CDC功能呢,还正常吗? 实验验证了,正常。

查看了RSTFLAG的描述,里面关于SWRSTF的描述如上图,我的疑问是,USB-ISP下载的动作是在用户代码执行之后,那是下一次启动时,用户代码起作用?
看来看去,也没理解这之间的关联。
USB-ISP进入后,检查SWRSTF是否为1,如果是1,则直接等待程序烧写。
那看门狗复位,跟SWRSTF也没关系啊,为啥会需要RSTFLAG |= 0x04这句呢?视频里说了,实验也验证了,不需要这句。


为了看门狗起作用,为什么要禁用USB呢?




电子爱好者2024 发表于 2024-5-13 16:06:17

学习的真透澈

haishi28 发表于 2024-5-17 13:32:10

本帖最后由 haishi28 于 2024-5-17 13:34 编辑

第二十四集 比较器
内置比较器,功能很贴心,可以方便进行电压判断,常用传感器提供电压信号,利用外围电路分压对其进行阈值判断,避免了ADC转换,相应的滤波和防抖也都考虑了。
例如手册中的例子:

CHYS的配置,手册上写的介绍是:DC迟滞输入选择,理解起来不太通俗。
视频中讲解的是电压向下波动时,有一个设定的差值,作为deadband,下降到设定的阈值-Vchys的时候,才会触发新的比较结果的产生。

haishi28 发表于 2024-5-18 14:39:41


第二十五集:FLASH模拟EEPROM标题很明确的说明了,是通过FLASH模拟EEPROM,因此就出现了整页擦除的要求,因为本质上是FLASH。对于掉电不丢失的数据,这是最简单的方式。掉电保存,一定是需要有供电电压检测电路才行,结合上一集的比较器,可以快速实现掉电保存。



haishi28 发表于 2024-5-22 07:00:01

本帖最后由 haishi28 于 2024-6-3 13:01 编辑

第二十六集 DS18B20温度传感器(单总线)


这个芯片没用过,重点就是学习一下这个芯片的控制。
感觉整个过程应该都是对单片机的一个管脚进行读写,进而完成对传感器的所有操作。
下面通过截图解释几个重点内容:

寄生电源

手册里这样写:




我们开发板也是用的直接VDD供电,简单稳定。

但下面这段没理解,MCU在不知道是什么供电的情况下,怎么提供强上拉呢?它控制什么来提供强上拉呢?



附件是DS18B20的手册,供大家参考。

课后习题里的3,是个值得研究的话题。标记一下。

haishi28 发表于 2024-7-3 14:19:29

第二十七集 软件模拟SPI
主要是理解SPI通信协议,包括四种模式。
有个疑问,就是视频里没有加暂时,也就是利用代码执行的时间来保证时钟信号,这样有潜在的风险吧?
页: 1 2 3 [4]
查看完整版本: 嵌入式老鸟回炉再造打卡帖(STC32位8051单片机学习)