第一篇:嵌入式linux流程
嵌入式Linux系统开发总结2 2011-02-20 12:54 嵌入式系统开发分为软件开发部分和硬件开发部分。嵌入式系统在开发过程一般都采用如图5-3所示的“宿主机/目标板”开发模式,即利用宿主机(PC机)上丰富的软硬件资源及良好的开发环境和调试工具来开发目标板上的软件,然后通过交叉编译环境生成目标代码和可执行文件,通过串口/USB/以太网等方式下载到目标板上,利用交叉调试器在监控程序运行,实时分析,最后,将程序下载固化到目标机上,完成整个开发过程。
“宿主机/目标板”开发模式
在软件设计上,如图5-4所示为结合ARM硬件环境及ADS软件开发环境所设计的嵌入式系统开发流程图。整个开发过程基本包括以下几个步骤。
(1)源代码编写:编写源C/C++及汇编程序;
(2)程序编译:通过专用编译器编译程序;
(3)软件仿真调试:在SDK中仿真软件运行情况;
(4)程序下载:通过JTAG、USB、UART方式下载到目标板上;
(5)软硬件测试、调试:通过JTAG等方式联合调试程序;
(6)下载固化:程序无误,下载到产品上生产。
嵌入式系统软件开发流程
2.2 嵌入式系统开发流程
当前,嵌入式开发已经逐步规范化,在遵循一般工程开发流程的基础上,嵌入式开发有其自身的一些特点,如图5-5所示为嵌入式系统开发的一般流程。主要包括系统需求分析(要求有严格规范的技术要求)、体系结构设计、软硬件及机械系统设计、系统集成、系统测试,最终得到最终产品。
嵌入式开发流程
(1)系统需求分析。确定设计任务和设计目标,并提炼出设计规格说明书,作为正式设计指导和验收的标准。系统的需求一般分功能性需求和非功能性需求两方面。功能性需求是系统的基本功能,如输入输出信号、操作方式等;非功能需求包括系统性能、成本、功耗、体积、重量等因素。
(2)体系结构设计。描述系统如何实现所述的功能和非功能需求,包括对硬件、软件和执行装置的功能划分,以及系统的软件、硬件选型等。一个好的体系结构是设计成功与否的关键。
(3)硬件/软件协同设计。基于体系结构,对系统的软件、硬件进行详细设计。为了缩短产品开发周期,设计往往是并行的。嵌入式系统设计的工作大部分都集中在软件设计上,采用面向对象技术、软件组件技术、模块化设计是现代软件工程经常采用的方法。
(4)系统集成。把系统的软件、硬件和执行装置集成在一起,进行调试,发现并改进单元设计过程中的错误。
(5)系统测试。对设计好的系统进行测试,看其是否满足规格说明书中给定的功能要求。
嵌入式系统开发模式最大特点是软件、硬件综合开发。这是因为嵌入式产品是软硬件的结合体,软件针对硬件开发、固化、不可修改。
如果在一个嵌入式系统中使用Linux技术开发,根据应用需求的不同有不同的配置开发方法,但是,一般情况下都需要经过如下的过程。
(1)建立开发环境,操作系统一般使用Redhat Linux,选择定制安装或全部安装,通过网络下载相应的GCC交叉编译器进行安装(比如,arm-1inux-gcc、arnl-uclibc-gcc),或者安装产品厂家提供的相关交叉编译器;
(2)配置开发主机,配置MINICOM,一般的参数为波特率115200 Baud/s,数据位8位,停止位为1,9,无奇偶校验,软件硬件流控设为无。在Windows下的超级终端的配置也是这样。MINICOM软件的作用是作为调试嵌入式开发板的信息输出的监视器和键盘输入的工具。配置网络主要是配置NFS网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。
(3)建立引导装载程序BOOTLOADER,从网络上下载一些公开源代码的BOOTLOADER,如U.BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根据具体芯片进行移植修改。有些芯片没有内置引导装载程序,比如,三星的ARV17、ARM9系列芯片,这样就需要编写开发板上FLASH的烧写程序,读者可以在网上下载相应的烧写程序,也有Linux下的公开源代码的J-FLASH程序。如果不能烧写自己的开发板,就需要根据自己的具体电路进行源代码修改。这是让系统可以正常运行的第一步。如果用户购买了厂家的仿真器比较容易烧写FLASH,虽然无法了解其中的核心技术,但对于需要迅速开发自己的应用的人来说可以极大提高开发速度。
(4)下载已经移植好的Linux操作系统,如MCLiunx、ARM-Linux、PPC-Linux等,如果有专门针对所使用的CPU移植好的Linux操作系统那是再好不过,下载后再添加特定硬件的驱动程序,然后进行调试修改,对于带MMU的CPU可以使用模块方式调试驱动,而对于MCLiunx这样的系统只能编译内核进行调试。
(5)建立根文件系统,可以从http://www.busy.box.net下载使用BUSYBOX软件进行功能裁减,产生一个最基本的根文件系统,再根据自己的应用需要添加其他的程序。由于默认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放位置位于/etc目录下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile等,自动挂装文件系统的配置文件/etc/fstab,具体情况会随系统不同而不同。根文件系统在嵌入式系统中一般设为只读,需要使用mkcramfs genromfs等工具产生烧写映像文件。
(6)建立应用程序的FLASH磁盘分区,一般使用JFFS2或YAFFS文件系统,这需要在内核中提供这些文件系统的驱动,有的系统使用一个线性FLASH(NOR型)512KB~32MB,有的系统使用非线性FLASH(NAND型)8MB~512MB,有的两个同时使用,需要根据应用规划FLASH的分区方案。
(7)开发应用程序,可以放入根文件系统中,也可以放入YAFFS、JFFS2文件系统中,有的应用不使用根文件系统,直接将应用程序和内核设计在一起,这有点类似于μC/OS-II的方式。
(8)烧写内核、根文件系统和应用程序,发布产品。
看完上面文章,想必广大读者都对嵌入式系统开发的模式与流程有了一定的了解,希望以后能对嵌入式linux系统开发有进一步研究。
第二篇:嵌入式linu学习心得
嵌入式Linux学习心得
1、Linux命令
ls:查看目录-l以列表方式查看;ls –l 与ll的功能一样 pwd: 查看当前的目录
cd:改变当前操作目录cd /直接跳到根目录 cd..回到上一级目录 cat: 打印显示当前文件的内容信息
mkdir:创建目录
fdisk: 查看硬盘分区信息,-l以列表方式查看
->代表是链接文件,类似window下的快捷方式。
cp: 复制命令,例子cp 文件名 /home/dir/
mv: 移动或改名,如mv sonf.confsonf.txt(改名)移动:mv sonf.conf / rm:删除命令,如rm –f test.c;如删除目录rm –fr d
man:查看某个命令的帮助,man 命令
2、各系统目录的功能
drw—r—w--:d代表是目录,drw代表当前用户的权限,r代表组用户的权限,w代表其它用户的权限。x代表有执行权限。
/boot/gruff.conf: 启动引导程序
/dev:brw—rw--:b代表是块设备。Linux设备有三种,块设备(b开头)、字符设备(c开头)、网络设备。had代表第一个硬盘,hdb代表第二个硬盘。Hdb2代表第二块硬盘的第二个分区。3,67代表主设备为3,从设备为67./etc:存放的是系统的配置文件。Inittab文件存放不同启动方式下必须启动的进程。Inittab文件中有6个启动level,wait中对应着6个level的目录,respawn代表当一个进程被意外终止了,但会自动启动的进程,如守护进程。rc.d目录中存放了一个rc.sysinit文件,里面存放系统初始化配置信息。/etc还有一个vsftpd里面存放tcp、ftp的配置。
/home : 用户目录,存放用户的文件,/lib:存放库文件,后缀为so的文件代表动态链接库。
/lost+found:系统意外终止,存放一些可以找回的文件。
/mnt:挂载外部设备,如挂载光驱:mount –t /dev/cdrom/mnt/cdrom,如
果在双系统中,要查看windows中D盘的文件,首先应该将D盘的文件映射过来,mount –t /dev/hda2/mnt/windows/d
/opt:用户安装的应用程序
/proc:是系统运行的映射,比较重要。里面的文件数字代表进程号。每个进程号目录下包含进程的基本信息。还有其他信息,如cpuinfo等,内核支持的文件系统filesystem等。系统支持的中断interrupts,iomen代表内存分配情况。ioport存放IO端口号。还有分区信息,modole信息,状态信息,版本信息
对于Linux的设备驱动程序,有两种加载模式,一种是直接加载进linux内核,一种是以模块的方式加载到内核。
/sbin: 系统管理的一些工具。如poweroff关机工具。
/usr: 安装系统时很多文件放在此目录下面,包含一些更新等,include包含的头文件,lib 是Linux的库文件,src包含Linux2.4的内核源码
/var:存放是临时变量
3、
第三篇:嵌入式Linux开发流程
嵌入式Linux开发流程
嵌入式 linux开发,根据应用需求的不同有不同的配置开发方法,但是一般都经过以下过程:
建立开发环境。操作系统一般 REDHAT-LINUX,版本 7 到9 都可以,选择定制安装或全部安装,通过网络下载相应的 GCC 交叉编译器进行安装(比如 arm-linux-gcc、arm-uclibc-gcc),或者安装产品厂家提供的交叉编译器。
配置开发主机。配置 MINICOM,一般参数为115200,数据位 8位,停止位 1,无奇偶校验,软硬件控制流设为无。在 WINDOWS 下的超级终端的配置也是这样。MINICOM软件的作用是作为调试嵌入式开发板信息输出的监视器和键盘输入的工具;配置网络,主要是配置 NFS 网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。
建立引导装载程序BOOTLOADER,从网络上下载一些公开源代码的BOOTLOADER,如 U-BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根据自己具体芯片进行移植修改。有些芯片没有内置引导装载程序,比如三星的 ARM7、ARM9 系列芯片,这样就需要编写烧写开发板上 flash 的烧写程序,网络上有免费下载的 WINDOWS 下通过JTAG并口简易仿真器烧写 ARM 外围 flash 芯片的程序。也有 LINUX 下公开源代码的J-FLASH 程序。如果不能烧写自己的开发板,就需要根据自己的具体电路进行源代码修改。这是让系统可以正常运行的第一步。如果你购买了厂商提供的仿真器,当然比较容易烧写flash了,但是其中的核心技术是无法了解的。这对于需要迅速开发应用的人来说可以极大地提高开发速度。
下载别人已经移植好的 LINUX 操作系统,如 UCLINUX、ARM-LINUX、PPC-LINUX等,如果有专门针对你所使用的CPU移植好的 LINUX 操作系统那是再好不过,下载后再添加自己的特定硬件的驱动程序,进行调试修改,对于带 MMU的 CPU可以使用模块方式调试驱动,对于 UCLINUX 这样的系统好像只能编译进内核进行调试。
建立根文件系统,从下载使用 BUSYBOX 软件进行功能裁减,产生一个最基本的根文件系统,再根据自己的应用需要添加其他的程序。默认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放位置位于 /etc目录下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile 等,自动挂装文件系统的配置文件/etc/fstab,具体情况会随系统不同而不同。根文件系统在嵌入式系统中一般设为只读,需要使用 mkcramfs、genromfs 等工具产生烧写映象文件。
建立应用程序的 flash 磁盘分区,一般使用JFFS2 或 YAFFS 文件系统,这需要在内核中提供这些文件系统的驱动,有的系统使用一个线性 flash(NOR 型)512K-32M,有的系统使用非线性 flash(NAND型)8-512M,有的两个同时使用,需要根据应用规划 flash的分区方案。
开发应用程序,可以下载到根文件系统中,也可以放入 YAFFS、JFFS2 文件系统中,有的应用程序不使用根文件系统,而是直接将应用程序和内核设计在一起,这有点类似于UCOS-II 的方式。
烧写内核、根文件系统、应用程序。
发布产品。
第四篇:linux嵌入式学习流程及ARM学习大纲
课程大纲
● 第一阶段 嵌入式Linux开发基础
◆ 开学典礼、职业素养:自我介绍;
◆ Linux基础知识和系统安装;
◆ Linux常用命令,文本编辑器vi,shell脚本编程;
◆ Linux开发环境基础:Gcc,Ddb,Maker和Makefile;
◆ 软件版本管理;
◆ 嵌入式软件开发环境搭建与使用
● 第二阶段 嵌入式C语言编程
◆ 复习C语言基础知识,强化指针和数组概念,学习数据结构和一些基本算法; ◆ 全面了解C语言标准库提供的功能;
◆ 深入介绍C程序在编译时与运行时的基本原理;
◆ GNU C的拓展知识;
◆ 从宏观和微观的角度讨论高质量C语言编程;
◆ 详细介绍嵌入式C的特性及应用;
◆ 职业素养:推销自己。
● 第三阶段 Linux系统程序设计
◆ 深入学习操作系统基础知识;
◆ Linux系统程序设计:系统编程环境、常用调试工具,创建中止进程,进程间通讯;
◆ Linux网络编程;
◆ 职业素养:礼仪沟通、语言沟通;
● 第四阶段 ARM原理与应用
◆ 嵌入式系统基础:嵌入式系统 定义、发展,嵌入式实时操作系统; ◆ ARM的基本概念及体系结构;
◆ ARM的编程模型;
◆ ADS集成开发环境;
◆ ARM汇编指令集;
◆ 嵌入式系统及接口设计;
◆ ARM协处理器。
● 第五阶段 u-boot和Linux移植
◆ Linux内核基础;
◆ Kernel的定制和编译;
◆ 内核移植;
◆ 内核调试。
欢迎下载该文档
● 第六阶段 嵌入式Linux驱动开发
◆ 驱动程序概述;
◆ 字符设备驱动程序开发; ◆ 设备驱动总的重要概念和机制;
◆ 块设备驱动程序开发; ◆ 块设备驱动程序开发实例; ◆ 网络设备驱动程序开发及实例; ◆ 音频和显示设备驱动程序开发; ◆ 素质培训:如何写简历。
● 第七阶段 项目实践
◆ 学习工程项目开发流程:项目需求、项目设计、程序编码、程序调试与测试、版本发布;
◆ 以团队方式分解项目,协作开发、各学员扮演不同角色; ◆ 项目开发:个人移动终端实时通讯图形管理系统; ◆ 素质培训:面试训练、职业前引导。
Arm学习
课程大纲
◆ 帮助学员了解ARM体系结构及工作原理,掌握
第一天
ARM指令集,学会操作ARM处理器基本方法。◆ 课程实验:
◆为提高系统的综合性能,“ARM和Thumb交互”是工程师在实际编程常用的一种方式。通过本天课程的学习,学员可以了解Thumb指令的特点,掌握
第二天
ARM和Thumb指令交互方法。“异常”作为处理器的一种特殊工作方式在系统工作中扮演着重要的角色,本期课程也将帮助学员掌握ARM平台异常产生的过程和处理方法。◆ 课程实验:
◆虽然汇编指令可以完成我们所需要的所有功能,但相对C语言来说,汇编语言存在编写复杂、可读
第三天
性差等缺点,所以在实际的项目开发中,工程师通常会使用C或C++等高级语言来编写主程序部分。通过第三天课程的学习,学员可以掌握汇编、c、欢迎下载该文档
c++混合编程的方法,完成对目标平台的软件编程,更好的熟悉嵌入式软件的开发流程。◆ 课程实验:
◆在学习完了理论知识后,该进入实践环节了。嵌入式编程最终目标还是对接口设备的操作。通过第第四天
四天课程的学习,学员可以掌握基于ARM的嵌入式硬件平台接口设计以及各种常用接口的开发; ◆ 课程实验:
◆单个接口的操作最终还是要为一个综合的软件项目服务,bootloader在嵌入式操作系统中占用重要地位,其编写、移植是一项常见而复杂的工作。通过第五天课程的学习,学员即能够通过这个综合第五天的软件项目将前面的主要内容融会贯通,还可以掌握 bootloader原理及开发过程,掌握和bootloader相关的接口开发,了解嵌入式操作系统的结构及启动流程等。◆ 课程实验:
三个月
◆ 企业项目实践(自行操作,专家答疑)(三个月)
欢迎下载该文档
第五篇:嵌入式实验报告
目录
实验一 跑马灯实验.........................................................................1 实验二 按键输入实验.....................................................................3 实验三 串口实验.............................................................................5 实验四 外部中断实验.....................................................................8 实验五 独立看门狗实验................................................................11 实验七 定时器中断实验................................................................13 实验十三 ADC实验........................................................................15 实验十五 DMA实验........................................................................17 实验十六 I2C实验........................................................................21 实验十七 SPI实验........................................................................24 实验二十一 红外遥控实验............................................................27 实验二十二 DS18B20实验.............................................................30
实验一 跑马灯实验
一.实验简介
我的第一个实验,跑马灯实验。
二.实验目的
掌握STM32开发环境,掌握从无到有的构建工程。
三.实验内容
熟悉MDK KEIL开发环境,构建基于固件库的工程,编写代码实现跑马灯工程。通过ISP下载代码到实验板,查看运行结果。使用JLINK下载代码到目标板,查看运行结果,使用JLINK在线调试。
四.实验设备
硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。
五.实验步骤
1.熟悉MDK KEIL开发环境 2.熟悉串口编程软件ISP 3.查看固件库结构和文件
4.建立工程目录,复制库文件 5.建立和配置工程 6.编写代码 7.编译代码
8.使用ISP下载到实验板 9.测试运行结果
10.使用JLINK下载到实验板 11.单步调试
12.记录实验过程,撰写实验报告
六.实验结果及测试
源代码:
两个灯LED0与LED1实现交替闪烁的类跑马灯效果,每300ms闪烁一次。
七.实验总结
通过本次次实验我了解了STM32开发板的基本使用,初次接触这个开发板和MDK KEILC软件,对软件操作不太了解,通过这次实验了解并熟练地使用MDK KEIL软件,用这个软件来编程和完成一些功能的实现。作为 STM32 的入门第一个例子,详细介绍了STM32 的IO口操作,同时巩固了前面的学习,并进一步介绍了MDK的软件仿真功能。
实验二 按键输入实验
一.实验简介
在实验一的基础上,使用按键控制流水灯速度,及使用按键控制流水灯流水方向。
二.实验目的
熟练使用库函数操作GPIO,掌握中断配置和中断服务程序编写方法,掌握通过全局变量在中断服务程序和主程序间通信的方法。
三.实验内容
实现初始化GPIO,并配置中断,在中断服务程序中通过修改全局变量,达到控制流水灯速度及方向。
使用JLINK下载代码到目标板,查看运行结果,使用JLINK在线调试。
四.实验设备
硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK、示波器。软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。
五.实验步骤
1在实验1代码的基础上,编写中断初始化代码
2在主程序中声明全局变量,用于和中断服务程序通信,编写完成主程序 3编写中断服务程序
4编译代码,使用JLINK下载到实验板 5.单步调试
6记录实验过程,撰写实验报告
六.实验结果及测试
源代码:
我们将通过MiniSTM32 板上载有的3个按钮,来控制板上的2个LED,其中KEY0控制LED0,按一次亮,再按一次,就灭。KEY1 控制LED1,效果同KEY0。KEY_2(KEY_UP),同时控制LED0 和LED1,按一次,他们的状态就翻转一次。
七.实验总结
通过本次实验,我学会了如何使用STM32 的IO 口作为输入用。TM32 的IO 口做输入使用的时候,是通过读取IDR 的内容来读取IO 口的状态的。这里需要注意的是 KEY0 和KEY1 是低电平有效的,而WK_UP 是高电平有效的,而且要确认WK_UP 按钮与DS18B20 的连接是否已经断开,要先断开,否则DS18B20 会干扰WK_UP按键!并且KEY0 和KEY1 连接在与JTAG 相关的IO 口上,所以在软件编写的时候要先禁用JTAG 功能,才能把这两个IO 口当成普通IO 口使用。
实验三 串口实验
一.实验简介
编写代码实现串口发送和接收,将通过串口发送来的数据回送回去。
二.实验目的
掌握STM32基本串口编程,进一步学习中断处理。
三.实验内容
编写主程序,初始化串口1,设置波特率为9600,无校验,数据位8位,停止位1位。编写中断服务程序代码实现将发送过来的数据回送。
四.实验设备
硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK、示波器。
软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。
五.实验步骤
1编写串口初始化代码
2编写中断服务程序代码
3编译代码,使用JLINK或ISP下载到实验板 4记录实验过程,撰写实验报告
六.实验结果及测试
源代码:
把代码下载到 MiniSTM32 开发板,可以看到板子上的LED0 开始闪烁,说明程序已经在跑了。接着我们打开串口调试助手,看到如下信息:
证明串口数据发送没问题。接着,我们在发送区输入上面的文字,输入完后按回车键。然后单击发送,可以得到如下结果:
七.实验总结
通过本次实验,我进一步了解了串口的使用,学会了通过串口发送和接收数据,将通过串口发送来的数据回送回去。该实验的硬件配置不同于前两个实验,串口 1 与USB 串口默认是分开的,并没有在PCB上连接在一起,需要通过跳线帽来连接一下。这里我们把P4 的RXD 和TXD 用跳线帽与P3 的PA9 和PA10 连接起来。
实验四 外部中断实验
一.实验简介
STM32 的 IO 口在本章第一节有详细介绍,而外部中断在第二章也有详细的阐述。这里我们将介绍如何将这两者结合起来,实现外部中断输入。
二.实验目的
进一步掌握串口编程,进一步学习外部中断编程,提高编程能力。
三.实验内容
初始化IO口的输入,开启复用时钟,设置IO与中断的映射关系,从而开启与IO口相对应的线上中断事件,设置触发条件。配置中断分组(NVIC),并使能中断,编写中断服务函数。
四.实验设备
硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK、示波器。
软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。
五.实验步骤
1.2.3.4.编写中断服务程序代码 使用ISP下载到实验板 测试运行结果
记录实验过程,撰写实验报告
六.实验结果及测试
源代码:
打开串口助手。
七.实验总结
首先需要将IO设置为中断输入口: 1)初始化 IO 口为输入。
2)开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。
3)开启与该 IO口相对的线上中断/事件,设置触发条件。
4)配置中断分组(NVIC),并使能中断。
5)编写中断服务函数。
这一节,使用的是中断来检测按键,通过 WK_UP 按键实现按一次 LED0 和 LED 1 同时翻转,按 KEY0 翻转 LED0,按 KEY1 翻转 LED1。
试验中外部中断函数不能进入的原因分析 : 1)GPIO或者AFIO的时钟没有开启。2)GPIO和配置的中断线路不匹配。3)中断触发方式和实际不相符合。
4)中断处理函数用库函数时,写错,经常可能出现数字和字母之间没有下划线。5)外部中断是沿触发,有可能不能检测到沿,比如 中断线是低电平(浮空输入),触发是下降沿触发,可能会出现一直是低电平,高电平的时候是一样的情况,电平持续为高电平。
6)没有用软件中断来触发外部中断,调用函数EXTI_GenerateSWInterrupt;,因为软件中断先于边沿中断处理。
实验五 独立看门狗实验
一. 实验简介
独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。
二.实验目的
通过编程,编写一个独立看门狗驱动程序
三.实验内容
启动 STM32 的独立看门狗,从而使能看门狗,在程序里面必须间隔一定时间喂狗,否则将导致程序复位。利用这一点,我们本章将通过一个 LED 灯来指示程序是否重启,来验证 STM32 的独立看门狗。
四.实验设备
硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。
软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。
五.实验步骤
1.2.3.4.参考教材独立看门狗部分,编写独立看门狗驱动程序。建立和配置工程 编写代码
使用ISP下载到实验板
记录实验过程,撰写实验报告
六.实验结果及测试
源代码:
在配置看门狗后,看到LED0 不停的闪烁,如果WK_UP 按键按下,就喂狗,只要WK_UP 不停的按,看门狗就一直不会产生复位,保持LED0 的常亮,一旦超过看门狗定溢出时间(Tout)还没按,那么将会导致程序重启,这将导致LED0 熄灭一次。
七.实验总结
通过本次实验,我掌握了启动独立看门狗的步骤: 1)向 IWDG_KR 写入 0X5555。2)向 IWDG_KR 写入 0XAAAA。3)向 IWDG_KR 写入 0XCCCC。
通过上面 3个步骤,启动 STM32 的看门狗,从而使能看门狗,在程序里面就必须间隔一定时间喂狗,否则将导致程序复位。利用这一点,本章通过一个LED 灯来指示程序是否重启,来验证 STM32 的独立看门狗。在配置看门狗后,LED0 将常亮,如果 WK_UP 按键按下,就喂狗,只要 WK_UP 不停的按,看门狗就一直不会产生复位,保持 LED 0 的常亮,一旦超过看门狗溢出时间(Tout)还没按,那么将会导致程序重启,这将导致 LED 0 熄灭一次。
实验七 定时器中断实验
一. 实验简介
STM32 的定时器是一个通过可编程预分频器(PSC)驱动的 16 位自动装载计数器(CNT)构成。STM32 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等。使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几微秒到几毫秒间调整。STM32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。
二.实验目的
熟练掌握定时器中断,学会对定时器中断的编程操作。
三.实验内容
使用定时器产生中断,然后在中断服务函数里面翻转 LED1 上的电平,来指示定时器中断的产生,修改中断时间。
四.实验设备
硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。
软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。
五.实验步骤
1.参考教材定时器中断部分,编写定时器中断的驱动程序。2.编写主程序
3.编译代码,使用JLINK或ISP下载到实验板 4.记录实验过程,撰写实验报告
六.实验结果及测试
源代码:
七.实验总结
通过本次实验,认识到时间中断来控制LED灯的闪烁,同时也可以将时间中断应用到控制其他的程序块。
以TIME3为例产生中断的步骤为 1)TIM3 时钟使能。
2)设置 TIM3_ARR 和 TIM3_PSC 的值。
3)设置 TIM3_DIER 允许更新中断。
4)允许 TIM3 工作。
5)TIM3 中断分组设置。6)编写中断服务函数。
在中断产生后,通过状态寄存器的值来判断此次产生的中断属于什么类型。然后执行相关的操作,我们这里使用的是更新(溢出)中断,所以在状态寄存器 SR 的最低位。在处理完中断之后应该向 TIM3_SR 的最低位写 0,来清除该中断标志。
实验十三 ADC实验
一.实验简介
通过DAC将STM32系统的数字量转换为模拟量。使用ADC将模拟量转换为数字量。
二.实验目的
掌握DAC和ADC编程。
三.实验内容
编写代码实现简单的DAC单次发送
编写代码实现ADC采集DAC发送的数据,并发送到串口
四.实验设备
硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。
软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。
五.实验步骤
1编写主程序
2编译代码,使用JLINK或ISP下载到实验板,使用串口调试助手观察数据 3记录实验过程,撰写实验报告
六.实验结果及测试
源代码:
七.实验总结
本节将利用 STM32的 ADC1 通道 0 来采样外部电压值,并在串口调试助手中显示出来。步骤如下:
1)开启 PA 口时钟,设置 PA0 为模拟输入。
2)使能 ADC1 时钟,并设置分频因子。
3)设置 ADC1 的工作模式。
4)设置 ADC1 规则序列的相关信息。
5)开启 AD 转换器,并校准。
6)读取 ADC 值。
在上面的校准完成之后,ADC 就算准备好了。接下来我们要做的就是设置规则序列 0 里面的通道,然后启动 ADC 转换。在转换结束后,读取 ADC1_DR 里面的值。
通过以上几个步骤的设置,可以正常的使用 STM32 的 ADC1 来执行 AD 转换操作。
通过本次实验的学习,我们了解了STM32 ADC的使用,但这仅仅是STM32强大的ADC 功能的一小点应用。STM32 的ADC 在很多地方都可以用到,其ADC 的DMA 功能是很不错的,实验十五 DMA实验
一. 实验简介
直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。
二.实验目的
熟练掌握DMA编程,学会对EPC02的读写操作,学习双缓冲兵乓操作,理解互斥资源。提高编程能力。
三.实验内容
利用外部按键KEY0 来控制DMA 的传送,每按一次KEY0,DMA 就传送一次数据
到USART1,然后在串口调试助手观察进度等信息。LED0 还是用来做为程序运行的指示灯。
这里我们使用到的硬件资源如下: 1)按键KEY0。2)指示灯LED0。
3)使用串口调试助手观察数据
四.实验设备
硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。
软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、网络调试助手。
五.实验步骤
1编写主程序
2编译代码,使用JLINK或ISP下载到实验板,使用串口调试助手观察数据 3记录实验过程,撰写实验报告
六.实验结果及测试
源代码:
伴随 LED0 的不停闪烁,提示程序在运行。我们打开串口调试助手,然后按KEY0,可以看到串口显示如下内容:
七.实验总结
本节利用 STM32 的 DMA 来实现串口数据传送,DMA通道的配置需要: 1)设置外设地址。
2)设置存储器地址。
3)设置传输数据量。
4)设置通道 4 的配置信息。
5)使能 DMA1 通道 4,启动传输。
通过以上 5 步设置,我们就可以启动一次 USART1 的 DMA 传输了。
DMA控制器对DMA请求判别优先级及屏蔽,向总线裁决逻辑提出总线请求。当CPU执行完当前总线周期即可释放总线控制权。此时,总线裁决逻辑输出总线应答,表示DMA已经响应,通过DMA控制器通知I/O接口开始DMA传输。
DMA控制器获得总线控制权后,CPU即刻挂起或只执行内部操作,由DMA控制器输出读写命令,直接控制RAM与I/O接口进行DMA传输。
在DMA控制器的控制下,在存储器和外部设备之间直接进行数据传送,在传送过中不需要中央处理器的参与。开始时需提供要传送的数据的起始位置和数据长度。
当完成规定的成批数据传送后,DMA控制器即释放总线控制权,并向I/O接口发出结束信号。当I/O接口收到结束信号后,一方面停 止I/O设备的工作,另一方面向CPU提出中断请求,使CPU从不介入的状态解脱,并执行一段检查本次DMA传输操作正确性的代码。最后,带着本次操作结果及状态继续执行原来的程序。
由此可见,DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,使CPU的效率大为提高。
实验十六 I2C实验
一.实验简介
编程实现对使用I2C接口的EPC02芯片进行写和读操作。
二.实验目的
熟练掌握I2C编程,学会对EPC02的读写操作。
三.实验内容
编写I2C驱动程序,使用驱动程序初始化EPC02,判断设备正确性。
写256个0x5A到EPC02,读出并发送给串口,通过串口调试助手判别是否读到的都是0x5A.四.实验设备
硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。
软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。
五.实验步骤
1参考教材I2C部分,编写I2C驱动程序。2编写主程序
3编译代码,使用JLINK或ISP下载到实验板 4记录实验过程,撰写实验报告
六.实验结果及测试
伴随 LED0 的不停闪烁,提示程序在运行。我们先按下KEY0,可以看到如下所示的内容,证明数据已经被写入到24C02了。
接着我们按KEY2,可以看我们刚刚写入的数据被显示出来了,如下图所示:
源代码:
七.实验总结
IIC是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。
IIC总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。程序在开机的时候会检测 24C02 是否存在,如果不存在则会在TFTLCD 模块上显示错误信息,同时LED0 慢闪。大家可以通过跳线帽把PC11 和PC12 短接就可以看到报错了。通过本次实验,我掌握了如何使用IIC写入与读出数据,学习了编写I2C驱动程序,使用驱动程序初始化EPC02,判断设备正确性,以及如何在助手上显示。
实验十七 SPI实验
一.实验简介
编程实现对SPI接口的W25Q64进行读写操作。
二.实验目的
熟练掌握SPI编程,学会对的W25Q64读写操作。
三.实验内容
1.2.3.4.5.编写SPI驱动程序 初始化SPI接口
读取SPIFLASH的ID,如果正确继续,否则报错
向SPIFALSH地址0x12AB00开始写一串字符,再读出比较判断是否与写入的一致 向SPIFALSH地址0x12AB00开始写连续256个字节的0x5A,然后读出并发送给串口,通过串口调试助手判别是否读到的都是0x5A.四.实验设备
硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。
软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。
五.实验步骤
1参考SPI及SPI FLASH部分,编写SPI及SPI FLASH驱动程序(可参考书上代码)。2编写主程序
3编译代码,使用JLINK或ISP下载到实验板 4记录实验过程,撰写实验报告
六.实验结果及测试
源代码:
伴随 LED0 的不停闪烁,提示程序在运行。我们先按下KEY0,可以看到如图13.17.4.2 所示的内容,证明数据已经被写入到W25X16了。
接着我们按KEY2,可以看我们刚刚写入的数据被显示出来了,如下图所示:
七.实验总结
SPI 接口主要应用在EEPROM,FLASH,实时时钟,AD 转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为 PCB 的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,STM32 也有 SPI 接口。
SPI 的设置步骤:
1)配置相关引脚的复用功能,使能 SPI时钟。
2)设置 SPI 工作模式。
3)使能 SPI。
程序在开机的时候会检测 W25X16 是否存在,如果不存在则会在TFTLCD 模块上显示错误信息,同时LED0 慢闪。大家可以通过跳线帽把PA5 和PA6 短接就可以看到报错了。通过本实验,我掌握了编写SPI程序写入和读取FLASH的方法,掌握了对学会对的W25Q64读写操作。对STM32开发板有了进一步的了解。
实验二十一 红外遥控实验
一. 实验简介
编程实现通过在 ALIENTEK MiniSTM32 开发板上实现红外遥控器的控制。
二.实验目的
掌握编程实现红外遥控控制开发板的方法。
三.实验内容
1.编写红外遥控驱动程序 2.编写红外遥控程序代码 3.使用红外遥控控制开发板
四.实验设备
硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。
五.实验步骤
4.编写红外遥控驱动程序 5.编写红外遥控程序代码
6.编译代码,使用JLINK或ISP下载到实验板 7.记录实验过程,撰写实验报告
六.实验结果及测试
源代码:
使用串口调试助手观察数据
七.实验总结
红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机系统中。
通过本节实验,我学习到了如何编程使用红外遥控控制,在本程序中只是简单地输出一个数值,在以后的应用中可以实现更强大的功能,比如用红外远程输入控制开发板进行一些操作。对STM32有了进一步的认识。
实验二十二 DS18B20实验
一. 实验简介
一. 在ALIENTEK MiniSTM32 开发板上,通过 DS18B20 来读取环境温度值。
二.实验目的
巩固SPI编程。掌握使用感应器获取环境温度的方法。
三.实验内容
1.复位脉冲和应答脉冲
2.写时序
3.读时序
四.实验设备
硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。
五.实验步骤
1.2.3.4.参考教材DS18B20编程部分,编写DS18B20驱动程序 编写主程序
编译代码,使用JLINK或ISP下载到实验板 记录实验过程,撰写实验报告
六.实验结果及测试
源代码:
使用串口调试助手观察数据:
七.实验总结
DS18B20 是由 DALLAS 半导体公司推出的一种的“一线总线”接口的温度传感器。与传统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的数字化温度传感器。
通过本次实验,我认识到STM32的强大,在开发板上可以添加其他感应器从而实现更强大的功能。添加了DS18B20后的开发板可以感应外界的温度,通过公式计算显示出来。