Bootstrap

胡说八道(24.6.10)——数电与STM32

    至此,信号与系统的简单笔记已经全部都写完了。其实,信号与系统的知识远远不只这些,总之,我的老师没讲完。其真实的原因是不在考试大纲里面。今天,看到一个短视频——学习的意义。其中有句话说,“因为考试不考,所以不讲”。哎!咱们学习的意义到底在哪里?哎,不谈了。他不讲咋就得自己学。

    咱们先谈谈STM32的一些知识。之前我们已经谈到了stm32的一类通用端口GPIO。这里咱们就先讲讲stm32在keil4中的一些配置问题。以stm32f10x系列为例。

    第一个是结构与构成。在stm32工程的构件中,由四部分构成——User、StdPeriph_Driver、CMSIS以及Startup这四个主体部分组成的。当然,这些程序的命名不是固定的,只是给大家一点参照。

     这里我针对每个文件挨个简单的讲解一下。首先是CMSIS文件,它是针对内存寄存器映射的一个储存,其中,我觉得最重要是stdint.h,它是对于我们在编程时的数据类型进行的定义。像uint8_t,uint16_t,这些变量类型都是从这里面调用的。其次,就是启动文件Startup,顾名思义,用来启动工程。这里我们用的是startup_stm32f10x_hd.s。其实还有一些其他的启动文件,像startup_stm32f10x_ld,startup_stm32f10x_md。这些与startup_stm32f10x_hd.s最大的区别就是Flash容量的区别。接下来是StdPeriph_Driver这个文件,这个是所有外设的根本,像GPIO,AD,串口通信USART等等外设部分都需要依仗这个标准库文件夹,当然这个大家随便找一个博主,基本上都能下到。最后,就是你的工程文件User,里面包含你所要实现的工程以及一些你所需要的中断函数。stm32f10x_it.c就是用来存放中断服务程序的。

 讲完了整体的构成,就是配置环境了。点击魔法棒中的C/C++。

        第一步,就是Define部分,输入USE_STDPERIPH_DRIVER,STM32F10X_HD。第二步,则是文件路径导入。Include Paths右侧的三个点。如下图。

        需要配置相应文件。

        以上如果配置成功,就能正常运行了。我在配置的时候,遇到了以下的问题:1、库没有导入好,在编译窗口会显示库没有定义;2、Undefined symbol assert_param,这个问题呢,是因为Define没有配置好导致的(assert是用来进行断言调试的函数)。好了,今天单片机就说到这里。明天咱们来看看一个大头——定时器和计数。

        现在,来做个数字电子技术的笔记。在进入数字电子技术的学习之前,咱们要明确两个概念——模拟量与数字量,二者就是连续和离散的区别。模拟量具有连续的数值,数字量具有离散的数值。这也是模电和数电最大的区别。在模电里面,对于三极管和MOS管,我们或许会考虑静态工作点Q点,考虑信号是作用在放大区、截止区或者是饱和区,考虑电压或者是电流。但是,咱们现在是在数字当中,只有高低电平的区别,运用三极管和MOS管并不会去考虑它的放大区。只把它当作开关,饱和区记为1(开),截止区记为0(关)。讲到这里,就不得不提高低电平并不是严格的5V和0V,它们是有范围的。是具体的电路而定,像在COMS数字电路中,高电平就是在2~3.3V之间,低电平则是在0~0.8V之间。

        接下来,谈谈数字波形图。它通常是在高、低电平或者是状态之间不断地变化的。我们将从低电平上升到高电平的时间记为上升时间tr(实际过程中,是从幅度的10%上升到幅度的90%的时间),反之,则从90%到10%的时间宽度记为下降时间tf。将上升时的幅度50%到下降时的幅度50%之间所经历的时间记为脉冲宽度tw。理想状况下,不严谨的讲,数电中我们也把矩形脉冲的高电平部分记为脉冲宽度,这种理念只适合做题。占空比的概念:脉冲宽度与周期的比值,记为(tw/T)*100%。咱们数电的引言大概就这些,至于,常用的图形咱们后面遇到的时候再讲。

        接着,咱们来谈谈数制以及编码。首先是,有十进制数(D)、二进制数(B)、八进制数(O)和十六进制数(H)。这里在进制转换的时候,咱们只要记住两种进制转换:1、任何进制转为十进制数,进行权值的展开。像八进制转十进制的话,就是权值从1、8、8^2……这样的权值展开相加就行了。2、二进制转八进制或十六进制,就是画圈,八进制就是每三个为一组编码,十六进制就是每四个为一组进行编码。另外,就是画圈数不够咋办?整数部分实行高位补零,小数部分实行低位补零。

        二进制之间的加减法运算。这里来看看原码、补码和反码的概念。原码:将一个数的绝对值转换为二进制数,并在最高位添加符号位(正数为0,负数为1)。反码:正数的反码与原码相同;负数的反码是将原码的数值位取反(0变为1,1变为0)。补码:正数的补码与原码相同;负数的补码是将反码加1。相加的时候没啥好说的。最重要的是在减法的时候,像1-3,咱们要看成1+(-3)。

        另外,就是几种特殊的编码方式,有权码如8421BCD码,5421BCD码等以及无权码如格雷码,余3码等。首先是各种BCD码,就只有一种方法——加权相加。无权码就是不怎么好统一总结的。举个例子,像格雷码,就是运用了异或关系,相同为零,相异为一。二进制转为格雷码的公式是

        格雷码转二进制码为

        有个更形象的例子,我觉得很不错

今天就说这么多。

欲知后事如何,且听下回分解OVO

;