- 1、本文档共19页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
线路检测报告
二级项目(嵌入式系统应用)题 目:基于stm32的路检测学 号:____20134823091__姓 名:_____王秀峰 ____班 级: 13自动C1 专 业: 自动化______学 院: _工学部 _ ___入学时间: ____2013级指导教师: 王振华 _日 期: 2015年 7月 9日目录1.线路及实现功能11.1 线路图11.2 功能要求12 实现方法22.1 原理及思路22.2 伪代码22.3 代码实现23 程序测试中出现的问题及解决方法53.1 stm32通信问题53.2 引脚输出电平选择及引脚模式选择64 测试结果与总结84.1 测试结果84.2 总结9附录10单片机引脚连接图10线路连接图11程序11main.c11gpio.c13Gpio.h14usart.c14usart.h161.线路及实现功能1.1 线路图1.2 功能要求线路连接之后通过单片机检测线路连接是否正确,如果连接正确输出连接正确,如果连接不正确输出连接错误的点,并统计错误点的个数。2 实现方法2.1 原理及思路原理:当导线连接在一起时,信号是可以导通的,基于这点可以将电路中需要需要检测的点连接单片机的引脚,单片机引脚依次置位,并在其中一个引脚置位时检测其他引脚的电平,同为高电平说明两个引脚之间有导线连接,判断该导线连接是否正确。思路:将GPIOD口的0-11口依次置高电平,每次置高电平后以16位的形式读取GPIOD口的数值,之后对读取到的数据操作,判断是否有错误接线。2.2 伪代码① 令A=线路正确连接时的数据。② 将第一个引脚置位,读取其他引脚的状态得到数据B。③ 将AB进行比较,如果A=B,则输出正确,如果A!=B,跳到第四步。④ 令B=A|B,得到正确与错误同时存在的数据,在令B=A^B,得到错误点的数据。⑤ 将B进行移位操作,得到最低位为1时,根据移位的次数判断哪个引脚对应的线连接错误,并输出错误的位置。⑥ 将a进行左移操作重复上述操作。2.3 代码实现① uint16_t n[12]={3,3,140,140,48,48,832,140,832,832,3072,3072};代码分析:将正确的数据存入数组n[12]中。② 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图2③if(ReadValue ==n[i]){USART_ClearFlag(USART1, USART_FLAG_TC);printf (the %d point is Right\n,i);}代码分析:将ReadValue与n[i]进行比较,如果正确则输出。④uint16_t j,count;else{ReadValue=n[i]|ReadValue;ReadValue=ReadValue^n[i];for(j=0;j12;j++){ReadValue =1;if(ReadValue 1){USART_ClearFlag(USART1, USART_FLAG_TC);printf(the %d point is error ,j);count++;}}}代码分析:在第三步判断有错误的情况下,执行此过程,首先将ReadValue=n[i]|ReadValue;得到错误位与正确位同时存在的数据。ReadValue=ReadValue^n[i];异或之后变量ReadValue中只有错误位,通过循环移位,将错误的数据位找到并输出。Count统计错误的个数。3 程序测试中出现的问题及解决方法3.1 stm32通信问题在任务开始阶段,测试结果如图3图3测试程序USART1_Config();GPIOD_Config();//GPIOD_test();printf(12\n);printf(12\n);while(1);使用stm32f10x调试串口通信时,发现一个出错的现象,硬件复位重启之后,发送测试数据0x01,0x02,0x03,0x04.接收端收到的数据为:0x02,0x03,0x04,第一个数据丢失。查阅stm32f10x参考手册,找到这样一句话:?TC:发送完成标记:?当前字节帧发送完成后,由硬件将该位置位。如果USART_CR1中的TCIE为1,则产生中断。由软件序列清除该位(先读USART_SR,然后写入USART_DR)。TC位也可以通过写入0来清除,只有在多缓存通
文档评论(0)