打印
[应用相关]

嵌入式STM32实验

[复制链接]
259|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2021-12-27 10:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
实验目的
综合实现串口收发、文件管理、液晶显示、 触摸屏输入、按键输入、LED灯指示灯功能;
培养学生嵌入式系统的综合设计能力。
实验要求
1. 上电后,液晶屏初始显示“欢迎你”

2. 串口通信协议

#x#开始、##结束(x为数字1-4)

#1#(无参数):液晶屏显示Flash中所有文件名(一行显示一个文件名;如Flash中无文件,则显示“no  file”;

#2#(文件名+文件内容):文件名为“XXX.TXT”,Flash新建文件,液晶屏刷新显示Flash中所有文件名;

#3#(文件名):文件名为“XXX.TXT”,如该文件存在,Flash删除文件,液晶屏刷新显示Flash中所有文件名;如该文件不存在,液晶屏显示内容不变化。

按键功能
按键1
显示所有Flash中文件名,当前行(加底色)为第一行,按键后,当前行逐行下移, 最后一行后,再转到第一行;

(2)按键2

按键后,显示当前行所指示文件的内容;再次按键返回(显示Flash中所有文件名;当前行为按键前所指定行);

LED功能
平时状态,绿灯作为呼吸灯(1秒状态转换1次),读Falsh时红灯亮,写Falsh时蓝灯亮;

触摸功能
显示所有Flash中文件名后,触摸文件名所在行,显示当前行所

指示文件的内容。再次触摸,返回。

实验原理

通过取模软件,点击字模生成液晶面板选项,根据自己的需求配置字体的种类、大小。取模软件配置完毕后,输入所要取模的汉字,点击生成字模,并复制所生成的点阵集,再将所复制的点阵集按如下格式整理导入到font.h文件中,导入完毕后,添加相应代码段void Chinese_Show_one到lcd.c文件中,并在主函数里面调用 Chinese_Show_one函数。

         串口通信协议

实验原理

通过同步异步收发器USART是一个串行通信设备,可以灵活的同外部设备进行全双工数据交换。USART和计算机进行通信,通过串口进行传输到计算机上。串行通信是一个位一个位传输的,发送时把TDR内容转移到发送移位寄存器,然后把移位寄存器每一位发送出去;接收时把接收到的每一位顺序保存在接收移位寄存器内,然后才转移到RDR。当发送使能位TE置1时,启动数据发送,RE位置1,使能USART接收。我们编写一个程序来实现开发板与电脑通信,在开发板上电时通过USART发送一串字符串给电脑,然后开发板进入中断接收等待状态。如果电脑发送数据过来,开发板就会产生中断,我们通过中断服务函数接收数据,并马上把数据返回给电脑。

电脑给串口调试助手发送#1#,液晶屏显示Flash中所有文件名。
电脑给串口调试助手发送#2#,Flash先新建一个文件“xxx.TXT”,然后液晶屏刷新显示Flash中所有文件名;
电脑给串口调试助手发送#3#,Flash删除“xxx.TXT”文件,液晶屏刷新显示Flash中所有文件名。
按键功能

实验原理

按键在没有被按下的时候,GPIO引脚的输入状态为低电平(按键所在的电路不通,引脚接地);当按键按下时,GPIO引脚的输入状态为高电平(按键所在的电路导通,引脚接到电源)。只要我们检测引脚的输入电平,即可判断按键是否被按下。

1.按键引脚宏定义

同样,在编写按键驱动时,也要考虑更改硬件环境的情况。我们把按键检测引脚相关的宏定义到bsp_key.h文件中。

2.按键GPIO初始化函数

利用上面的宏,编写按键的初始化函数

3.检测按键的状态

初始化按键后,就可以通过检测对应引脚的电平来判断按键状态了。在这里定义了一个Key_Scan函数用于扫描按键状态。GPIO引脚的输入电平可通过读取IDR寄存器对应的数据位来感知,而STM32标准库提供了库函数GPIO_Read Input Data Bit来获取位状态,该函数输入GPIO端口及引脚号,返回该引脚的电平状态,高电平返回1,低电平返回0。Key_Scan函数中用GPIO_Read Input Data Bit的返回值与自定义的宏KEY_ON对比,若检测到按键按下,则使用while循环持续检测按键状态,直到按键释放,按键释放后Key_Scan函数返回一个KEY_ON值;若没有检测到按键按下,则函数直接返回KEY_OFF。若按键的硬件没有做消抖处理,则需要在这个Key_Scan函数中做软件滤波,防止波纹抖动引起误触发。

按下按键1,显示所有Flash中文件名,当前行为第一行,再次按键后,当前行逐行下移,下移至最后一行后,再转到第一行;

按下按键2后,显示当前行所指示文件的内容;再次按键返回至显示 Flash中所有文件名的界面;当前行为按键前所指定行。

LED功能

实验原理

定义变量,FATFS是在ff.h文件定义的一个结构体类型,针对的对象是物理设备,包含了物理设备的物理编号、扇区大小等信息,一般我们都需要为每个物理设备定义一个FATFS变量。

FIL也是在ff.h文件定义的一个结构体类型,针对的对象是文件系统内具体的文件,包含了文件很多基本属性。FRESULT也是在ff.h文件定义的一个枚举类型。作为FatFs函数的返回值类型,主要管理FatFs运行中出现的错误。fnum是个32位无符号整型变量,用来记录实际读取或者写入数据的数组。buffer和textFileBuffer分别对应读取和写入数据的缓存区,都是8位无符号整型数组。

首先,初始化RGB彩灯和调试串口,用来指示程序进程。

FatFs的第一步工作就是使用f_mount函数挂载工作区。f_mount函数有3个形参,第一个参数是指向FATFS变量指针,如果赋值为NULL可以取消物理设备挂载。在设备正常挂载后,就可以进行文件读写操作了。使用文件之前,必须使用f_open函数打开文件,不再使用文件必须使用f_close函数关闭文件。成功打开文件之后就可以使用f_write函数和f_read函数对文件进行写操作和读操作。

程序开始运行,RGB彩灯为绿色呼吸灯,读Falsh时红灯亮,写Falsh时蓝灯亮;

触摸功能

实验原理

初始化完引脚,编写SPI的读写程序,发送数据时使用MOSI引脚输出电平,读取数据时从MISO引脚获取状态。再调用XPT2046_ReadAdc_XY函数,检测两个方向的触摸数据。当触摸被按下时,用XPT2046_GET_TouchedPoint函数获取触摸点的坐标,再输出调试信息到串口。显示所有Flash中文件名后,触摸文件名所在行,显示当前行所指示文件的内容。再次触摸,返回。

实验思路
1. 上电后,液晶屏初始显示“欢迎你”

在main函数中,当LED、LCD、USART、按键都初始化后,使用printf语句输出显示“卫生管理学院欢迎你”。

2. 串口通信协议

移植FATFS文件系统,将FATFS文件中的ff.c、diskio.c和cc936.c这三个文件添加到工程。在palette.c文件中写入读取目录内容、读取目录文件中任一文件的内容等功能的函数即可读取文件系统中的内容。

按键功能
在main函数中的while语句里嵌套if语句,如果KEY1打开,就调用指针下移的功能函数,此函数写在palette.c文件中,实现目录指针下移;如果KEY2打开,就调用显示当前选择的文件内容。

LED功能
绿色呼吸灯(1秒转换一次)可直接在main函数中LED初始化后面,同时调用定时器功能定时1秒后绿灯转换状态。

在读写flash的函数中直接添加红灯或蓝灯亮。

触摸功能
在palette.c文件中写入触摸到按钮、显示文件内容的功能函数。


实验实现
实验截图,如下图所示



图一 数据接收区显示

电脑给串口调试助手发送#1#,液晶屏显示Flash中所有文件名。
电脑给串口调试助手发送#2#,Flash先新建一个文件“xxx.TXT”,然后液晶屏刷新显示Flash中所有文件名;
电脑给串口调试助手发送#3#,Flash删除“xxx.TXT”文件,液晶屏刷新显示Flash中所有文件


图二 按键逐行下移功能

按下按键1,显示所有Flash中文件名,当前行为第一行,再次按键后,当前行逐行下移,下移至最后一行后,再转到第一行;

按下按键2后,显示当前行所指示文件的内容;再次按键返回至显示 Flash中所有文件名的界面;当前行为按键前所指定行。程序开始运行,RGB彩灯为绿色呼吸灯,读Falsh时红灯亮,写Falsh时蓝灯亮;



图三 触摸后显示指示文件内容

显示所有Flash中文件名后,触摸文件名所在行,显示当前行所指示文件的内容。再次触摸,返回。

实验总结
在这次实验中,我们通过小组合作实现了串口收发功能,按键功能,LED功能和触摸功能。通过此次实验学习和掌握了嵌入式系统开发过程,理解了相关程序的含义并进行适当修改来达到实现实验结果的目的。


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1886

主题

15541

帖子

11

粉丝