找回密码
 立即注册
楼主: hais***

嵌入式老鸟回炉再造打卡帖(STC32位8051单片机学习)

[复制链接]
  • TA的每日心情
    开心
    2024-4-27 10:57
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    0

    主题

    6

    回帖

    30

    积分

    新手上路

    积分
    30
    发表于 2024-4-24 22:13:18 来自手机 | 显示全部楼层
    haishi28 发表于 2024-4-24 11:02
    好问题!
    当然有了板子,一边看,一边实验,会比较好。
    但免费送,总要有些门槛吧,可以理解。而且,先纸 ...

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    5 小时前
  • 签到天数: 51 天

    [LV.5]常住居民I

    7

    主题

    94

    回帖

    289

    积分

    中级会员

    积分
    289
     楼主| 发表于 2024-4-25 06:52:36 来自手机 | 显示全部楼层
    本帖最后由 haishi28 于 2024-5-12 18:18 编辑

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

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

    截图202404270941413209.jpg

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

    截图202404270944533484.jpg 截图202404270948082872.jpg

    总结:下划线前数字代表串口号,下划线后数字代表第几组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



    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    5 小时前
  • 签到天数: 51 天

    [LV.5]常住居民I

    7

    主题

    94

    回帖

    289

    积分

    中级会员

    积分
    289
     楼主| 发表于 2024-4-30 13:35:23 来自手机 | 显示全部楼层
    本帖最后由 haishi28 于 2024-5-12 18:18 编辑

    第二十二集 CDC串口通信
    官方的lib库,很方便。只是有一个疑问,会额外占用多少资源,有没有官方数据?
    IMG_20240430_133710.jpg
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    5 小时前
  • 签到天数: 51 天

    [LV.5]常住居民I

    7

    主题

    94

    回帖

    289

    积分

    中级会员

    积分
    289
     楼主| 发表于 6 天前 | 显示全部楼层
    本帖最后由 haishi28 于 2024-5-17 02:28 编辑

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

    翻了一下手册,从手册里USB-CDC不断电下载的描述上看,应该是USB-CDC的库代码实现了以下功能:
    接收到“@STCISP#”后,会将MCU复位,进入ISP下载区,从而实现不断电,自动下载。
    但貌似视频中出现了看门狗复位无法使软件顺利重新运行,是也进入ISP下载区了吗?
    截图202405121859514313.jpg
    截图202405121905395339.jpg
    截图202405121907535799.jpg
    从最后两个截图看,是关闭了USB相关功能,那USB-CDC功能呢,还正常吗? 实验验证了,正常。
    截图202405121915362017.jpg
    查看了RSTFLAG的描述,里面关于SWRSTF的描述如上图,我的疑问是,USB-ISP下载的动作是在用户代码执行之后,那是下一次启动时,用户代码起作用?
    看来看去,也没理解这之间的关联。
    USB-ISP进入后,检查SWRSTF是否为1,如果是1,则直接等待程序烧写。
    那看门狗复位,跟SWRSTF也没关系啊,为啥会需要RSTFLAG |= 0x04这句呢?视频里说了,实验也验证了,不需要这句。
    截图202405121926449295.jpg

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




    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    5 天前
  • 签到天数: 68 天

    [LV.6]常住居民II

    9

    主题

    137

    回帖

    145

    积分

    禁止发言

    积分
    145
    发表于 5 天前 来自手机 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    5 小时前
  • 签到天数: 51 天

    [LV.5]常住居民I

    7

    主题

    94

    回帖

    289

    积分

    中级会员

    积分
    289
     楼主| 发表于 昨天 13:32 | 显示全部楼层
    本帖最后由 haishi28 于 2024-5-17 13:34 编辑

    第二十四集 比较器
    内置比较器,功能很贴心,可以方便进行电压判断,常用传感器提供电压信号,利用外围电路分压对其进行阈值判断,避免了ADC转换,相应的滤波和防抖也都考虑了。
    例如手册中的例子:
    截图202405171334144388.jpg
    CHYS的配置,手册上写的介绍是:DC迟滞输入选择,理解起来不太通俗。
    视频中讲解的是电压向下波动时,有一个设定的差值,作为deadband,下降到设定的阈值-Vchys的时候,才会触发新的比较结果的产生。

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    5 小时前
  • 签到天数: 51 天

    [LV.5]常住居民I

    7

    主题

    94

    回帖

    289

    积分

    中级会员

    积分
    289
     楼主| 发表于 5 小时前 | 显示全部楼层

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




    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-18 19:39 , Processed in 0.065148 second(s), 54 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表