




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
梧州学院实验报告实验课程:嵌入式系统及应用系别:电子信息工程专业:电子信息工程班级:19电子信息工程二班姓名:罗齐霖学号:201909502205评分表评价元素较差0.4合格0.6中等0.7较好0.8很好0.9非常好1.0实验成绩实验报告规范程度(页面整洁、图示规范、排版工整等20分)报告撰写情况(50分,实验基本原理、实验报告的完整度、相关数据是否准确、相关数据分析、是否按照实验要求来写等内容)实验数据及其分析(实验总结部分要求写的详实、碰到了什么问题如何解决的、通过实验学到了什么及对实验的心得体会。30分)成绩指导老师(签字):年月日
梧州学院实验报告实验课程:嵌入式系统及应用实验名称:模拟汽车灯系统实验时间:2021.12.12实验设备:电脑,stm32实验目的:熟悉整合所学内容实验原理及内容:【实验要求】中间那个灯亮表示远光灯开,灭就是近光灯,由按键1控制,要求按键全部使用中断控制,按一次灯亮在按一次灯灭。左灯由按键2控制,按下后闪烁,闪烁效果是呼吸灯,再按下后灭;右灯由按键3控制,效果一样。发挥部分:串口控制,通过串口调试助手发送字符实现以上效果。【实验原理】原理图两个呼吸灯三个按键一个灯程序设计思路设置按键3个端口为上升沿产生中断,在中断中设置相应的按键对应灯的标志位,因为优先级不重要所以随便设置。设置PWM模式2,高电平有效(ccr数字越小灯越暗)。在串口中断中将接收到的数据储存到缓冲数组中,并记录接收的数量。在主函数中调用需要的函数。在循环中检验不同的灯标志位,相应的灯取反或产生不同的按键标志位并加一,清楚灯的标志位,根据按键标志位的奇偶判断按键按下的次数。当按键标志位使奇数时,判断灯开,ccr的值由0累加到100再递减循环,实现PWM占空比的改变表现为灯呼吸。当按键标志位使偶数时,判断灯灭,ccr=0。判断缓冲数组中的数据,改变对应的按键标志位。【实验内容与步骤】程序步骤及注释主程序部分#include"stm32f10x.h"#include"PWM.h"#include"delay.h"#include"key.h"#include"USART.h"externunsignedcharled_mode;//外部定义externunsignedcharUSART_RX_BUF[];externunsignedintUSART_RX_STA;intmain(void){ unsignedintpwm_data=0,pwm_mode=1,key1_mode=0,key3_mode=0; //定义pwm的ccr寄存器的值,pwm模式key1,key3模式 TIM3_PWM_Init((120-1),0);//psc=0,arr=119(不分频,频率72K/120=600) delay_Init();//初始化 key_Init(); usart_Init(); while(1) { //按键控制(由端口定义)2,3,4分别对应按键1,2,3 if(led_mode==1)//按键标志位按键1按下 { key1_mode++;//由奇偶判断按键模式 led_mode=0;//清除按键标志位 } if(led_mode==2)//按键2按下 { BIT_ADDR(GPIOA_ODR_Addr,4)=~BIT_ADDR(GPIOA_ODR_Addr,4); //取反灯2电平 led_mode=0; } if(led_mode==3)//按键3按下 { key3_mode++; led_mode=0; } if((key1_mode%2==1)||(key3_mode%2==1))//如果按键1或3有按下 { delay_ms(10);//等待灯的变化,以免过快看不出呼吸 if(pwm_mode)pwm_data++;//渐亮模式 elsepwm_data--;//渐暗模式 if(pwm_data>100)pwm_mode=0; if(pwm_data==1)pwm_mode=1; if(key1_mode%2==1)//按键1按下奇数次 {TIM_SetCompare3(TIM3,pwm_data);}//改变通道1的ccr(灯1呼吸) if(key3_mode%2==1)//按键3按下奇数次 {TIM_SetCompare4(TIM3,pwm_data);}//改变通道2的ccr(灯3呼吸) } if(key1_mode%2==0){TIM_SetCompare3(TIM3,0);} //按键1按下偶数次,灯1灭 if(key3_mode%2==0){TIM_SetCompare4(TIM3,0);} //按键3按下偶数次,灯3灭 //串口控制 if(USART_RX_STA&0x8000)//接收未完成(USART_RX_STA的15位为1) { if((USART_RX_STA&0x3f)==2)//接收数量为2 { if(USART_RX_BUF[0]=='D'&&USART_RX_BUF[1]=='M') {led_mode=1;}//发送DM效果等同于按键1按下 if(USART_RX_BUF[0]=='S'&&USART_RX_BUF[1]=='B') {led_mode=2;} //发送SB效果等同于按键2按下 if(USART_RX_BUF[0]=='Z'&&USART_RX_BUF[1]=='Z') {led_mode=3;} //发送ZZ效果等同于按键3按下 } USART_RX_STA=0;//清楚缓存 } }} 按键部分:#include"key.h"unsignedcharled_mode=0;voidkey_Init(void){ EXTI_InitTypeDefEXTI_InitStructure; NVIC_InitTypeDefNVIC_InitStructure; GPIO_InitTypeDefGPIO_InitStructure; //定义三个不同结构体类型变量 delay_Init();//初始化延时函数 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);//打开PC和复用时钟 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//下拉输入 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;//端口1,2,3 GPIO_Init(GPIOC,&GPIO_InitStructure); //初始化PC1,2,3 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource1);//中断线1映射到PC1 EXTI_InitStructure.EXTI_Line=EXTI_Line1;//中断线3 EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//中断模式 EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;//上升沿触发 EXTI_InitStructure.EXTI_LineCmd=ENABLE;//使能 EXTI_Init(&EXTI_InitStructure);//初始化外部中断 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource2);//中断线2映射到PC2 EXTI_InitStructure.EXTI_Line=EXTI_Line2;//中断线4 EXTI_Init(&EXTI_InitStructure);//初始化外部中断 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource3);//中断线3映射到PC3 EXTI_InitStructure.EXTI_Line=EXTI_Line3;//中断线0 EXTI_Init(&EXTI_InitStructure);//初始化外部中断 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置优先级分组2 NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;//通道1 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级2 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//子优先级0 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel=EXTI2_IRQn;//通道2 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级2 NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//子优先级1 NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn;//通道3 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级2 NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;//子优先级2 NVIC_Init(&NVIC_InitStructure); }voidEXTI1_IRQHandler(void)//若有按键按下则进入中断{ delay_ms(10);//延时10ms消抖 if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1)==1)//确定按键按下 { led_mode=1; } EXTI_ClearITPendingBit(EXTI_Line1);//清除LINE3上的中断标志位}voidEXTI2_IRQHandler(void)//若有按键按下则进入中断{ delay_ms(10);//延时10ms消抖 if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2)==1)//确定按键按下 { led_mode=2; } EXTI_ClearITPendingBit(EXTI_Line2);//清除LINE4上的中断标志位}voidEXTI3_IRQHandler(void)//若有按键按下则进入中断{ delay_ms(10);//延时10ms消抖 if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)==1)//确定按键按下 { led_mode=3; } EXTI_ClearITPendingBit(EXTI_Line3);//清除LINE2上的中断标志位}PWM部分:#include"PWM.h"voidTIM3_PWM_Init(unsignedintarr,unsignedintpsc){ GPIO_InitTypeDefGPIO_InitStructure;//定义GPIO_InitTypeDef类型指针 TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStructure;//定义TIM_TimeBaseInitTypeDef类型指针 TIM_OCInitTypeDefTIM_OCInitStructure;//定义TIM_OCInitTypeDef类型指针 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB,ENABLE);//使能PB、PA和复用时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能定时器2时钟 //中间灯PA.4 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;//选择端口4 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化PA.4 GPIO_SetBits(GPIOA,GPIO_Pin_4);//灯灭 //左右灯PA.6/7 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;//选择端口0、1 GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化PB0、1 TIM_TimeBaseInitStructure.TIM_ClockDivision=0;//时钟分割 TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数 TIM_TimeBaseInitStructure.TIM_Period=arr;//自动重装载值 TIM_TimeBaseInitStructure.TIM_Prescaler=psc;//分频系数 TIM_TimeBaseInit(TIM3,&TIM_TimeBase
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 项目成功因素研究试题及答案
- 公共服务政策的公平性与效率分析试题及答案
- 软件设计师考试定制化复习试题及答案
- 计算机软件测试在环境政策评估中的应用试题及答案
- 计算机软件测试中的常见问题试题及答案
- 公共政策的全球视野与本土化探讨试题及答案
- 软件设计师考试技能提升路线试题及答案
- 现代公共政策理论框架试题及答案
- 如何建立健全公共政策的决策制度试题及答案
- 项目团队冲突处理技巧试题及答案
- 2025年砂石常规检测试题及答案
- 机械设计制造及其自动化毕业论文-温室用小型电动旋拼机设计
- 2025人教版七年级下册生物期末学业质量检测试卷(含答案)
- 教师职业道德与专业发展知到智慧树章节测试课后答案2024年秋鲁东大学
- 品质管理品质部管理制度
- 非标机械设备工厂项目绩效奖激励方案2023年
- 养老护理员职业道德及行为规范
- 贵州省遵义市(2024年-2025年小学六年级语文)部编版质量测试((上下)学期)试卷及答案
- 《绿色建筑咨询服务》课件
- T∕CEC 208-2019 电动汽车充电设施信息安全技术规范
- 《轮胎湿地操纵稳定性主观评价方法》
评论
0/150
提交评论