UART模拟7816协议开发总结(终于成功啦,一扫阴霾!写了一篇总结!!!!)
来源:互联网 发布:算法 下载 编辑:程序博客网 时间:2024/05/17 07:51
步骤及成情况和问题记录:
1 测试晶振在3.3V的情况下是否可以起振
问题:能,但是有毛刺,大小没有问题
2 查看PNP的BJT的连接方法
问题:无,可以正常使用
3 焊接晶振
问题:无,焊接完成
4 硬件电路检测
问题:无,通过
5 测试ARM的输出高低是否成功
问题:火星,没有发现居然要设置GPIO时钟,不了解其内部结构啊!RCC_APB2PeriphClockCmd
6 测试输出的TX是否可以满足要求,利用示波器看
问题:原理图上USART居然画了两遍,其实在PB上,检查出来或测试完毕,注意PB口的配置
7 测试与上位机的通讯是否成功
问题:无,成功
8 测试是否可收到ATR应答信号
问题:收到了ATR的复位应答信号:)
总结:
在硬件搭建中遇到的第一个问题是晶振输出有毛刺,但是在后面的测试中证实这个对电路的可实现性没有影响;
第二个问题是硬件电路检测当时认为没有问题,成为了这次开发中一次非常大的败笔,其实在周一下午老余过来之后的测试中发现我的VCC那端有虚焊现象出现,只是一根线引过去出现了问题,我没有检查出来(确切的说还是不认真所致),需要检讨一下;
第三个问题是没有发现板卡必须打开GPIO的时钟才能对其进行正常操作导致一段时间的串口不能发出数据来,也就是调用其一个函数:RCC_APB2PeriphClockCmd 虽然不知道这个函数为什么一定要加,但是这是实践出来的正确道理。。。火星;
第四个问题是提供给我的板卡电路图有问题而我没有注意到,这个责任不全在我,注意下图:
居然有两个地方出现了USART3……最后参考DATASHEET上发现PC10和PC11根本就没有可选功能,也就是说右上角红圈那里的参考图是错误的。
周五下午收到了ATR应答信号,但是不很稳定,原因在周六周日一直在寻找,其实原因就是VCC出现的那个虚焊,真丢人!
周六进行了一些其他的关于VC下开发清华同方那个读卡器的程序设计,对串口知识有了进一步的了解,串口图如下:
一定要注意这个图是公头视图,母头与其刚好境像(左右颠倒),因为这个错误的判断了RTS和CTS信号的位置。
通过WINDOWS提供的API函数可以实现对RTS信号的置位清零和CTS信号的监听,可以通过MSDN中查到,同方的卡利用RTS信号对卡进行复位,这个思路非常巧妙,经过我和顺顺的实际测试发现确实可以这样进行使用(学了一招)!
周六周日其实进展基本上是零,不断的在进行重复的测试工作,又缺乏必要的测试工具,很2。
周一早上来了之后发现了一个非常奇妙的现象,就是当我利用500欧的电阻上拉IO端的时候,周爱的那张卡可以正常使用;当我利用1k欧的电阻上拉IO端的时候,老余那张蓝色的卡可以使用,跟老关讨论了半天觉得是功耗问题——也就是说没张卡功耗不一样,方案有可能不能用!。。。其实还是因为VCC没有供上电有虚焊,郁闷到不行了。
周一下午请老余来检查出了虚焊的问题,再上电之后发现读任何一张卡返回ATR都非常稳定了,虽然觉得错误犯的很2,但是还是很爽。
然后和老关开始一起检测串口的波形,一个ETU一个ETU的去检查,去数,发现发出来的数据并不是我们所需要的,确切的说是错误的,如果不设置奇偶校验位还可以,一旦设置了必然会出错。后来分析发现问题是出在发送的数据不对,而智能卡检查出来数据错误了之后会向这边发送一个报错信号(低电平),从而把信号线拉低了。后来利用串口1去发出现相同的问题,上位机检测出的数据都不正确了。。。后来查找出了最终原因是因为对芯片资料的生疏,注意下图:
和下面这段话:
了解到当设置M=1时,是9位数据位,当M=0时,是8位数据位,而奇偶校验位是出现在每次的最高位上,当我们设置M=0时会导致MSB变成奇偶校验位,从而实际上只有7位数据位必然会出错。因此还是要仔细看DATASHEET啊!设置完成USART_WordLength = USART_WordLength_9b;问题就都得到解决了!
完成的一刻感觉很爽,老天让我遇到了最多的问题,其实是帮我熟悉这个东西……
另外学习到的一些知识:
一.串口的数据读写是反的,例如:
示波器上看到:0 11011100 1 1
数据为3B,起始位0
二.卡上调用的是7816协议,有发送数据等待,接收数据等待的功能,周爱的卡调用的是底层函数实现的功能,所以他的实现起来相对简单。
三. 7816协议必须有奇偶校验位,本智能卡采用的是偶校验(好象普遍都是),一定要注意串口的参数设置,不能设置成无校验。
四.GPIO的模式选择:
GPIO_Mode_AIN = 0x0,
后两个具体是什么设置,没有仔细去抠。。。
- UART模拟7816协议开发总结(终于成功啦,一扫阴霾!写了一篇总结!!!!)
- 好久没有写原创日志了!现在每个星期写一篇总结一周的学习总结(一)!
- 十年总结(18):2006,逐渐走出阴霾
- 十年总结(18):2006,逐渐走出阴霾
- 昨天终于把OCM考完了(写了下总结)
- Gentoo总结(xfce终于出来了)
- UART传输协议-个人学习总结
- UART、I2C以及SPI协议学习总结
- 再谈关于我原来写的一篇博文《终于成功安装了 SigmaTel High Definition Audio CODEC 驱动》
- 关于loadrunner在win10系统下的安装+配置+破解总结——终于破解成功啦!耶
- 根据网友们的总结自己尝试了下STM32移植ucosii 终于成功了
- UART总结
- 终于成功注册了,我的第一篇blog
- 项目终于要初验了!总结!
- 分享一篇以前写的总结文档【iPhone开发入门教程】
- iOS开发—HTTP协议总结一
- 终于调试成功,在这里总结一下,怕以后忘了
- 51单片机UART串口通信开发总结
- 数据库时间格式转化
- 进程 过程调用 函数调用
- LED数码管的显示
- vc6.0命令行程序的调试——怎样输入命令行参数
- UIKeyboard键盘相关知识点
- UART模拟7816协议开发总结(终于成功啦,一扫阴霾!写了一篇总结!!!!)
- java中LIST集合排序通用方法
- HttpContext.Current.Request.Files后台取不到值的解决方法
- 【附源码】【Android 3D OpenGL】开发之二——旋转的三角形【MacroCheng原创】
- 相对路径问题
- WIN7如何共享出本机WIFI热点给其它设备共享上网
- JDK动态代理工厂类
- XCode4.0之HelloWorld创建及说明
- Javascript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等)