嵌入式系统实验报告(C 语言实验)

【嵌入式系统开发实训】学生实验报告 STM32F4开发板,包含以下资源,STM32F4处理器(ARM Cortex-M4),GPIO口、3个LED灯、1个按键、温度传感器18B20、EEPROM、RJ45以太网、WIFI模组、GPRS/GPS模组、LoRa模组等。1)st-link,下载器:4线(5V, 3. 3V, GND, sWM, 按顺序从3. 3V开始,只要四根),1-3.3V-1;(4)写入姓名(拼音)+学号到EEPROM,并在启动时送到串口显示(分数:10分);(6)通过云端服务器发指令,顺序点亮3个LED灯(分数:10分); 阅读详情

第一部分指导手册实验分析

1 LED 流水灯

这是我们学习C 语言实验的第一个示例,项目的烧录、执行与汇编相同,这里我们简要分析一下我们的项目。

首先我们从main 函数开始,它有两个函数,do_system_initial 和led_initial。do_system_initial 函数首先会调用led_initial 函数初始化led,再通过tester_led 函数控制相应LED 的亮与灭。

1.1 do_system_initial
查阅手册可知,6818 芯片共有160 个GPIO 接口,分为5 组。我们只需通过修改对应寄存器的值,就能完成对他们的初始化。在之前汇编语言编程中,我们就修改了它的复用功能选择寄存器、输出使能寄存器、输出寄存器等。
我们先简要介绍一下LED 灯的初始化。

对LED 灯的初始化方法如下:


在这里,16 端口代表LED1 灯。具体如下:
(1)gpio_set_cfg 函数用于将GPIO_A16 设置为GPIO 功能, 如要作为输出使用,需要将复用功能寄存器设为00, 即第二个参数为0。
(2)gpio_set_pull 函数用于将GPIO_A16 设置为上拉或者下拉。这涉及到CMOS 制作工艺的问题,在此不再详细讨论,只需知道,低电平有效设为下拉,高电平有效设为上拉。
(3)gpio_direction_output 函数通过修改GPIO_OUTENB 和GPIO_OUT寄存器将GPIO_A16 设置为输出,

(4)gpio_set_value 函数用于GPIO_A16 设置为低电平。对其它的LED 灯执行同样的操作,我们便完成了LED 灯的初始化。

1.2 tester_led

函数如下:




通过全局变量index 选择LED 灯,利用led_set_status 函数控制LED 灯的亮灭。led_set_status 函数内部调用gpio_direction_output 函数,将对应的端口设置为1 或0, 从而控制LED 灯。

2 按键控制LED

该实验实现了,按下VOL+,VOL-两个按键来控制LED 灯的亮灭。

2.1 初始化

LED 灯初始化不再赘述。按键初始化方法如下:


首先还是用gpio_set_cfg 函数,将VOL+ 和VOL-端口设为GPIO 模式,gpio_set_pull 将其上拉,gpio_direction_input 将端口方向设定为输入。

2.2 轮询

初始化之后,用while 循环进入忙等待状态,不断调用get_key_event(&keyup,&keydown),当发生按下时,keydown 被修改为1; 当按键按起时,keyup 被修改为1。当检测到修改为1 时,我们便可以调用led_set_status 函数修改LED 灯的亮灭。代码太多,不在此展示了。至此,该实验完成。

3 按键中断
在上一个实验中,忙等待的方式浪费了CPU 的大量时间,效率非常大。一种很好的改进方法是采用中断的方式,节省CPU 开销。(当然缺点是,高效的中断需要硬件实现,增加了电路复杂度) 下面我们介绍一下编程的流程。


3.1 中断初始化

调用s5p6818_irq_init() 函数实现对中断硬件寄存器的初始化。在函数内部,定义中断句柄的func,在指令执行的中断周期,CPU 就会去访问event detect 寄存器,如发现有1, 则执行中断处理程序。
这些是计算机组成原理的知识,只编程的话不需要考虑那么多,所以在此不再赘述,只需知道如要用到中断,先调用一下s5p6818_irq_init() 函数即可。


3.2 中断处理函数

在操作系统中,每一种中断都绑定了一种中断处理函数,存在中断向量表中。类似的,在这里我们需要为端口绑定中断处理函数,request_irq 函数帮我们解决了这个问题。它的函数原型如下:


它做了三件事,如下:
(1) 函数内部调用irq_search(name), 根据参数1 传入的端口名称找到对应的中断请求结构struct irq_t,该结构类似中断向量表,保存了它的中断名称,编号,中断函数,使能,触发条件等。

(2) 将第二个参数,即你自己定义的函数指针,赋值给中断请求结构,将第三个参数,即触发条件(下降沿触发或者上升沿触发) 赋值给irq_t,并将data 赋值给irq_t->handler->data。
(3) 开中断

于是,我们写好中断处理程序,用该函数绑定好端口,便实现了中断功能。具体中断处理函数,不再赘述。

4 串口输入
串口通信是我们的PC 与实验箱通信的一种方式。通过串口线连接,便能够实现PC 和实验箱的交互。
4.1 初始化
s5p4418_serial_initial(void) 函数初始化串口,内部实现了对输入输出串口端口的初始化。
4.2 测试

测试函数如下:



首先调用s5p6818_serial_write_string 函数向串口中输出一条信息。之后,在while 循环中调用s5p6818_serial_read 监听串口的信息,从缓冲区中读取数据,第一个参数是串口号,第二个参数是存放数据的缓冲区,第三个参数是读取的字节数,函数返回1 说明读取成功。之后调用s5p6818_serial_write函数再写回串口。我们的PC 端的Putty 程序会检测到实验箱发来的串口数据,在屏幕上显示出来。

5 移植printf 函数实验
serial_printf 函数内部封装了s5p6818_serial_write_string,并实现了我们C 语言中的printf 函数的功能(即字符串的格式化输出,例如使用占位符等等)。

函数原型如下:


ch 是串口号,fmt 是你要输出的字符串,后面的参数是替代占位符的变量。


第二部分本次实验


6 实验介绍

第一次实验中,我们在裸机下用汇编语言实现了蜂鸣器和跑马灯相结合,知道了裸机启动流程以及如何使用GPIO 端口控制灯光和蜂鸣器。现在,我们要用C++ 来再次实现它,并添加一些额外的功能。


7 实验要求
1:按下Vol+,4 个LED 灯逐个亮灭并伴随蜂鸣器。按下Vol-,LED 灯灭,蜂鸣器关闭。
2:通过print 将“LED Lighting” 和”buzzer working” 输出到串口

3:按下PC 的”p”按键,通过串口输入显示。


8 实验实现
8.1 步骤一:System initial

系统初始化函数执行如下:



可以看到,第15 行之前的代码都是比较固定的代码,包括芯片的初始化,串口的初始化等等,之后便是我们需要用到的LED、蜂鸣器以及按键的初始化。
这三种器件的初始化流程还是和汇编的流程相同,读入功能选择寄存器GPIOAALTFN0 和GPIOAALTFN1,将对应的位设为0,在输出使能端GPIOAOUTENB 将我们需要使用的端口设为1,即使能。之后,我们开始执行我们自己写的函数。


8.2 步骤二:按键控制

为了实现按键控制,显然忙等待是一种解决思路,但从性能上看并不是一个好的选择。利用中断实现似乎是更好的方法。ARM 架构为我们提供了中断的接口,我们只需用函数调用即可。基本流程同之前的按键中断实验,
不再赘述。
但要注意的是,由于该架构不支持中断嵌套,在执行中断时会屏蔽其他中断,所以我们不能在中断函数中写循环函数,只能用一个临界区的变量来控制,主函数中执行循环。因此,Vol+ 的中断函数如下:


Vol-函数类似,不再赘述。

而主函数执行如下代码:


其中调用的函数执行如下:






8.3 步骤三:输出串口

这一步的实现,仍然可以调用封装好的函数。serial_printf 函数执行输出一个字符串到指定串口的功能。它的第一个参数是串口号,第二个参数就是你要输出的字符串了。

8.4 步骤四:PC 按键的串口显示
s5p6818_serial_read(int ch, u8_t * buf, size_t count)函数从ch 串口读入count 个字符,放入缓冲区buf 中。若读取成功,返回1, 否则返回0.

之后我们再利用s5p6818_serial_write(0, &buf, 1); 这个函数,将字符写入串口中,就完成了重定向,也即将PC 的输入重定向到串口中,在显示器上显示出来。

9 实验结果

结果如下所示:


至此,C 语言的实验完成!

嵌入式系统的实验解析:速通9个实验 在学习嵌入式系统的过程中,进行实验是非常重要的,因为它可以帮助我们理解嵌入式系统的工作原理和开发过程。这个实验旨在通过控制嵌入式系统上的LED灯来了解如何配置IO口以及简单的控制输出。这个实验展示了如何使用按键控制LED灯的开关。这个实验展示了如何使用PWM控制LED的亮度。这个实验展示了如何使用按键控制LED灯的开关。这个实验展示了如何使用PWM控制LED的亮度。嵌入式系统的实验解析:速通9个实验。实验4:PWM控制LED亮度。实验2:按键控制LED灯。实验2:按键控制LED灯。实验1:LED灯闪烁。 阅读详情

相关推荐

嵌入式系统实验解析:速通9个实验详细解析

在实验中,通过将蜂鸣器的控制引脚BEEP连接到P2口的第0位,当BEEP为高电平时,蜂鸣器发出声音;本文将详细解析速通嵌入式系统的9个实验,包括相应的源代码。在实验中,通过检测P2口的状态,当按键按下时,P2口的值会变为0xFE,此时将LED灯打开;在实验中,通过将LCD1602的数据引脚连接到P0口,将RS引脚连接到P2口的第0位,将RW引脚连接到P2口的第1。通过循环不断地将LED灯的状态从开启到关闭,再从关闭到开启,以达到闪烁的效果。的值通过P1口控制LED灯的亮灭,从而显示当前的温度值。

CodeSageX的博客 187

嵌入式实验

实验一:LED发光二极管实验 1.实验内容 1.熟悉Zigbee硬件模块相关接口; 2.使用IAR 开发环境设计程序,利用CC2530 的IO口进行LED发光二极管的亮灭操作; 2 .实验环境 1硬件:通用节点一个、USB仿真器、PC机; 2软件:IAR Embedded Workbench for MCS-51; 3) 实验原理 CC2530的IO口相关寄存器。 在CC2530中,我们总共...

qq_43571677的博客 4004

嵌入式跑马灯设计实验报告

本实验中,我们设计并实现了一个基于ARM嵌入式系统的跑马灯。通过使用ARM微处理器和相应的硬件接口电路,我们成功地实现了跑马灯效果。该实验展示了ARM嵌入式系统在控制外部设备方面的应用潜力,为进一步的嵌入式系统设计提供了基础。通过使用ARM微处理器和相应的硬件接口电路,我们成功地实现了一个简单而有效的跑马灯效果。在本实验中,我们将利用ARM嵌入式系统的优势来设计一个跑马灯,以展示其在嵌入式领域的应用。以上是本次实验的详细报告,通过设计和实现跑马灯,我们深入理解了ARM嵌入式系统的工作原理和应用。

CyberSphinx的博客 1905

嵌入式系统 实验四 STM 应用设计

实验四 STM 应用设计 1 实验目的 1). 综合掌握 STM32 的 LED 显示、通用定时器 TIM2、中断控制及串口通讯的原理, 完成数据串口数据写到 PC 机上; 2). 设计一个具体的应用; 3). 掌握基于 STM32 工程开发流程。 2 实验环境 1). 硬件:1 个空气温湿度传感器模块、1 个 ST-Link 调试器、1 根 USB2.0 方口线、1 根 USB3.0 数据线、1 台 PC 机; 2). 软件:Windows 7/XP、MDK 集成开发环境。 3 实验功能 通过使用STM3

weixin_51226852的博客 3153

二进制部署的K8s集群,如何对到期证书更新

一年前搭建的k8s集群,突然不能够正常访问,出现502错误,首先怀疑容器没起来,先对问题进行排查,排查响应的容器有没有正常启动,状态一切正常,访问容器地址也可以正常访问,于是访问node port地址,发现无法正常访问,确定问题出现在svc中。 由于其他的应用、系统也无法提供正常的服务,应该是k8s的问题,非单个应用的原因。查看服务状态,kubectl describe svc xxx,endp...

时光旅行者 3772

【新手流程】1小时解决Anaconda+Cuda+Cudnn+Pytorch+Pycharm深度学习环境配置

一小时速通Anaconda+Cuda+Cudnn+Pytorch+Pycharm环境配置

m0_57190453的博客 4088

keil实验c语言汇编实验一实验报告,嵌入式系统实验—C 语言开发/模数转换(ADC)实验...

实验四:C 语言开发/模数转换(ADC)实验一、实验目的1、掌握C 语言嵌入式开发的基本步骤和原理。2、学习使用C 语言操作外设的方法。3、掌握模数转换器外设的操作原理和编程。二、实验设备1、硬件:PC机一台 、Mini2440 ARM实验板一套 J-link仿真器一套2、软件:WindowsXP 系统,Keil uVision 4.0集成开发环境三、实验内容(1)建立汇编-C程序框架。(2)使用...

weixin_29463881的博客 2631

从ROS2到ROS1:Lightning-LM激光SLAM模块的移植实践与核心代码解析

本文详细解析了将高性能激光SLAM算法Lightning-LM从ROS2移植到ROS1的完整实践过程。针对ROS1与ROS2在节点初始化、话题通信、参数服务器及TF发布等核心API的差异,文章提供了loc_system和slam模块的核心代码改造示例,并给出了适配catkin的CMakeLists.txt与package.xml配置方案,帮助开发者在现有ROS1生态中高效集成先进的SLAM模块。

weixin_29224529的博客 172

南京邮电大学c语言实验报告8,南邮嵌入式系统B实验报告.docx

精品文档南京邮电大学通信学院实验报告实验名称: 基于 ADS 开发环境的程序设计嵌入式 Linux 交叉开发环境的建立嵌入式 Linux 环境下的程序设计多线程程序设计课程名称嵌入式系统B班级学号姓名开课学期2016/2017 学年第 2 学期.精品文档实验一 基于 ADS 开发环境的程序设计一、实验目的1、学习 ADS 开发环境的使用;2、学习和掌握 ADS 环境下的汇编语言及C 语言程序设计...

weixin_34486033的博客 1997

开关电源PCB安规设计避坑指南:从光耦开槽到变压器挡墙,这些细节决定认证成败

本文深入解析开关电源PCB安规设计中的关键细节,包括光耦开槽、变压器挡墙工艺等12个致命要点。通过实际案例和工艺参数表,揭示如何避免认证失败,特别强调爬电距离和电气间隙的精确控制,助力工程师提升产品安全性和认证通过率。

weixin_42548893的博客 205

C++ PCL点云处理实战专栏

工业级点云处理技术学习资源,涵盖电力、建筑、隧道等领域的实战案例。内容分为三阶段:代码原理(算法认知)、动态库(项目验证)和完整代码(定制开发)。

weixin_45196569的博客 1121

c语言icotl获取缓存区大小,王林-嵌入式系统实验报告.docx

王林-嵌入式系统实验报告嵌入式系统实验报告基于PXA270嵌入式实验开发系统姓名:王林学院:电子工程学院班级:2010211204学号号:07邮箱:1561171421@2013年5月21日目录1 前言......................................................................................................

weixin_39632057的博客 113

数字人(对嘴型 Lip-sync)数据集 LRS2 介绍(含网盘链接)

LRS2(Lip Reading Sentences 2)是牛津大学与BBC合作开发的一个大规模唇语识别数据集,专门用于训练和评估数字人唇语同步(Lip-sync)技术。该数据集包含数千条来自BBC电视节目的口语句子,每个句子长度最多100个字符。官方网站为:https://www.robots.ox.ac.uk/~vgg/data/lip_reading/lrs2.html可惜需要认证,不过我已经下载好并存到网盘里了,有需要可适用如下链接下载。(仅供学习,请勿传播)

iioSnail的博客 1687

用c 语言编写命令窗口大小,实验二 C语言程序设计.doc

实验二 C语言程序设计实 验 报 告课程名称 嵌入式系统 实验名称 C语言程序设计姓 名 王闯 学 号 200907040318 专业班级 软件0903实验日期 年 月 日 成绩 指导教师 王彩玲实验目的学会使用Embest IDE编写简单的C语言程序并进行调试;学会编写和使用命令脚本文件;掌握通过memory/register/watch/va...

weixin_39797393的博客 158

Ubuntu22.04如何安装cuDNN8.9.7

本文详细介绍了在Ubuntu 22.04系统上为CUDA 12.2安装适配cuDNN 8.9.7的完整流程,特别针对RTX A6000显卡。主要内容包括:1)选择与CUDA 12.2兼容的cuDNN版本;2)使用deb包方式的安装步骤(添加仓库、导入密钥、安装组件);3)通过MNIST示例验证安装;4)版本锁定、卸载旧版等补充说明;5)性能测试方法。文中强调了版本匹配的重要性,并提供了多卡配置建议,为搭建深度学习开发环境提供完整指导。

2501_93651177的博客 1845

Failed to connect to gitee.com port 443: Time out 连接超时提示【Bug已完美解决-鸿蒙开发】

在进行Sample导入或Git项目Clone时,遇到连接超时问题是一个常见而令人烦扰的情况。连接超时问题通常源于网络限制,可能是由于防火墙、代理设置或其他网络配置导致。因此,首先要关注网络状态,确保网络通畅。如果在网络受限的情况下,代理服务器配置是一个有效的解决方案。通过在Git全局配置中设置代理信息,可以将网络请求通过代理服务器传输,规避一些网络限制。但在使用代理时,需要确保代理服务器的可用性和稳定性,以免引入新的问题。

一键难忘的博客 4562

汇编与c语言互调实验报告,3汇编和C语言的相互调用(实验报告)(9页)-原创力文档...

第3次实验 汇编和C语言的相互调用10082130204 潘云3汇编和C语言的相互调用(实验报告)第 PAGE \* Arabic \* MERGEFORMAT 9 页第 PAGE \* Arabic \* MERGEFORMAT 9 页华东师范大学计算机科学技术系上机实践报告课程名称:嵌入式系统实践年级:08级上机实践成绩:指导教师:金健姓名:潘云创新实践成绩:上机实践名称:汇编和C...

weixin_39850697的博客 302

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

要使实验箱在linux下正常工作,vivi,linux内核,熟悉linux开发环境(实验)

北京电子科技学院(BESTI)实验报告课程: 深入理解计算机系统 班级: 1353班姓名:张若嘉 杨舒雯学号:20135330 20135324成绩: 指导教师:娄嘉鹏 实验日期:2015.11.10实验密级: 预习程度: 实验时间:15:30 –18:00仪器组次: 必修/选修:必修 实验序号:一实验名称: 熟悉linux开发环境实验目的与要求:熟悉Linux 开发环境,学会基于S3C2410 ...

weixin_39690391的博客 180

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Ubuntu系统运行C语言程序

嵌入式系统第一次作业 1.在windows环境下通过虚拟机软件(比如Vmware、VirtualBox)安装Ubuntu 16.04/18.04 Desktop,并设置网络参数保证系统能上网;熟练掌握Ubuntu常用命令,并学习使用vi/vim、或nano、或gedit文本编辑软件。 2.Ubuntu系统一般采用 apt-get 命令进行某个软件的在线查找和安装,默认官方的软件源仓库位于国外,下载速度较慢。请修改系统参数,选择国内镜像软件源仓库,以提高软件安装速度。 3.在Ubuntu系统下用C语言编写一个

MMiL258的博客 2596

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

嵌入式实验报告--共7个实验

嵌入式实验报告--共7个实验 去发现同类优质开源项目:https://gitcode.com/ 此仓库包含了一组关于嵌入式系统学习的实验报告,共涵盖7个实验项目。以下是每个实验的报告简介: 实验一:ADS1.2 开发环境简介 本实验旨在让学习者熟悉ADS1.2集成开发环境,理解其基本使用方法和界面布局。 实验二:超级终端设置及BIOS 功能使用 学习如何配置和使用超级终端,以及如何操作BI...

gitblog_06719的博客 639

MMAction2 集成 ActionCLIP:基于视频-文本匹配的零样本动作识别实战指南

ActionCLIP 是 MMAction2 社区项目(`projects/actionclip`)中的一个多模态动作识别方案,它将动作识别建模为"视频-文本匹配"任务,用标签文本的语义信息替代单纯的类别编号,从而支持零样本(zero-shot)与小样本(few-shot)迁移。本文以该项目的官方 README 为核心,结合仓库中的模型源码、配置文件与推理 API,完整讲解 ActionCLIP

gitblog_09758的博客 1011

DSP实验报告实验6DSP的定时器外中断实验:探索F28335A的定时器与中断奥秘

DSP实验报告实验6DSP的定时器外中断实验:探索F28335A的定时器与中断奥秘 【下载地址】DSP实验报告实验6DSP的定时器外中断实验 本实验报告深入探讨了DSP的定时器与外中断功能,重点介绍了F28335A定时器的操作与控制方法,包括初始化、启动、停止及中断处理。通过详细实验步骤和结果分析,帮助读者掌握C语言中断...

gitblog_06711的博客 724

苏州大学linux课程实验报告,苏州大学实验报告-定时溢出中断实验报告

苏州大学实验报告-定时溢出中断实验报告 本文关键词:实验,报告,溢出,中断,定时苏州大学实验报告-定时溢出中断实验报告 本文简介:苏州大学实验报告院、系年级专业姓名学号课程名称成绩指导教师同组实验者实验日期实验名称:定时溢出中断实验一.实验目的通过该实验,进一步熟悉MT-IDE嵌入式开发系统环境、汇编和C语言以及调试方式;复习串口的相关原理和编程方法;理解用定时器实现计数与定时的工作原理以及实现方...

weixin_36296983的博客 277

汽车转向灯的c语言程序,实验三模拟汽车左右转向灯控制.doc

实验三模拟汽车左右转向灯控制.doc 1单片机实验报告(实验三)姓名张培林志霖学号5128班级13电信MT时间A504地点实验名称模拟汽车左右转向灯控制实验一、实验目的1、熟悉C语言的基本语句、复合语句、条件选择语句和循环语句的使用方法;2、了解顺序、选择和循环三种基本程序结构及结构化程序设计方法。3、强化根据电路图来搭建电路的能力4、帮助学生养成良好实验习惯。二、实验主要应配套仪器设备及套数1....

weixin_40006977的博客 1913

信息安全系统设计基础——实验三实验报告

信息安全系统设计基础——实验三实验报告 北京电子科技学院(BESTI)实 验 报 告 课程:信息安全系统设计基础 姓名:卢肖明 陈俊达 学号:20145215 20145307 实验目的与要求: 1.掌握uC/OSII(uCLinux…)的移植过程 2.掌握C,汇编的混合编程...

345

实验报告(实验三)

北京电子科技学院(BESTI) 实 验 报 告 课程: 密码系统设计基础 班级: 1352班、1353班 姓名:刘浩晨、王玥 学号:20135318、 20135232 成绩: 指导教师:娄嘉鹏 实验日期:2015.11.24 实验密级: 预习程度...

weixin_30914981的博客 255
上一篇: 嵌入式系统实验报告(裸机实验)
下一篇: 嵌入式实验报告(linux实验)
codes_first
博客等级 码龄10年 255粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值