1、山东大学嵌入式系统课程报告姓 名名:学 号号:学 院院:专 业业:年 级2015 年 11 月 25 日目录目录 .2课程概述 .21. 官方定义 .22. 个人理解 .3项目经历 .4课程实验 .4实验目的 .4实验过程 .4扩展实验 .6自动刹车灯 .6附录 .8智能插座项目代码 .8课程概述1.官方定义IEEE 对嵌入式系统的定义:“用于控制、监视或者辅助操作机器和设备的装置” 。 嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在 ROM 中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统
2、,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。 从应用对象上加以定义,嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。2.个人理解虽然听说嵌入式这个词挺早的,大一刚开学就听学长学姐提到过,但是真正开始做一个嵌入式的项目的时候我基本上是带着纯软件的眼光去看的,感觉除了需要考虑这个程序所要运行的机器的性能,比如最基本的延迟,之外,好像也没什么特别的。我第一个项目是用 GSM 模块和 51 单片机做的手机
3、控制电源,大概就是下面这个模型。使用 51 作为命令发出者和状态判决者对两个模块进行控制。该项目程序源码见附录。当时跟着厂家的示例程序和注释猜变量的作用和运行流程,加上代码长度有限制,最后勉强算是完成了功能。中间出现过很多奇怪的问题,有一些是硬件本身的问题,比如天线接触不好,必须固定在一个角度才能初始化成功,还有一些特别莫名其妙的问题,有时候程序运行就是老是跳过某一句话,实际调试的时候就特别崩溃,有时候考虑数据还。当时也学了 GUI 编程,然后就特别感慨,给我 3 天我能完成一个小软件的大部分进度,但是 3 天时间我连一个硬件问题都找不出来。后来大二下学了微机原理,然后才明白整个流程是怎么样的
4、,尤其是当时讲中断的时候,我觉得就像发现新大陆一样,当时学期末做的那四个实验我觉得都特别有意义,我把 AD 转换传送到数码管上连续显示的时候,老师告诉我可以利用视觉残留进行即时的连续变化,调好延时的时间间隙就可以了,做出来确实是这样的。我觉得嵌入式编程的过程式思维还是很符合一般人的思维习惯的,只不过需要考虑实际运行环境,条件不那么宽松。项目经历2014 哈工大山大联赛校级二等奖2015 基于 GSM 模块的智能插座课程实验实验目的实现使用 SysTick 以及三个按键控制三只 LED 灯的闪烁效果:1.程序启动,没有按键按下时,三只灯依靠 SysTick 中断有规律亮灭。2.当三个按键中其中一
5、个按下时其余两只灯全部熄灭,只有对应的 LED 灯长亮。实验过程在 main 初始化的时候加一句定时就能启动滴答时钟,系统每过 1ms 即进入一次 stm32f10x_it.c 中的 SysTick_Handler()函数。在中断向量表中查找到 SysTick_Handler(),对它进行修改。即完成了无按键输入时LED 的有规律亮灭。下面实现按键响应。在 InterruptConfig()中可以找到按键响应的中断号,在侧栏的 start up 中可以找到中断向量表,从中找到本函数中用到的 GPIO_KEY1_EXTI_IRQn 即 EXTI9_5_IRQn,于是我们找到了关键的中断处理函数,
6、将它按照要求进行修改。即完成功能 2。while( SysTick_Configuration( 7200000 ) != 0 ) ; /* brief This function handles SysTick Handler.* param None* retval None*/void SysTick_Handler(void)Led_Turn_on_all();Delay(3000000);Led_Turn_off_all();Delay(3000000); /* Function Name : EXTI9_5_IRQHandler* Description : This functi
7、on handles External lines 9 to 5 interrupt request.* Input : None* Output : None* Return : None*/void EXTI9_5_IRQHandler(void) /* Key */if(EXTI_GetITStatus(EXTI_Line5) != RESET)Led_Turn_off_all();Led_Turn_on_1();/* Clear the EXTI Line 5 */EXTI_ClearITPendingBit(EXTI_Line5);if(EXTI_GetITStatus(EXTI_L
8、ine6) != RESET)Led_Turn_off_all();Led_Turn_on_2();/* Clear the EXTI Line 6 */ EXTI_ClearITPendingBit(EXTI_Line6);if(EXTI_GetITStatus(EXTI_Line7) != RESET)Led_Turn_off_all();Led_Turn_on_3();/* Clear the EXTI Line 7 */ EXTI_ClearITPendingBit(EXTI_Line7);扩展实验自动刹车灯自动刹车灯是一个小巧的电路板,在刹车减速时自动亮起。可以将其安装在自行车上,用
9、于警示其他车辆和行人。自动刹车灯由电池供电并使用内置加速度传感器。 原件:STM32 两 LED 灯,两个红色 LED加速度传感器 使用方法自动刹车灯共有两个工作模式:刹车灯模式和警示灯模式。启动后自动进入警示灯模式,两种模式下加速度传感器的参数不同,但在静止时设备都会自动休眠,可以通过按键唤醒。设备使用两节 5 号电池供电。刹车灯模式:设备当作自动刹车灯使用时应当使用扎带等方式固定于自行车座椅下或后 轮货架上。固定完成后将开关调至 ON 端,在之后的使用中可以不必关闭。自动刹车灯在车辆静止 30 秒之后自动休眠,在监测到连续震动之后自动唤醒。工作时,如果没有监测到刹车,自动刹车灯左右两个 L
10、ED 均以低亮度显示黄色。当车辆刹车时,自动刹车灯的四只 LED 均以高亮显示红色。警示灯模式:设备工作于警示灯模式下时,会依次以渐强和渐弱的形式点亮各 LED,显示警示灯的效果。这种模式下加速度传感器不工作。作用是在晚上可以提醒后方的车辆前面有自行车行驶。 实验构想加速度传感器使用 STM32 供电,在检测到反向加速度时,向 STM32 输出一个电平触发相应引脚的中断处理程序,该中断处理程序将红色 LED 所在引脚输出低电平,即点亮红色警示灯。附录智能插座项目代码STM32加速度传感器#include #include #include #include #define uint unsig
11、ned int#define uchar unsigned char#define MAXCHAR 81sbit LED0=P20;sbit LED1=P21;sbit LED2=P22;sbit LED3=P23;/sbit LED4=P24;/sbit LED5=P25;/sbit LED6=P26;/sbit LED7=P27;sbit OutJIDIANQI1=P27; sbit OutJIDIANQI2=P26;sbit OutJIDIANQI3=P25;sbit OutJIDIANQI4=P24;/sbit JIDIANQI=P10;sbit Send_ENGLISH_key=P3
12、2; /发英文 TEXT 短信按键sbit Send_CALLING_key=P33; /打电话按键uchar aaMAXCHAR;char SendCurCondition4;char SendResult9;int i=1;code uchar AT00=“ATrn“; /握手检测code uchar ATCN=“AT+CNMI=2,1rn“; /短信设置 1code uchar CMGF1=“AT+CMGF=1rn“; /短信设置 2 中午code uchar CMGR12=“AT+CMGR=1rn“; /读短信code uchar CMGD12=“AT+CMGD=1rn“; /删除短信#define CALL_YOU_TELNUMBER “ATD18463106616;rn“ #define SEND_MESSA_TO_YOUR “at+cmgs=“18463106616“rn“ #define SEND_MESSA_CONTENT ““uchar a,j=0,flag=0;int g_timeout=0;void delay(uint ms)/ 延时子程序uchar i;while(ms-)for(i=0;i120;i+);/*函数名称:Print_Char函数功能:发送单个字符入口参数:ch 出口参数:无*/