1. 普通IO传感器类

1.1. 外设总结复习

1.1.1. GPIO

GPIO 是通用输入输出端口的简称,简单来说就是 STM32 可控制的引脚,STM32 芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。

STM32 芯片的 GPIO 被分成很多组,每组有 16 个引脚,如型号为 STM32F103ZET6 型号的芯片有 GPIOA、GPIOB、GPIOC 至 GPIOG 共 7 组 GPIO, 芯片一共 144 个引脚,其中GPIO 就占了一大部分,所有的 GPIO 引脚都有基本的输入输出功能。

最基本的输出功能是由 STM32 控制引脚输出高、低电平,实现开关控制,如把 GPIO引脚接入到 LED 灯, 那就可以控制 LED 灯的亮灭,引脚接入到继电器或三极管,那就可以通过继电器或三极管控制外部大功率电路的通断。

最基本的输入功能是检测外部输入电平,如把 GPIO 引脚连接到按键,通过电平高低区分按键是否被按下。

1.1.2. 中断

什么是中断:当你在家看书的时候,突然电话铃响了,你放下书去接电话,和来电话的人交谈,然后放下电话回去看书, 就像这样的 中断 现象在我们写的程序中也经常出现。

认真思考一下,生活中的这些中断是不是与单片机的中断机制相对应。

第一点,引起中断的事件,比如电话响了、门铃响了、水烧开了等等,我们可以把这些引起中断的事件叫做中断源, 这些事件就像单片机中的外部中断、定时器中断、串口中断等等。

第二点,假设两个中断同时发生应该怎么办,就像我们在看书的时候,电话铃响了,同时又有人敲门,是应该先接电话还是先开门呢, 如果你此时正在等一个比较重要的电话,那你可能会想先接完电话再去开门,相反的,如果敲门的是一个重要的人,你会先去开门再来接电话。 在这里会存在一个优先级问题,单片机中也是如此,优先级的问题不仅仅发生在两个中断同时产生的情况,也可能是一个中断事件已经发生了,又产生一个中断, 比如你正在接电话的时候有人敲门,如果这个电话很重要,那你会先接完电话再去开门,如果敲门的是个重要的客人,那你会放下电话,先去开门再回来继续接电话。

第三点,中断响应过程,当有事件产生,人进入中断之前我们需要记住现在书看到第几页了,或则用书签放在当前页的位置,然后去处理不同的事情,处理完之后再回来继续看书。 电话铃响了我们要到放置电话的地方去,门铃响了我们需要到门边去,也就是说不同的中断,我们需要在不同的地点处理,而这些地点通常还是固定的。 在单片机程序中也是这样的,每个中断产生后都到一个固定的地方去处理这个中断程序,当然再去之前首先要保存下面将要执行的指令的地址,这样才能在中断事件处理完之后回来继续做被中断事。 具体的说,中断响应可以分为以下几步:

  1. 保护断点,即保存下一条将要执行的指令的地址,就是把这个地址送入堆栈。

  2. 寻找中断入口,根据不同中断源产生的中断,找到相对应的入口地址。

  3. 执行中断处理程序。

  4. 中断返回,中断事件处理完成之后要回到堆栈中保存的指令的地址继续执行程序。

1.1.3. 定时器

能够定时、计数的器件称之为定时器。

基本定时器的主要功能就是定时,由各自的可编程预分频器驱动。

通用定时器除了基本的定时功能以外,还具有输入捕获和输出比较,产生PWM波形的功能。

高级定时器除了具有以上两中定时器的功能以外,还具有输出互补带死区的信号,以及刹车功能。

看门狗定时器能用于检测程序是否故障的,在超出一定时间程序跑飞或者CPU不工作了会产生一次系统复位或者中断(只有窗口看门狗有中断功能。)。

系统滴答定时器