- 1、本文档共19页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
二级项目(嵌入式系统应用)
题 目:基于stm32的路检测
学 号:____20134823091__
姓 名:_____王秀峰 ____
班 级: 13自动C1
专 业: 自动化______
学 院: _工学部 _ ___
入学时间: ____2013级
指导教师: 王振华 _
日 期: 2015年 7月 9日
目录
TOC \o 1-3 \h \z \u 1.线路及实现功能 1
1.1 线路图 1
1.2 功能要求 1
2 实现方法 2
2.1 原理及思路 2
2.2 伪代码 2
2.3 代码实现 2
3 程序测试中出现的问题及解决方法 5
3.1 stm32通信问题 5
3.2 引脚输出电平选择及引脚模式选择 6
4 测试结果与总结 8
4.1 测试结果 8
4.2 总结 9
附录 10
单片机引脚连接图 10
线路连接图 11
程序 11
main.c 11
gpio.c 13
Gpio.h 14
usart.c 14
usart.h 16
PAGE 17
1.线路及实现功能
1.1 线路图
1.2 功能要求
线路连接之后通过单片机检测线路连接是否正确,如果连接正确输出连接正确,如果连接不正确输出连接错误的点,并统计错误点的个数。
2 实现方法
2.1 原理及思路
原理:当导线连接在一起时,信号是可以导通的,基于这点可以将电路中需要需要检测的点连接单片机的引脚,单片机引脚依次置位,并在其中一个引脚置位时检测其他引脚的电平,同为高电平说明两个引脚之间有导线连接,判断该导线连接是否正确。
思路:将GPIOD口的0-11口依次置高电平,每次置高电平后以16位的形式读取GPIOD口的数值,之后对读取到的数据操作,判断是否有错误接线。
2.2 伪代码
= 1 \* GB3 ① 令A=线路正确连接时的数据。
= 2 \* GB3 ② 将第一个引脚置位,读取其他引脚的状态得到数据B。
= 3 \* GB3 ③ 将AB进行比较,如果A=B,则输出正确,如果A!=B,跳到第四步。
= 4 \* GB3 ④ 令B=A|B,得到正确与错误同时存在的数据,在令B=A^B,得到错误点的数据。
= 5 \* GB3 ⑤ 将B进行移位操作,得到最低位为1时,根据移位的次数判断哪个引脚对应的线连接错误,并输出错误的位置。
= 6 \* GB3 ⑥ 将a进行左移操作重复上述操作。
2.3 代码实现
= 1 \* GB3 ① uint16_t n[12]={3,3,140,140,48,48,832,140,832,832,3072,3072};
代码分析:将正确的数据存入数组n[12]中。
= 2 \* GB3 ② uint16_t a=1; GPIO_Write(GPIOD,a);
代码分析:声明变量a=1;,并将a的值写入GPIO的ODR寄存器中,如图1
图1
uint16_t ReadValue; ReadValue=GPIO_ReadInputData(GPIOD);
代码分析:声明变量ReadValue;通过 GPIO_ReadInputData()函数读取GPIOD的数值。
GPIO_ReadInputData()函数如图2
图2
= 3 \* GB3 ③if(ReadValue ==n[i])
{
USART_ClearFlag(USART1, USART_FLAG_TC);
printf (the %d point is Right\n,i);
}
代码分析:将ReadValue与n[i]进行比较,如果正确则输出。
= 4 \* GB3 ④ 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];
文档评论(0)