本文将提到以下内容:

  • 蜂鸣器
  • 按键控制
  • 电容触摸
  • 温度传感器
  • 红外
  • TFTLCD触摸屏
  • MPU6050传感器
  • SPI-FLASH
  • SDIO_SD卡
  • ucos-III移植

一、蜂鸣器

  蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,主要分为以下两种:

  • 有源:电磁式
  • 无源:压电式

  这里的有源,不是指电源的意思,而是指蜂鸣器内部是否含有振荡电路,有源蜂鸣器内部自带振荡电路,

只需提供电源即可。无源蜂鸣器需要提供1.5-5KHz之间的频率脉冲才能发声。

  我们可以通过以下两个方面来让蜂鸣器发出美妙的音乐:

  • 频率:控制音调
  • 占空比:控制声音大小

二、按键控制

  按键是一种电子开关,通常的按键所用的开关为机械弹性开关,当机械触点断开、闭合时,电压信号

如下图所示:

  可以看出,机械开关唯一要注意的点就是按键抖动,一般抖动时间为5ms到10ms,我们可以通过两种方

式进行消抖:

硬件消抖:较复杂,一般不太推荐。

软件消抖:按键按下后,延时10ms,再次读取按键状态,比较简单,推荐。

三、电容触摸

  电容触摸按键,原理是通过检测电容充放电时间,即可判断是否有触摸,如下图所示,A未触摸,B触摸,

B的充放电时间明显长于A,即可判断B触摸。触摸时,手指和TOUCH之间形成电容,会影响充放电时间。

四、温度传感器

  stm32芯片内部带有温度传感器,但是内部的温度传感器受芯片内部温度影响较大,所以一般不采用内部

的温度传感器。

  我们一般采用DS18B20,其是单总线器件,一般单总线器件都要求采用严格的信号时序,以保证数据的完

整性。一般有以下几个信号的时序:

  • 初始化时序
  • 写时序
  • 读时序

五、红外

  比红光波长还长的光叫做红外线,红外线遥控就是利用波长为0.76~1.5um之间的近红外线来传送控制信号

的,抗干扰能力强,信息传输可靠。

  由于红外线遥控不具有像无线电遥控那样穿过障碍物去控制被控对象的能力,所以,在设计红外线遥控时,不

必要像无线电遥控那样,每套(发射器和接收器)要有不同的遥控频率或编码(否则,就会隔墙控制或者干扰),所

以同类产品的红外线遥控器,可以有相同的遥控频率或编码,而不会出现串门的情况。

  主要分为两部分:

  (1)红外发射设备

  红外发射电路的主要元器件是红外发光二极管。红外遥控器常用载波的方式传送二进制编码,常用的载波频率

为38KHz,二进制脉冲码的形式有很多种,红外遥控器最常使用的是NEC协议(PWM码脉冲宽度调制),NEC码位

的定义时序图如下图所示,其中0.56ms是连续载波脉冲:

  NEC遥控指令的数据格式为:引导码、地址码、地址反码、控制码、控制反码。其中反码是为了增加传输的可靠

性(可用于校验)。数据格式如下图所示:

  NEC码还规定了连发码(由9ms低电平+2.5ms高电平+0.56ms低电平+97.94ms高电平组成),如果在一帧数据传

送完毕之后,按键仍没有放开,则发射连发码。

  一般红外遥控器按键出产的时候就已经底层编码了,不过我们可以通过修改遥控器配置文件来修改按键编码。

  (2)红外接收设备

  根据载波频率和编码方式,即可定制一体化红外设备。红外遥控接收设备由红外接收电路、红外解码等组成,主要

作用是将发射来的红外光信号转换为电信号,再放大、限幅、检波、整形,形成指令脉冲,输出值遥控微处理器。

  红外没接收到信号时为高电平,收到脉冲时为低电平,通过外部中断的下降沿触发中断,在中断处理函数内计算高

电平时间来判断接收到的数据是0还是1,或者判断是否是引导信号。其中计算高电平时间可以采用延时函数delay。

六、TFTLCD触摸屏

  TFT-LCD是薄膜管液晶显示器(thin film transistor-liquid crystal display),每个像素都设有一个薄膜晶体管,

每个像素都可以通过点脉冲直接控制,且相互独立。常用的通信模式主要有6800模式和8080模式,TFT彩屏一般都使用

8080并口模式。数据线的数量主要看液晶屏使用的是几位模式,有8根、9根、16根、18根四种类型,功能如下图所示,

其中有5根控制线和多根数据线。

  接下来看一下8080接口模式的时序图:

  实现TFT液晶显示的步骤如下:

  • IO口与TFTLCD模块相连接
  • 初始化TFTLCD模块
  • 写入内容

  以前,我们使用51单片机就是通过单片机的IO口模拟8080时序进行TFT彩屏控制,但是stm32F4自带了FSMC接口,

FSMC的NOR/PSRAM存储器控制器的接口信号与TFT彩屏类似,所以可以将TFTLCD当做SRAM设备使用。因为TFTLCD

的读写速度相差较大,一般是将读写时序分开。

  触摸屏分为电阻式和电容式,电阻式触摸屏是通过压力感应原理来实现的,电容式触摸屏是利用人体感应进行触点

检测控制。TFTLCD屏上除了FSMC控制的信号线之外,还带有触摸屏的控制线,可以单独进行控制。

七、MPU6050传感器

  MPU6050是一款6轴运动处理组件,整合了3轴陀螺仪和3轴加速度传感器,其内部结构框图如下图所示:

  使用步骤如下:

  • 初始化I2C接口
  • 复位MPU6050
  • 设置角速度传感器(陀螺仪)和加速度传感器的满量程范围
  • 设置其他参数
  • 配置系统时钟并使能
  • 利用DMP进行姿态解算

  从上述步骤中,我们看到MPU6050中自带数字运动处理器DMP,DMP能够将我们得到的原始数据直接转换成四元数

输出,而得到四元数之后,就可以很方便的计算出欧拉角,从而得到航向角、横滚角和俯仰角,即得到了我们想要的姿态

(其中四元数是q30格式)。要使用DMP,需要将InvenSense提供的MPU6050运动驱动库移植过来。

  以下有一些概念需要理清楚:

  • 加速度计:对震动较敏感,短时间的数据不可靠,需要进行滤波;
  • 陀螺仪:对震动不敏感,但是会不断积累误差,产生漂移,长时间数据(积分)不可靠,过段时间需要用加速度数据来矫正角度。
  • 电子罗盘:一般不能保持绝对水平,需要加速度计进行倾斜补偿。此外,可以用于矫正陀螺仪航向角误差的不足。

  一般MPU6050可用于无人机,简单的无人机可以分为以下几个部分:

  • 机架:一般机型有四旋翼十字型、四旋翼X型、六旋翼I型等等,根据需要选择;
  • 飞控板:飞控板是控制核心,里面一般包括陀螺仪、气压计、磁力计、加速度仪、GPS、超声波测距等传感器;
  • 电机:需要考虑拉力、重量、电池容量、体积等来选择,通常选择无刷电机,需要用电子调速器来驱动;
  • 电池:一般用锂电池,考虑功率、电压等,注意进行低压检测,防止造成损失;
  • 螺旋桨:考虑电机转速、功率、电池电压等,电压越高,转速越快;
  • 遥控器:一般用的是Fvtaba,jr之类的。

  此外,有时候控制方向不单纯靠电机的转速来实现,还可以加舵机,这里做一下概念的讲述:

  • 伺服电机:内含(电机、传感器、控制系统等),可以用于精密控制位置、速度、力矩;
  • 舵机:类似低配版的伺服电机,主要用于控制位置;
  • 步进电机:依靠定子的线圈序列通电,不需要位置传感器,力矩小,功耗大,效率低。

八、SPI-FLASH

  stm32自带的Flash较小,有时候不够用。这时候我们就需要接外部Flash,用来存储程序或者数据,一般是采用SPI

进行读写通信。很多新手都不知道外部Flash具体可以用来做什么,甚至没有考虑过自带Flash不足的情况。这里举一个例

子,比如存储字库,当我们需要用到各种语言的字符时,就需要进行字库存储,然而自带的Flash大小根本不够。

  以GBK编码的字库为例,以下是运用字库的的步骤:

  • 读取汉字GBK编码;
  • 根据GBK编码寻找到该文字在字库中的偏移地址;
  • 根据字库编译地址转换为改文字的点阵数据在Flash中的偏移地址;
  • 根据Flash的地址,将文字的点阵数据读到LCD中显示即可。

  至于如何将字库存进外部Flash中,其实很简单,先将字库存入SD卡中,再通过FATFS文件系统函数以及SPI将自己制

作的字库文件读写进外部Flash中。

九、SDIO_SD卡

  stm32F4的SDIO提供了APB2外设总线与多媒体卡(MMC)、SD卡、SDIO卡以及CE-ATA设备之间的接口。总线的

通信是基于命令和数据的传输,多媒体卡/SD/SDIO总线上的基本事务是命令/响应事务。SDIO由两部分组成:APB2接口

和SDIO适配器,其结构框图如下:

  操作步骤如下:

  • 初始化SD卡
  • SD卡读写块函数
  • 编写主函数

  SDIO接口采用的是命令/响应的方式对SD卡、多媒体卡等进行传输数据,并带有命令、数据、时钟等通道。不同的

卡的标准不一样,我们可以从它们的官网查看:

  • 多媒体卡协会网站 www.mmca.org
  • SD卡协会网站 www.sdcard.org
  • CE-ATA工作组网站 www.ce-ata.org

  stm32带的固件库函数里面可以选择使用哪种类型的卡,避免了与卡底层标准的直接接触,操作较为方便。我们通

过SDIO接口可以很方便地进行SD卡读取操作。

  但是,为了能更好地定位SD卡下面的文件,更简便地操作文件,我们还需要加入Fatfs文件系统模块,它可以减轻SD

卡的工作量,方便地定位和读写文件或者图片。以上操作都可以用Fatfs的函数进行执行,比如执行在一个目录下扫描各个

文件名等。这里要注意的是,Fatfs可以支持多个卷(物理驱动器或分区),所以需要对设备进行根目录编号,一般SD为0,

EX_FLASH为1,U盘为2(并不固定,按自己喜好配置即可)。那么SD卡的根目录为“0:/”。

  Fatfs库可以通过官网下载 http://elm-chan.org/fsw/ff/00index_e.html

注:当SD卡采用FATFS系统存储bmp图片时,都是从最后开始存的,所以LCD显示扫描时,从下面开始扫较好。

十、ucos-III移植

  说到ucos,我们就能想到Micrium公司,这个公司专注于嵌入式产品领域,拥有十几款嵌入式领域的软件,比如RTOS

中的ucos-III,ucos-III的性能比之前的几代强了很多。ucos-III的移植教程在网上有很多,这里就不详细介绍了。我们都知道

要使用ucos-III,那必须得去官网https://www.micrium.com/上下载相应的ucos-III库,根据不同的平台、不同的CPU等来选

择对应的可移植版本,其次,我们还要注意修改启动文件,这意味着你是否需要启动ucos-III。

stm32之外设控制的更多相关文章

  1. 鸿蒙开发板外设控制 之 实现按键“按下事件”和“释放事件”的通用框架(V0.0.1)

    在帖子 <鸿蒙开发板外设控制>直播图文版(2020.10.28) 中我们提到过:"开发板上的按键也可以看作一种 GPIO 外设." 因此,要捕捉按键的状态(按下或释放) ...

  2. stm32之时钟控制

    本文提到的有以下内容: 时钟系统与总线矩阵 SysTick系统定时器 RTC实时时钟 看门狗定时器 通用定时器 一.时钟系统与总线矩阵 stm32F4的时钟树如下图所示: 在STM32中,有五个时钟源 ...

  3. WS2812B彩灯详细讲解篇(STM32 PWM+DMA控制 STM32 HAL库编程 循环延时控制多种控制方式)

    一.效果展示 观看演示效果:https://www.bilibili.com/video/BV1JT4y1P72Q 二. 基础认识 (一)  小理论 WS2812B是一种智能控制LED光源,将控制电路 ...

  4. STM32的寄存器控制SDA_IN()/SDA_OUT()

    #define SDA_IN()  {GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=(u32)8<<28;}#define SDA_OUT() ...

  5. 为什么stm32有的外设在进行初始化的时候需要将寄存器重设为缺省值?不设置会怎么样?

    首先,缺省值就是默认值的意思,默认值可以理解为设计芯片的人认为用这个参数,比较适中,起码不可能耽误你对某一模块进行驱动.然后,为什么除了默认值(缺省值),还有这么多其他的参数可以进行选择呢,那就要看你 ...

  6. 鸿蒙开发板外设控制 之 实现物理按键的“长按事件”(按键通用框架 V0.0.2)

    我在之前的帖子<实现按键"按下事件"和"释放事件"的通用框架(V0.0.1)>中阐述了DTButton-V0.0.1的设计思路,并且也在帖子中开源了 ...

  7. pixy&STM32使用记录(串口&SPI外设)

    先踏踏实实的把stm32的外设串口,SPI搞清楚,不要眼高手低,看不起小事.用SPI通信将pixy的数据读出来,将数据用串口发到串口助手上,然后处理数据,利用STM32的定时器调节pwm,控制电机,先 ...

  8. [转] STM32各种时钟的区别

    [原创]:http://m.oschina.net/blog/129357 我在原创的基础又从另一位博主处引用了一些内容. 时钟系统是处理器的核心,所以在学习STM32所有外设之前,认真学习时钟系统是 ...

  9. 嵌入式单片机STM32应用技术(课本)

    目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...

随机推荐

  1. (扫盲)RPC远程过程调用

    https://blog.csdn.net/mindfloating/article/details/39473807 https://blog.csdn.net/mindfloating/artic ...

  2. Python程序打包成exe的一些坑

    今天写了一个项目,Python项目,需要在win7上跑起来,我想,这不是简单的不行么,直接上Pyinstaller不就完了? 但是后来,我发觉我真是too young too simple. 为什么这 ...

  3. 【leetcode刷题笔记】Search in Rotated Sorted Array II

    Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...

  4. Vim 命令记录与回放

    步骤如下: q+(a..z)寄存器名: 执行你要执行的操作: q 结束操作: 调用为@+寄存器: 列子如下: 在写PHP 程序时用的比较多的是创建函数: 如 function add_in(){ } ...

  5. redis配置参数的热修改

    Redis使用config命令,可以对配置项参数热修改,不必重启. Redis最好不要重启,重启一次会引发如下问题: 如果数据很多(例如几个G),读起来很慢: 重启风险很大,Redis有内存陷阱 重启 ...

  6. UNIDBgrid里动态添加clientevents实现回车替换TAB

    //GRID里回车替换TABfunction cellkeydown(sender, td, cellIndex, record, tr, rowIndex, e, eOpts){ if (e.get ...

  7. 算法(Algorithms)第4版 练习 1.3.1

    package com.qiusongde; import java.util.Iterator; import java.util.NoSuchElementException; import ed ...

  8. 大话设计模式--抽象工厂模式 Abstract Factory -- C++实现实例

    1. 抽象工厂模式: 提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类. 下面是工厂方法模式: 下面是抽象工厂模式: 和工厂方法模式相比 抽象工厂模式可以有多个Product抽象, ...

  9. 大话设计模式--装饰者模式 Decorator -- C++实现实例

    1.装饰者模式 Decorator 动态地给一个对象添加一个额外的职责, 就添加功能来说, 装饰模式比生成子类更为灵活. 每个装饰对象的实现和如何使用这个对象分离,  每个装饰对象只关心自己的功能,不 ...

  10. SQLServer 一些有用的语句

    SET STATISTICS TIME ON 记录查询的相关数据 生成随机Guid SELECT NewID() 按照某一列排序并生成序号 select Row_Number() OVER (ORDE ...