初品STM32H7R3开发套件 正点原子是一家知名品牌,它以技术新、资料全、易于掌握和开发而闻名,此次试用的STM32H7R3开发板则是一款基于STM32H7系列微控制器的高性能开发板,适用于各种高性能计算和复杂图形用户界面的应用开发。由于在该开发板上配有丰富的外设资源,因此在掌握和了解开发板性能及用法的基础上,可方便地进行多种功能的开发。 计划用该开发板完成一个桌面化多传感器管理与控制的项目 该项目计划为: 1)搭建开发环境及例程的下载测试 2)掌握GPIO口的使用,并利用GPIO口来扩展外设功能,如用BH1750进行光照强度检测、用BMP085进行温度与大气压检测等 3)实现WS2812彩色灯链的驱动控制 4)完成点阵屏显示板及步进电机的驱动控制 5)实现TFT显示屏的显示驱动及应用界面的设计制作 6)掌握SD卡中文件内容的读写及实现数码相框功能 7)完成一个集板载各种传感器的桌面化管理与控制 正点原子STM32H7R3开发套件由开发板和相应的配件组成,见图1至图3所示。 图1 开发板 图2 电源与USB线 图3 遥控器与德邦线 在使用USB_UART接口供电的情况下,其显示效果如图4所示,即屏幕依次变换背景色来显示指定的文字内容。 图4 显示效果 此时,若在电脑侧打开设备管理器则会见到图5所示的虚拟串口,经测试该串口并没有啥输出内容。 图5 虚拟串口
在安装MDK开发软件后,打开相应的例程其界面如图6所示,注意需安装较新的软件版本,否则影响编译。 图6 界面形式 在下载并安装芯片支持升级包后,可见到图7所示的芯片支持。 图7 芯片支持 在按图8所示,选取生成目标文件的情况下,其编译结果如图9所示。 图8 选取生成目标文件 图9 完成编译 在使用开发板SWD接口连接外部调试工具的情况下,即连接情况如图10所示。 图10 连接状态 图11 烧录算法选取 在执行下载后,其结果如图12所示。
但给出的提示是: 而且没有观察到预期的效果,暂不清楚是何原因。 ![]() ws2812彩灯 |
缺少90000000H以后地址的下载算法文件。 sct文件: |
上次在下载时出现的异常问题,在网友的指定和帮助下终于解决了。 针对提示给出的问题,主要是因为: 1)未添加ATK-DNH7R3_XSPI_MULTIPLE,导致无法进入9000000--9000151的地址空间。 解决的办法是将下面2个FLM文件复制到“D\\Keil_v5\\ARM\\Flash”目录下。 2)关于“Cannot access Memory (@ 0xeoooedf0, Read, Acc Size: 4 Byte)”的提示,在按图1来设置后能得到解决,可能与调试器的复位信号未与开发板连接有关。 经以上的处理,完成下载后的界面如图2所示,说明下载成功,这样才迈入了探索STM32H7R3学习的门槛。 |
AP3216C距离传感器: AP3216C 是敦南科技推出的一款三合一环境传感器, 它包含了:数字环境光传感器(ALS)、接近传感器(PS)和一个红外 LED(IR)。该芯片通过 IIC 接口和 MCU 连接,并支持中断(INT)输出。 AP3216C 的特点如下: 因为以上的特性,AP3216C 被广泛应用于智能手机上面,用来检测光强度(自动背光控制),和接近开关控制(听筒靠近耳朵,手机自动灭屏功能)。AP3216C 的框图如图1所示。
该传感器在开发板上的电路如图2所示,所用引脚为PF0和PF1。 经程序的编译与下载,其测试结果如图3所示。 其中,ALS表示光照强度(+)、PS表示接近距离(-)、IR表示红外光强。 在测试过程中,各项数值在一定范围内不断地波动,当用手遮挡或靠近AP3216C 传感器时,ALS和PS的数据变化比较突出。在靠近 AP3216C 传感器时,由于光线被遮挡的原因其ALS值会变小,而PSS值会变大。在遮挡AP3216C 传感器时,ALS值为0,而PSS值为1023。 在通常情况下,使用光照强度传感器其值会十分稳定,后面会尝试在开发板上添加该传感器的检测功能。 |
QMC6308 磁力计检测 QMC6308 是一款 QST(上海矽睿)的三轴地磁传感器,经内部信号处理,以IIC 接口进行输出。QMC6308 提供的输出信号与它在 XYZ 方向上测量的磁场成比例,如需要消除比例因子,则需要用户自行校准。 QMC6308 传感器的检测轴如图1 所示,其内部结构如图2所示。
QMC6308 磁力计与开发板的连接关系如图3所示,由于使用的是I2C总线,由此也是连接到PF0和PF1引脚。
经程序的编译与下载,其检测效果如图4所示。 当在水平面内由南向北移动开发板时,MagX值会变大; 当在水平面内由东向西移动开发板时,MagY值会变小; 当在垂直反向由上向下移动开发板时,MagZ值会变大; 当开发板由南向北移动顺时针反向旋转时,Angle值会产生由小变大---由大变小---由大变小---由小变大的过程。 据资料介绍在数据偏差较大时,可进行校准处理,即水平放置开发板,然后按下KEY0以进入校准模式,随后将开发板在水平面内缓慢旋转2~3圈,在按下KEY_UP退出校准模式。 |
QMI8658A 六轴传感器检测: QMI8658A 是一款针对大众市场的高性价比六轴传感器,它具有功耗低、噪声低、封装小的特点。 QMI8658A 内部集成有 3 轴陀螺仪和 3 轴加速度计;可以通过 I3C、I2C 和 3 线或 4 线 SPI的接口和MCU进行数据交互,传输速率可达 400kHZ/s。陀螺仪的角速度测量范围最高达±2048°/S,具有良好的动态响应特性。加速度计的测量范围最大为±16g(g 为重力加速度),静态测量精度高。广泛应用于智能手机、游戏控制器、遥控器和汽车安全系统等场景。 QMI8658A 的特点如下: QMI8658A 传感器的检测轴如图1 所示,其内部框图如图2 所示。
QMI8658A 六轴传感器与开发板的连接关系如图3所示,所使用的引脚为PF0、PF1和PE3。
经程序的编译与下载,其检测效果如图4和图5所示。
其中,Temp指示温度值、Pitch指示俯仰角、Roll指示横滚角、Yaw指示航向角。 若使用软件ANO_TC 匿名科创地面站 v4.51来接收开发板所上传的数据,则可以图形化的方式来显示飞行姿态,见图6所示。这是对6轴传感器检测中的最大收获,发现了一种可直观展示数据变化的工具。
|
WS2812B灯光秀 WS2812B 是一款单线传输三通道(RGB)驱动控制电路与发光电路于一体的智能外控LED 光源。产品内含有信号解码模块、数据缓冲器、内置恒流电路及 RC 振荡器;内部集成电流增益控制模块,CMOS 制程,低压、低耗电;三通道恒流驱动器默认输出 19mA,采用单线输出方式,串接各晶片之输出动作同步;上电默认不亮灯。 数据协议采用单极性归零码的通讯方式,单线传输LED 驱动控制专用芯片,同时芯片内 置的电流增益调节功能,可设置电流1.75mA~19mA,共 16 个电流增益等级;PWM 信号刷新率高达 4KHz,显示更趋细腻平滑,解决拍摄画面暗条纹问题,非常适合高速移动产品的使用。 200us 以上的复位时间,出现中断也不会引起误复位,可以支持更低频率、价格便宜的 MCU。 主要应用领域:消费类电子产品、LED 全彩发光字灯串、电脑及周边设备、游戏设备以及各种电器设备。 WS2812B 的特点如下: (1)外观尺寸:2.01.80.8mm。 (2)颜色:红光、绿光、蓝光。 (3)胶体:无色透明。 (4)EIA 规范标准包装。 (5)环保产品,符合ROHS 要求。 (6)适用于自动贴片机。 (7)适用于红外线回流焊制程。 WS2812B 的内部结构如图1所示,其电路连接如图2所示。 图1 内部结构 图2 电路连接 实现彩灯效果的主程序为:
经程序的编译与下载,其检测效果如图3和图4所示。 图3 显示粉色 图4 显示亮蓝色 彩色灯链 当使用一个60点位的WS2812灯链时,需对定义的参数进行如下的修改: #define LED_NUM 60 所实现的效果如图5和图6所示。 图5 效果1 图6 效果2 演示视频: |
DS18b20温度检测: DS18B20 是由 DALLAS 半导体公司推出的一种“单总线”接口的温度传感器。与传统的 热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的数字化温度传感器。单总线结构具有简洁且经济的特点,可使用户轻松地组建传感器网络,从而为测量系统的构建引入全新的概念,其测试温度范围为: - 55 ~ +125℃,精度为 :± 0.5℃ 。 其内部结构如图1 所示,器件的连接关系如图2所示。
由于开发板并未随机配备DS18B20,因此要进行测试和使用需自行购置。在插接DS18B20后,其连接状态如图3所示。
经程序的编译和下载,其运行效果如图4所示。 |
DHT22温度检测: 在STM32H7R3开发板上配有DHT11温度传感器的接口,但并未随机配备该器件。 DHT11 是一款温湿度一体化的数字传感器。该传感器包括一个电阻式测湿元件和一个NTC 测温元件,并与一个高性能 8 位单片机相连接。通过与单片机等微处理器的简单电路连接就能够实时的采集本地湿度和温度。 DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一个 I/O 口。传感器内部湿度和温度数据有40Bit能一次性传给单片机,数据采用校验和的方式进行校验,以有效地保证数据传输的准确性。DHT11 功耗很低,5V 电源电压下,工作平均最大电流 0.5mA。 DHT11 的技术参数如下: (1)工作电压范围:3.3V ~ 5.5V (2)工作电流:平均 0.5mA (3)输出:单总线数字信号 (4)测量范围:湿度 5 ~ 95%RH,温度-20 ~ 60℃。 (5)精度:湿度±5%,温度±2℃。 (6)分辨率:湿度 1%,温度 0.1℃。 DHT11 的管脚排列如图1 所示,电路连接关系如图2所示。 图1 引脚排列 图2 连接关系 由于手头并没有该器件,故打算以DHT22 来替代DHT11,DHT22 的技术参数及器件外观如图3所示。 图3 技术参数及器件外观 与DHT11不同,DHT22对40位数据有着自己的含义分配。 设收到的40 位数据为: 0000 0010 1001 0010 0000 0001 0000 1101 1010 0010 按照其排列顺序,其作用位: 湿度高8 位 湿度低8 位 温度高8 位 温度低8 位 校验位 计算校验位的方法位: 0000 0010+1001 0010 +0000 0001+0000 1101= 1010 0010(校验位) 在接收数据正确的情况下: 湿度:0000 0010 1001 0010 = 0292H (十六进制)= 2×256 + 9×16 + 2 = 658 => 湿度 = 65.8%RH 温度:0000 0001 0000 1101 = 10DH(十六进制) = 1×256 + 0×16 + 13 = 269 => 温度= 26.9℃ 据此,修改后的DHT22读取数据函数为:
由于DHT22的检测间隔时间为2秒,故检测温度的主程序为:
经程序的编译与下载,其检测效果如图5所示。 由于DHT11与DS18B20使用的是同一个接口,但DHT11的引脚比DS18B20要粗,故无法直接利用该接口来连接,只能通过导线来进行连接,如图4所示。
|
RTC电子时钟: STM32H7R3 的实时时钟(RTC)相对于 STM32F1 来说,改进了不少,它配了日历功能。RTC 是一个独立的 BCD 定时器/计数器。RTC 提供一个日历时钟(包含年月日时分秒信息)、两个可编程闹钟(ALARM A 和 ALARM B)中断,以及一个具有中断功能的周期性可编程唤醒标志。此外,RTC 还包含用于管理低功耗模式的自动唤醒单元。它的两个32 位寄存器(TR 和 DR)包含二进码十进数格式 (BCD) 的秒、分钟、小时(12 或24 小时制)、星期、日期、月份和年份。此外,还可提供二进制格式的亚秒值。 STM32H7R3 的 RTC 可以自动将月份的天数补偿为 28、29(闰年)、30 和 31 天。并且还可以进行夏令时补偿。 RTC 模块和时钟配置是在后备区域,即在系统复位或从待机模式唤醒后 RTC 的设置和时间维持不变,只要后备区域供电正常,那么 RTC 将可以一直运行。但是在系统复位后,会自动禁止访问后备寄存器和 RTC,以防止对后备区域(BKP)的意外写操作。所以在要设置时间之前, 先要取消备份区域(BKP)写保护。 RTC 的内部框图如图1 所示: RTC 的配置步骤为: (1)使能 RTC 时钟,并使能 RTC 及 RTC 后备寄存器写访问复位后,后备区域存在写保护,RTC 属于后备区域,所以我们需要取消后备区域写保护。同时,我们需要使能 RTC 时钟,通过 RCC_APB4ENR 寄存器中的 RTCAPBEN 位设置。而取消后备区域写保护则是通过 PWR_CR1 寄存器中的 DBP 位去设置。 HAL 库设置方法为: __HAL_RCC_RTC_CLK_ENABLE(); /* 使能 RTC 时钟 */ HAL_PWR_EnableBkUpAccess(); /* 取消备份区域写保护 */ (2)开启外部低速振荡器 LSE,选择 RTC 时钟,并使能调用 HAL_RCC_OscConfig 函数配置开启 LSE。 调用 HAL_RCCEx_PeriphCLKConfig 函数选择 RTC 时钟源。 使能 RTC 函数为:__HAL_RCC_RTC_ENABLE。 (3)初始化 RTC,设置 RTC 的分频,以及配置 RTC 参数在 HAL 中,通过 HAL_RTC_Init 函数配置 RTC 分频系数,以及 RTC 的工作参数。 注意:该函数会调用:HAL_RTC_MspInit 函数来完成对 RTC 的底层初始化,包括:RTC时钟使能、时钟源选择等。 (4)设置 RTC 的时间 调用 HAL_RTC_SetTime 函数设置 RTC 时间,该函数实际设置时间寄存器 RTC_TR 的相关位的值。 (5)设置 RTC 的日期 调用 HAL_RTC_SetDate 函数设置 RTC 的日期,该函数实际设置日期寄存器 RTC_DR 的相关位的值。 (6)获取 RTC 当前日期和时间 调用 HAL_RTC_GetTime 函数获取当前 RTC 时间,该函数实际读取 RTC_TR 寄存器,然后将值存放到相应的结构体中。 调用 HAL_RTC_GetDate 函数获取当前 RTC 日期,该函数实际读取 RTC_DR 寄存器,然后将值存放到相应的结构体中。 通过以上 6 个步骤,就完成了对 RTC 的配置,RTC 即可正常工作,而且这些操作不是每次上电都必须执行的,可以视情况而定。当然,我们还可以唤醒中断、闹钟等。 经程序的编译与下载,其测试结果如图2所示。 |
A/D数据采集: STM32H7R3xx 系列有 2 个 ADC,都可以独立工作,其中 ADC1 和 ADC2 还可以组成双重模式(提高采样率)。 STM32H7R3 的 ADC 主要特性如下: (1)可配置 12 位、10 位、8 位、6 位分辨率,降低分辨率可以缩短转换时间,转换时间越短,可以做到的采样率就越高。 ADC(仅限 ADC1 或 ADC2)的结构框图如图1所示,用于检测的模拟信号电路如图2所示。
在进行模拟信号检测时,需将P14接口的引脚2和引脚3相短接。通过调节电位器,即可改变检测的电压值。 当然,也可用杜邦线将一端接到P14的 ADC 排针上,另外一端接到待测试的信号输出端。但一定要保证测试点的电压在0~3.3V 的电压范围,否则可能烧坏ADC,甚至是整个主控芯片。 经程序的编译与下载,其测试结果如图2和图3所示。
后续打算再为A/D数据采集添加一个波形曲线绘制功能,以便更加直观的展示数据的变换趋势。 |
IR红外遥控测试: 红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是家用电器所广泛采用,并越来越多的应用到计算机系统中。由于红外线遥控不具备像无线电遥控那样的穿过障碍物去控制对象的能力,所以,在设计红外线遥控器时,不必像无线电遥控器那样,每套(发射器和接收器)要有不同的遥控频率或编码(否则,就会隔墙控制或干扰邻居的家用电器),所以同类产品的红外线遥控器,可以使用相同的遥控频率或编码,而不会出现遥控信号“串门”的情况。这对于大批量生产以及在家用电器上普及红外线遥控提供了极大的方便。由于红外线为不可见光,因此对环境影响很小,再加上红外光波长远小于无线电波的波长,所以红外线遥控不会影响其他家用电器,也不会影响临近的无线电设备。 红外遥控接收头与开发板的连接关系如图1所示: 在红外遥控设备中,多采用NEC 协议。在该协议中数据‘0’或者‘1’有着相应的要求。 其中: 发送协议数据‘0’ = 发射载波信号 560us + 不发射载波信号 560us 发送协议数据‘1’ = 发射载波信号 560us + 不发射载波信号 1680us 红外发射器的位定义如图2所示: 接收协议数据‘0’ = 560us 低电平 + 560us 高电平 接收协议数据‘1’ = 560us 低电平 + 1680us 高电平 红外接收器的位定义如图3所示: 开发板上用于接收红外遥控信号的红外管外观如图4所示,配套的红外发送遥控器如图5所示。在使用时,遥控器需面向开发板的红外管发送信号,否则会影响接收。
经程序的编译与下载,LCD屏的显示的内容如图6所示。 当遥控器按下不同的按键时,在LCD屏上会看到不同的键值以及按键次数和对应的遥控器上的符号,见图7所示。
|
触摸控制及测试: 触摸按键相对于传统的机械按键有寿命长、占用空间少、易于操作等诸多优点。大家看看 如今的手机,触摸屏、触摸按键大行其道,而传统的机械按键,正在逐步从手机上面消失。本 章,我们将给大家介绍一种简单的触摸按键:电容式触摸按键。我们将利用STM32 开发板上 的触摸按键(TPAD),来实现对 DS1 的亮灭控制。这里 TPAD 其实就是 STM32 开发板上的 一小块覆铜区域,实现原理如图1 所示。
测试前,需进行硬件的连接(用跳线帽短接多功能端口的ADC 和 TPAD 即可)。 当使用电容触摸按键(右下角白色 LOGO,即 TPAD)时,是通过 TIM3_CH3(PB0)对电容触摸按键进行检测,以控制 DS1 的亮灭了。当LED0 闪烁时 ,表示程序在运行。 经程序的编译与下载,LCD屏的显示的内容如图3和图4所示。
|
OLED屏显示驱动及测试: OLED 即有机发光二极管( Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display, OELD)。OLED 由于具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。 LCD 都需要背光,而 OLED 则不需要,因为它是自发光的。因此同样是显示,OLED 的效果要更好一些。以目前的技术,OLED 的尺寸还难以大型化,但是分辨率确可以做到很高。 正点原子所用的OLED 显示模块有以下特点: (1)模块有单色和双色两种可选,单色为纯蓝色,而双色则为黄蓝双色。 (2)尺寸小,显示尺寸为 0.96 寸,而模块的尺寸仅为 27mm*26mm 大小。 (3)高分辨率,该模块的分辨率为 128*64。 (4)多种接口方式,该模块提供了总共 4 种接口包括:6800、8080 两种并行接口方式、4线 SPI 接口方式以及 IIC 接口方式(只需要 2 根线就可以控制 OLED )。 (5)不需要高压,直接3.3V 就可以工作。 在使用时一定要小心别直接接到5V 上,否则可能会烧坏模块。 OLED 模块与开发板的连接是使用OLED/CAMERA接口(P7 接口),见图1 所示。 由于手头没有与开发板相匹配的OLED显示屏,就对手头的一款I2C接口的双色0.96’的OLED进行了驱动测试。 为适应OLED屏的引脚排列顺序和反向,准备用U29接口来连接OLED屏,从而可以直接插接使用免去连线的麻烦。 U29接口P9接口情况如图2所示,在使用时需将P9接口的3-5及4-6相短接。
为验证PM8和PM9的输出性能,使用如下的函数对引脚功能进行了配置:
相应的测试主程序为:
经验证,其输出效果如图3所示,说明输出能力正常。 所设定的OLED与开发板的连接关系为: CLK ---- PM8 DIN ---- PM9 所用引脚输出高低电平的语句定义为: #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOM, GPIO_PIN_8, GPIO_PIN_RESET) #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOM, GPIO_PIN_8, GPIO_PIN_SET) #define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOM, GPIO_PIN_9, GPIO_PIN_RESET) #define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOM, GPIO_PIN_9, GPIO_PIN_SET) OLED的初始化函数为:
显示字符串的函数为:
测试OLED屏显示功能的主程序为:
经程序的编译与下载,OLED屏的显示效果如图4所示,说明显示正常。
|
NTC温度检测: NTC(负温度系数)热敏电阻是一种热敏性半导体电阻器,其电阻值随着温度的升高而下降,电阻温度系数在-2%/k~-6%/k范围内,约为金属电阻温度系数的10倍。NTC热敏电阻器电阻值的变化可以由外部环境温度的变化引起,也可以因有电流流过,自身发热而造成。它的各种用途都是基于这种特性。 NTC热敏电阻器由混合氧化物的多晶陶瓷构成。其导电机理是较为复杂的。 将NTC温度模块与A/D数据检测功能相配合,可实现温度的检测,它与开发板的连接如图1所示。 在连接时,所用的是图2中P14接口的PB0。 实现NTC温度检测的主程序为:
经程序的编译与下载,OLED屏的显示效果如图3和图4所示,即触摸NTC时其检测值可达30度左右,说明功能正常。
|
A/D检测数据的波形绘制: 使用STM32H7R3开发板所配置的TFT显示屏,不仅能显示文字信息,还能绘制波形曲线,所使用的关键函数就是lcd_draw_line()。 在NTC温度检测的基础上,可实现温度曲线的绘制功能,其主程序为:
在按图1连接电路的情况下,经程序的编译与下载,其检测效果如图2和图3所示。
|
U盘读写测试: U 盘,全称 USB 闪存盘,英文名“USB flash disk”。它是一种使用 USB 接口的无需物理驱动器的微型高容量移动存储产品,通过 USB 接口与主机连接,实现即插即用,是最常用的移动存储设备之一。 STM32H7R3开发板提供了U盘读写的测试功能,其电路如图1所示。 U盘读写的测试主程序为:
在连接U盘的情况下,如图2所示。经程序的编译与下载,其测试结果如图3所示。
似乎到这里也就算结束了,然而且慢! 此时,若通过串口发送指令的话,还有新的收获。在发送指令“mf_scan_files("3:")”后,会扫描 U 盘,并显示根目录所有文件,见图4所示。若发送指令“mf_scan_files("3:/PICTURE")”,则会显示PICTURE 目录下的所有文件,见图5所示。
除了显示存在的文件外,使用指令还可以创建新文件并向其写入信息内容。 在发送指令“mf_open("3:test u disk.txt",7)”后,会在 U 盘根目录创建一个名为“test u disk.txt”的文件,见图6所示。然后若发送指令“mf_write("这是一个测试,写入文件",0x16)”,则会写入“这是一个测试,写入文件”到该文件,见图6所示。若关闭该文件,则发送指令“mf_close()”。 若想判别文件是否创建成功,可发送指令“mf_scan_files("3:")”,此时会发现已多出了一个名为“ test u disk.txt ”的文件,说明 U 盘写入成功,见图7所示。
后面会继续对该功能进行更升入的探索,因为这个功能非常重要且实用。 |
U盘读写功能的实现探索: 前面介绍了U盘的测试,令人印象深刻的是可以通过串口以指令的方式来控制文件的读写。 那这一功能的实现基础是啥呢? 经追踪探索,原来它是通过调用usmart_config.c中的相关函数来实现的,这些函数有: (void )mf_open, "uint8_t mf_open(uint8_tpath,uint8_t mode)", (void *)mf_close, "uint8_t mf_close(void)", (void *)mf_read, "uint8_t mf_read(uint16_t len)", (void )mf_write, "uint8_t mf_write(uint8_tdat,uint16_t len)", (void *)mf_scan_files, "uint8_t mf_scan_files(uint8_t * path)", 这样我们就清除如何在程序中直接来使用这些功能了,这些函数的内容如下: 扫描 U 盘目录文件函数:
使用示例为: 打开文件函数:
使用示例为: 关闭文件函数:
使用示例为: 读取文件函数:
使用示例为: 文件写入函数:
使用示例为: 弄清这些知识,在后面的绣花机仿真设计中就可以直接查询U盘中是否存在花板文件及提取花板文件的数据,以便控制步进电机定位移动或在显示屏上绘制出修制的效果。 |
图片显示与数码相框: 图片的格式有很多种,但最常用的有不外乎这3种,即JPEG(或 JPG)、BMP 和 GIF。其中JPEG(或 JPG)和 BMP 是静态图片,而 GIF 则可实现动态图片。 (1)BMP 格式 它的全称 Bitmap,是 Window 操作系统中的标准图像文件格式,文件后缀名为“.bmp”,使用范围非常广泛。它采用的是位映射式的存储格式,除图像深度可选以外,未采用其他的压缩,因此,BMP文件所占用的空间很大,但是它不存在失真。 BMP 文件的图像深度可选1bit、4bit、8bit、16bit、24bit 及 32bit,BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。 (2)JPEG格式 它是 Joint Photographic Experts Group(联合图像专家组)的缩写,文件后辍名为“.jpg”或“.jpeg”,是最常用的图像文件格式,是由一个软件开发联合会组织所制定。同 BMP 格式不同,JPEG 是一种有损压缩格式,能将图像压缩在一个很小的储存空间,图像中重复或不重要的资料会被丢去,因而容易造成图像数据的损伤(BMP 不会,但是 BMP 占用空间大)。尤其是在使用过高压缩比例的情况下,将使最终解压缩后所恢复的图像质量明显降低。如果追求高品质图像,不宜采用过高压缩比例的方式。但是 JPEG 压缩技术很先进,它以有损压缩的方式去除了冗余的图像数据,在获得极高压缩率的同时,能展现十分丰富且生动的图像。换句话说,就是它可以用最少的磁盘空间得到较好的图像品质。此外,JPEG 也是一种很灵活的格式,具有调节图像质量的功能,允许用不同的压缩比对文件进行压缩,支持多种压缩级别,压缩比率通常在 10:1 到 40:1 之间,压缩比越大,品质就越低;相反地,压缩比越小,品质就越好。 (3)GIF 它是Graphics Interchange Format的缩写,是 CompuServe 公司开发的一种图像文件存储格式,1987 年开发的 GIF 文件格式版本号是 GIF87a,1989 年进行了扩充,扩充后的版本号定义为 GIF89a。 GIF 图像文件以数据块(block)为单位来存储图像的相关信息。一个 GIF 文件由表示图形/图像的数据块、数据子块以及显示图形/图像的控制信息块组成,称为 GIF 数据流(DataStream)。数据流中的所有控制信息块和数据块都必须在文件头(Header)和文件结束块(Trailer)之间。 GIF 文件格式采用了 LZW(Lempel-ZivWalch)压缩算法来存储图像数据,定义了允许用户为图像设置背景的透明(transparency)属性。此外,GIF 文件格式可在一个文件中存放多幅彩色图形/图像。如果在 GIF 文件中存放了多幅图,则它们可以像演幻灯片那样显示或者像动画那样演示。 STM32H7R3开发板所配置的图片显示主程序为:
值得指出的是,该程序并不是一个单纯显示图片的程序,它是建立在基于U盘的文件管理系统之上,当把存有.bmp、.jpg及.gif这3种格式的图片文件的U盘插入开发板的卡槽后,它能在按键的配合下实现自主的浏览,即起到了数码相册的作用。 经程序的编译与下载,其显示效果如图1和图2所示。此外,可使用 WKUP 和 KEY0 键进行上一张或下一张图片的快速切换。 图1 显示bmp图片
|
音频播放与录制功能测试: STM32H7R3 开发板配有串行音频接口(SAI),它具有灵活性高、配置多样的特点,适用于多声道或单声道应用。 SAI 的结构框图如图1 所示: 在开发板上是用 SAI 接口来驱动 ES8388,ES8388 是采用 I2S 接口,它最高 可支持192K 24BIT 的音频播放,并支持录音功能。 音频播放的测试主程序为:
在测试前,需把测试的WAV音频文件存入SD卡根目录下的MUSIC 文件夹内,并插入SD卡槽中。此外,为接听声音还需将耳机插入音频输出插孔,见图2所示。
经程序的编译与下载,在屏幕的显示内容有歌曲名字、播放时间、歌曲总时间、歌曲总数目、当前播放歌曲的编号等信息,如图3所示。
由于所设计的程序只支持WAV 文件,因此要播放MP3格式的歌曲,则需要进行文件的格式转换,见图4所示。
此外,使用音频录制功能也可以把电脑播放的MP3音乐转录为WAV格式文件,见图5所示。
|
只有小组成员才能发言,加入小组>>
【正点原子STM32H7R3开发套件试用体验】【主贴】- 基于STM32H7R3的远程隧道气压监测终端
1388 浏览 5 评论
【正点原子STM32H7R3开发套件试用体验】SD卡、音乐播放器
1126 浏览 0 评论
【正点原子STM32H7R3开发套件试用体验】DS18B20、DHT11温湿度采集
737 浏览 0 评论
【正点原子STM32H7R3开发套件试用体验】按键、串口通信
1201 浏览 0 评论
【正点原子STM32H7R3开发套件试用体验】移植lua解释器
533 浏览 1 评论
【正点原子STM32H7R3开发套件试用体验】桌面化多传感器管理与控制
2565浏览 23评论
【正点原子STM32H7R3开发套件试用体验】4G联网工业设备控制网关
21713浏览 9评论
【正点原子i.MX93开发板试用连载体验】基于深度学习的语音本地控制
29088浏览 6评论
【正点原子STM32H7R3开发套件试用体验】【主贴】- 基于STM32H7R3的远程隧道气压监测终端
1388浏览 5评论
【正点原子STM32精英V2开发板体验】很遗憾测评未动解BUG先行-关于BOOT的问题分享
1606浏览 4评论
电子发烧友网
电子发烧友开云(中国)官方