ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:332.21KB ,
资源ID:9965095      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9965095.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(线路检测报告.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

线路检测报告.docx

1、线路检测报告二级项目(嵌入式系统应用)题 目:基于stm32的路检测学 号:_20134823091_姓 名:_王秀峰 _班 级: 13自动C1 专 业: 自动化_学 院:_工学部 _ _入学时间:_2013级 指导教师: 王振华 _日 期: 2015年 7月 9日1.线路及实现功能1.1 线路图1.2 功能要求线路连接之后通过单片机检测线路连接是否正确,如果连接正确输出连接正确,如果连接不正确输出连接错误的点,并统计错误点的个数。2 实现方法2.1 原理及思路原理:当导线连接在一起时,信号是可以导通的,基于这点可以将电路中需要需要检测的点连接单片机的引脚,单片机引脚依次置位,并在其中一个引脚

2、置位时检测其他引脚的电平,同为高电平说明两个引脚之间有导线连接,判断该导线连接是否正确。思路:将GPIOD口的0-11口依次置高电平,每次置高电平后以16位的形式读取GPIOD口的数值,之后对读取到的数据操作,判断是否有错误接线。2.2 伪代码令A=线路正确连接时的数据。将第一个引脚置位,读取其他引脚的状态得到数据B。将AB进行比较,如果A=B,则输出正确,如果A!=B,跳到第四步。令B=A|B,得到正确与错误同时存在的数据,在令B=AB,得到错误点的数据。将B进行移位操作,得到最低位为1时,根据移位的次数判断哪个引脚对应的线连接错误,并输出错误的位置。将a进行左移操作重复上述操作。2.3 代

3、码实现uint16_t n12=3,3,140,140,48,48,832,140,832,832,3072,3072;代码分析:将正确的数据存入数组n12中。uint16_t a=1; GPIO_Write(GPIOD,a);代码分析:声明变量a=1;,并将a的值写入GPIO的ODR寄存器中,如图1图1uint16_t ReadValue; ReadValue=GPIO_ReadInputData(GPIOD);代码分析:声明变量ReadValue;通过 GPIO_ReadInputData()函数读取GPIOD的数值。GPIO_ReadInputData()函数如图2图2if(ReadVa

4、lue =ni) USART_ClearFlag(USART1, USART_FLAG_TC); printf (the %d point is Rightn,i);代码分析:将ReadValue与ni进行比较,如果正确则输出。 uint16_t j,count;else ReadValue=ni|ReadValue; ReadValue=ReadValueni; for(j=0;j=1; if(ReadValue &1) USART_ClearFlag(USART1, USART_FLAG_TC); printf(the %d point is error ,j); count+; 代码分析

5、:在第三步判断有错误的情况下,执行此过程,首先将ReadValue=ni|ReadValue;得到错误位与正确位同时存在的数据。ReadValue=ReadValueni;异或之后变量ReadValue中只有错误位,通过循环移位,将错误的数据位找到并输出。Count统计错误的个数。3 程序测试中出现的问题及解决方法3.1 stm32通信问题在任务开始阶段,测试结果如图3图3测试程序USART1_Config(); GPIOD_Config(); /GPIOD_test(); printf(12n); printf(12n); while(1);使用stm32f10x调试串口通信时,发现一个出错

6、的现象,硬件复位重启之后,发送测试数据0x01,0x02,0x03,0x04.接收端收到的数据为:0x02,0x03,0x04,第一个数据丢失。查阅stm32f10x参考手册,找到这样一句话:TC:发送完成标记:当前字节帧发送完成后,由硬件将该位置位。如果USART_CR1中的TCIE为1,则产生中断。由软件序列清除该位(先读USART_SR,然后写入USART_DR)。TC位也可以通过写入0来清除,只有在多缓存通讯中才推荐这种清除程序。0:发送还未完成;1:发送完成。注意到这一句:由软件序列清除该位(先读USART_SR,然后写入USART_DR)。 也就是说,要先read USART_SR

7、,然后write USART_DR,才能完成TC状态位的清除。而硬件复位后,串口发送的首个数据之前没有read SR的操作,是直接write DR,也就是说,TC没有被清除掉。硬件复位后,串口发送首个数据之前,先读取一下USART_SR,则能够保证首个数据发送时,不出现覆盖的情况。当然,也有别的方法,比如先清除TC状态位,USART_ClearFlag(USART1, USART_FLAG_TC);3.2 引脚输出电平选择及引脚模式选择在程序测试中对a的赋值有两种,一种是置1,另一种是置零;引脚初始化时可选择为输出的有四种模式,分别为推挽输出模式、开漏输出模式、复用推挽输出模式和复用开漏输出模

8、式。复用模式是根据GPIO的复用功能来选择的,如GPIO的引脚用作串口的输出,则使用复用推挽输出模式。所以对于本任务可选的只有前两种。下面是测试过程中的数据模式:推挽输出模式 a:1 模式:推挽输出模式 a:0xfffe 图4 图5模式:开漏输出模式 a:1 模式:开漏输出模式 a:0xfffe 图6 图7分析上述数据, 两种情况输出数据无法判别不能使用,输出的为随机数,根据I/O端口位的基本结构,如图7可知在开漏输出模式时,如果我们控制输出为0,低电平,则使N-MOS管导通,使输出接地,若控制输出为1(无法直接输出高电平),则既不输出高电平,也不输出低电平,为高阻态。为正常使用时必须外部外接

9、一个上拉电阻。所以在本任务中引脚不能设置为开漏输出模式。图8 I/O端口位的基本结构最终能选择的只有,但是在测试数据中有几组数据为零,查看接线图,发现数据为0的点均为结点,最后查看STM32的技术手册发现其引脚无法驱动两个引脚,导致输出高电平的引脚被拉低。4 测试结果与总结4.1 测试结果接线完全正确时图9接线有误时图104.2 总结通过完成这次任务,使我加深了对stm32的掌握,在过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露了前期我们在这方面的知识欠缺和经验不足。实践出真知,通过亲手制作,使我掌握的知识不再是纸上谈兵。过而能改,善莫大焉。在过程

10、中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检验修改环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次任务终于顺利完成了,在过程中遇到了很多问题,最后在我的不懈的努力下,终于迎刃而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘。我认为这次的任务培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在过程中,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、

11、再实践。这对于我们的将来也有很大的帮助。以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。就像中国提倡的艰苦奋斗一样,我们都可以在课程设计结束之后变的更加成熟,会面对需要面对的事情。 回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

12、在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。总之,认真对待每一个学习的机会,珍惜过程中的每一分一秒,学到最多的知识和方法,锻炼自己的能力,这个是我们在在本次课程设计中学到的最重要的东西,以后也将受益匪浅的!附录单片机引脚连接图线路连接图程序main.c#include stm32f10x_conf.h#include usart.h#include gpio.h/uint16_t n12=3,3,140,140,48,48,832,140,832,832,3072,3072;uint16_t n12=3,3,0,0,48,48,0,0,0,0,3072,3072;/

13、预置正确的数据void GPIOD_test()/引脚电平检测函数 static uint16_t i,j,a=1,ReadValue,count; /声明静态变量 for(i=0;i12;i+) /开始进行12次循环 GPIO_Write(GPIOD,a);/将a的值写入到GPIOD口/*GPIOD口读取数据并将值赋给ReadValue*/ ReadValue=GPIO_ReadInputData(GPIOD); ReadValue= ReadValue&0xfff;/取出ReadValue的低12位 a=1; /a每循环一次进行一次左移操作 if(ReadValue =ni)/判断读取的数

14、据与预置的数据是否相等 USART_ClearFlag(USART1, USART_FLAG_TC);/清除发送完成标志位 printf (the %d point is Rightn,i+1); else/读取到的数据与预置的数据不一致进行本操作 ReadValue=ni|ReadValue;/*1 ReadValue=ReadValueni;/*2/*1、2两步操作是将错误位找到*/ for(j=0;j=1;/数据右移,将错误位移到最低位 if(ReadValue &1)/判断数据非0 USART_ClearFlag(USART1, USART_FLAG_TC); printf(the e

15、rror point is %dn,j+1); if(i=0|i=1) printf (the error is line is 1n); else if(i=2|i=3|i=7) printf (the error is line is 2n); else if(i=4|i=5) printf (the error is line is 3n); else if(i=6|i=8|i=9) printf (the error is line is 4n); else if(i=10|i=11) printf (the error is line is 5n); count+; j=0; USA

16、RT_ClearFlag(USART1, USART_FLAG_TC); printf (there are %d errors,count);int main(void) USART1_Config();/串口初始化 GPIOD_Config();/GPIO口初始化 GPIOD_test();/引脚电平检测函数 while(1);/等待gpio.c#include gpio.hvoid GPIOD_Config(void) GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENA

17、BLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOD, &GPIO_InitStructure);Gpio.h#ifndef _GPIO_H_#define _GPIO_H_#include stm32f10x.h#include stm32f10x_usart.hvoid GPIOD_Config(void);#endi

18、fusart.c#include usart.huint32_t temp;void USART1_Config(void) GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed

19、_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USAR

20、T_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; USART_Init(USA

21、RT1, &USART_InitStructure); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); USART_Cmd(USART1, ENABLE); void NVIC_Configuration(void) NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); / NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChan

22、nelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); void USART1_IRQHandler(void) if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET) temp=USART_ReceiveData(USART1); USART_SendData(USART1, temp);

23、while(USART_GetITStatus(USART1, USART_FLAG_TC)!=RESET); USART_ClearITPendingBit(USART1, USART_IT_RXNE); int fputc(int ch, FILE *f) USART_SendData(USART1, (uint8_t) ch); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) = RESET); return (ch);int fgetc(FILE *f) while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) = RESET); return (int)USART_ReceiveData(USART1);usart.h#ifndef _USART_H_#define _USART_H_#include stm32f10x.h#include stm32f10x_usart.h#include void USART1_Config(void);void NVIC_Configuration(void);void USART1_IRQHandler(void);#endif

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1